Feat/convert return reason service to typescript (#1961)
**What** - Convert return reason service to typescript Fixes CORE-355
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
const { match } = require("assert")
|
||||
const path = require("path")
|
||||
const { RepositoryNotTreeError } = require("typeorm")
|
||||
|
||||
const setupServer = require("../../../helpers/setup-server")
|
||||
const { useApi } = require("../../../helpers/use-api")
|
||||
@@ -17,7 +15,7 @@ describe("/admin/return-reasons", () => {
|
||||
beforeAll(async () => {
|
||||
const cwd = path.resolve(path.join(__dirname, "..", ".."))
|
||||
dbConnection = await initDb({ cwd })
|
||||
medusaProcess = await setupServer({ cwd })
|
||||
medusaProcess = await setupServer({ cwd, verbose: false })
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
|
||||
@@ -85,5 +85,5 @@ export class AdminPostReturnReasonsReq {
|
||||
description?: string
|
||||
|
||||
@IsOptional()
|
||||
metadata?: object
|
||||
metadata?: Record<string, unknown>
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ export default (app) => {
|
||||
return app
|
||||
}
|
||||
|
||||
export const defaultAdminReturnReasonsFields = [
|
||||
export const defaultAdminReturnReasonsFields: (keyof ReturnReason)[] = [
|
||||
"id",
|
||||
"value",
|
||||
"label",
|
||||
@@ -47,7 +47,7 @@ export const defaultAdminReturnReasonsFields = [
|
||||
"deleted_at",
|
||||
]
|
||||
|
||||
export const defaultAdminReturnReasonsRelations = [
|
||||
export const defaultAdminReturnReasonsRelations: (keyof ReturnReason)[] = [
|
||||
"parent_return_reason",
|
||||
"return_reason_children",
|
||||
]
|
||||
|
||||
@@ -2,7 +2,9 @@ import {
|
||||
defaultAdminReturnReasonsFields,
|
||||
defaultAdminReturnReasonsRelations,
|
||||
} from "."
|
||||
import { ReturnReason } from "../../../../models"
|
||||
import { ReturnReasonService } from "../../../../services"
|
||||
import { FindConfig, Selector } from "../../../../types/common"
|
||||
|
||||
/**
|
||||
* @oas [get] /return-reasons
|
||||
@@ -29,7 +31,7 @@ export default async (req, res) => {
|
||||
"returnReasonService"
|
||||
)
|
||||
|
||||
const query = { parent_return_reason_id: null }
|
||||
const query: Selector<ReturnReason> = { parent_return_reason_id: null }
|
||||
const data = await returnReasonService.list(query, {
|
||||
select: defaultAdminReturnReasonsFields,
|
||||
relations: defaultAdminReturnReasonsRelations,
|
||||
|
||||
@@ -79,5 +79,5 @@ export class AdminPostReturnReasonsReasonReq {
|
||||
description?: string
|
||||
|
||||
@IsOptional()
|
||||
metadata?: object
|
||||
metadata?: Record<string, unknown>
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ export default (app) => {
|
||||
return app
|
||||
}
|
||||
|
||||
export const defaultStoreReturnReasonFields = [
|
||||
export const defaultStoreReturnReasonFields: (keyof ReturnReason)[] = [
|
||||
"id",
|
||||
"value",
|
||||
"label",
|
||||
@@ -31,7 +31,7 @@ export const defaultStoreReturnReasonFields = [
|
||||
"deleted_at",
|
||||
]
|
||||
|
||||
export const defaultStoreReturnReasonRelations = [
|
||||
export const defaultStoreReturnReasonRelations: (keyof ReturnReason)[] = [
|
||||
"parent_return_reason",
|
||||
"return_reason_children",
|
||||
]
|
||||
|
||||
@@ -24,11 +24,11 @@ export class ReturnReason extends SoftDeletableEntity {
|
||||
description: string
|
||||
|
||||
@Column({ nullable: true })
|
||||
parent_return_reason_id: string
|
||||
parent_return_reason_id: string | null
|
||||
|
||||
@ManyToOne(() => ReturnReason, { cascade: ["soft-remove"] })
|
||||
@JoinColumn({ name: "parent_return_reason_id" })
|
||||
parent_return_reason: ReturnReason
|
||||
parent_return_reason: ReturnReason | null
|
||||
|
||||
@OneToMany(
|
||||
() => ReturnReason,
|
||||
|
||||
@@ -1,34 +1,33 @@
|
||||
import { MedusaError } from "medusa-core-utils"
|
||||
import { BaseService } from "medusa-interfaces"
|
||||
import { EntityManager } from "typeorm"
|
||||
import { TransactionBaseService } from "../interfaces"
|
||||
import { Return, ReturnReason } from "../models"
|
||||
import { ReturnReasonRepository } from "../repositories/return-reason"
|
||||
import { FindConfig, Selector } from "../types/common"
|
||||
import { CreateReturnReason, UpdateReturnReason } from "../types/return-reason"
|
||||
import { buildQuery } from "../utils"
|
||||
|
||||
class ReturnReasonService extends BaseService {
|
||||
constructor({ manager, returnReasonRepository }) {
|
||||
super()
|
||||
type InjectedDependencies = {
|
||||
manager: EntityManager
|
||||
returnReasonRepository: typeof ReturnReasonRepository
|
||||
}
|
||||
|
||||
class ReturnReasonService extends TransactionBaseService<ReturnReasonService> {
|
||||
protected readonly retReasonRepo_: typeof ReturnReasonRepository
|
||||
|
||||
protected manager_: EntityManager
|
||||
protected transactionManager_: EntityManager | undefined
|
||||
|
||||
constructor({ manager, returnReasonRepository }: InjectedDependencies) {
|
||||
// eslint-disable-next-line prefer-rest-params
|
||||
super(arguments[0])
|
||||
|
||||
/** @private @constant {EntityManager} */
|
||||
this.manager_ = manager
|
||||
|
||||
/** @private @constant {ReturnReasonRepository} */
|
||||
this.retReasonRepo_ = returnReasonRepository
|
||||
}
|
||||
|
||||
withTransaction(manager) {
|
||||
if (!manager) {
|
||||
return this
|
||||
}
|
||||
|
||||
const cloned = new ReturnReasonService({
|
||||
manager,
|
||||
returnReasonRepository: this.retReasonRepo_,
|
||||
})
|
||||
|
||||
cloned.transactionManager_ = manager
|
||||
|
||||
return cloned
|
||||
}
|
||||
|
||||
create(data) {
|
||||
return this.atomicPhase_(async (manager) => {
|
||||
async create(data: CreateReturnReason): Promise<ReturnReason | never> {
|
||||
return await this.atomicPhase_(async (manager) => {
|
||||
const rrRepo = manager.getCustomRepository(this.retReasonRepo_)
|
||||
|
||||
if (data.parent_return_reason_id && data.parent_return_reason_id !== "") {
|
||||
@@ -44,28 +43,19 @@ class ReturnReasonService extends BaseService {
|
||||
|
||||
const created = rrRepo.create(data)
|
||||
|
||||
const result = await rrRepo.save(created)
|
||||
return result
|
||||
return await rrRepo.save(created)
|
||||
})
|
||||
}
|
||||
|
||||
update(id, data) {
|
||||
return this.atomicPhase_(async (manager) => {
|
||||
async update(id: string, data: UpdateReturnReason): Promise<ReturnReason> {
|
||||
return await this.atomicPhase_(async (manager) => {
|
||||
const rrRepo = manager.getCustomRepository(this.retReasonRepo_)
|
||||
const reason = await this.retrieve(id)
|
||||
|
||||
const { description, label, parent_return_reason_id } = data
|
||||
|
||||
if (description) {
|
||||
reason.description = data.description
|
||||
}
|
||||
|
||||
if (label) {
|
||||
reason.label = data.label
|
||||
}
|
||||
|
||||
if (parent_return_reason_id) {
|
||||
reason.parent_return_reason_id = parent_return_reason_id
|
||||
for (const key of Object.keys(data).filter(
|
||||
(k) => typeof data[k] !== `undefined`
|
||||
)) {
|
||||
reason[key] = data[key]
|
||||
}
|
||||
|
||||
await rrRepo.save(reason)
|
||||
@@ -80,11 +70,15 @@ class ReturnReasonService extends BaseService {
|
||||
* @return {Promise} the result of the find operation
|
||||
*/
|
||||
async list(
|
||||
selector,
|
||||
config = { skip: 0, take: 50, order: { created_at: "DESC" } }
|
||||
) {
|
||||
selector: Selector<ReturnReason>,
|
||||
config: FindConfig<ReturnReason> = {
|
||||
skip: 0,
|
||||
take: 50,
|
||||
order: { created_at: "DESC" },
|
||||
}
|
||||
): Promise<ReturnReason[]> {
|
||||
const rrRepo = this.manager_.getCustomRepository(this.retReasonRepo_)
|
||||
const query = this.buildQuery_(selector, config)
|
||||
const query = buildQuery(selector, config)
|
||||
return rrRepo.find(query)
|
||||
}
|
||||
|
||||
@@ -94,11 +88,13 @@ class ReturnReasonService extends BaseService {
|
||||
* @param {Object} config - config object
|
||||
* @return {Promise<Order>} the order document
|
||||
*/
|
||||
async retrieve(id, config = {}) {
|
||||
async retrieve(
|
||||
id: string,
|
||||
config: FindConfig<ReturnReason> = {}
|
||||
): Promise<ReturnReason | never> {
|
||||
const rrRepo = this.manager_.getCustomRepository(this.retReasonRepo_)
|
||||
const validatedId = this.validateId_(id)
|
||||
|
||||
const query = this.buildQuery_({ id: validatedId }, config)
|
||||
const query = buildQuery({ id }, config)
|
||||
const item = await rrRepo.findOne(query)
|
||||
|
||||
if (!item) {
|
||||
@@ -111,7 +107,7 @@ class ReturnReasonService extends BaseService {
|
||||
return item
|
||||
}
|
||||
|
||||
async delete(returnReasonId) {
|
||||
async delete(returnReasonId: string): Promise<void> {
|
||||
return this.atomicPhase_(async (manager) => {
|
||||
const rrRepo = manager.getCustomRepository(this.retReasonRepo_)
|
||||
|
||||
14
packages/medusa/src/types/return-reason.ts
Normal file
14
packages/medusa/src/types/return-reason.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
export type CreateReturnReason = {
|
||||
value: string
|
||||
label: string
|
||||
parent_return_reason_id?: string
|
||||
description?: string
|
||||
metadata?: Record<string, unknown>
|
||||
}
|
||||
|
||||
export type UpdateReturnReason = {
|
||||
description?: string
|
||||
label?: string
|
||||
parent_return_reason_id?: string
|
||||
metadata?: Record<string, unknown>
|
||||
}
|
||||
Reference in New Issue
Block a user