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 path = require("path")
|
||||||
const { RepositoryNotTreeError } = require("typeorm")
|
|
||||||
|
|
||||||
const setupServer = require("../../../helpers/setup-server")
|
const setupServer = require("../../../helpers/setup-server")
|
||||||
const { useApi } = require("../../../helpers/use-api")
|
const { useApi } = require("../../../helpers/use-api")
|
||||||
@@ -17,7 +15,7 @@ describe("/admin/return-reasons", () => {
|
|||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
const cwd = path.resolve(path.join(__dirname, "..", ".."))
|
const cwd = path.resolve(path.join(__dirname, "..", ".."))
|
||||||
dbConnection = await initDb({ cwd })
|
dbConnection = await initDb({ cwd })
|
||||||
medusaProcess = await setupServer({ cwd })
|
medusaProcess = await setupServer({ cwd, verbose: false })
|
||||||
})
|
})
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
|
|||||||
@@ -85,5 +85,5 @@ export class AdminPostReturnReasonsReq {
|
|||||||
description?: string
|
description?: string
|
||||||
|
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
metadata?: object
|
metadata?: Record<string, unknown>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ export default (app) => {
|
|||||||
return app
|
return app
|
||||||
}
|
}
|
||||||
|
|
||||||
export const defaultAdminReturnReasonsFields = [
|
export const defaultAdminReturnReasonsFields: (keyof ReturnReason)[] = [
|
||||||
"id",
|
"id",
|
||||||
"value",
|
"value",
|
||||||
"label",
|
"label",
|
||||||
@@ -47,7 +47,7 @@ export const defaultAdminReturnReasonsFields = [
|
|||||||
"deleted_at",
|
"deleted_at",
|
||||||
]
|
]
|
||||||
|
|
||||||
export const defaultAdminReturnReasonsRelations = [
|
export const defaultAdminReturnReasonsRelations: (keyof ReturnReason)[] = [
|
||||||
"parent_return_reason",
|
"parent_return_reason",
|
||||||
"return_reason_children",
|
"return_reason_children",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ import {
|
|||||||
defaultAdminReturnReasonsFields,
|
defaultAdminReturnReasonsFields,
|
||||||
defaultAdminReturnReasonsRelations,
|
defaultAdminReturnReasonsRelations,
|
||||||
} from "."
|
} from "."
|
||||||
|
import { ReturnReason } from "../../../../models"
|
||||||
import { ReturnReasonService } from "../../../../services"
|
import { ReturnReasonService } from "../../../../services"
|
||||||
|
import { FindConfig, Selector } from "../../../../types/common"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @oas [get] /return-reasons
|
* @oas [get] /return-reasons
|
||||||
@@ -29,7 +31,7 @@ export default async (req, res) => {
|
|||||||
"returnReasonService"
|
"returnReasonService"
|
||||||
)
|
)
|
||||||
|
|
||||||
const query = { parent_return_reason_id: null }
|
const query: Selector<ReturnReason> = { parent_return_reason_id: null }
|
||||||
const data = await returnReasonService.list(query, {
|
const data = await returnReasonService.list(query, {
|
||||||
select: defaultAdminReturnReasonsFields,
|
select: defaultAdminReturnReasonsFields,
|
||||||
relations: defaultAdminReturnReasonsRelations,
|
relations: defaultAdminReturnReasonsRelations,
|
||||||
|
|||||||
@@ -79,5 +79,5 @@ export class AdminPostReturnReasonsReasonReq {
|
|||||||
description?: string
|
description?: string
|
||||||
|
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
metadata?: object
|
metadata?: Record<string, unknown>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ export default (app) => {
|
|||||||
return app
|
return app
|
||||||
}
|
}
|
||||||
|
|
||||||
export const defaultStoreReturnReasonFields = [
|
export const defaultStoreReturnReasonFields: (keyof ReturnReason)[] = [
|
||||||
"id",
|
"id",
|
||||||
"value",
|
"value",
|
||||||
"label",
|
"label",
|
||||||
@@ -31,7 +31,7 @@ export const defaultStoreReturnReasonFields = [
|
|||||||
"deleted_at",
|
"deleted_at",
|
||||||
]
|
]
|
||||||
|
|
||||||
export const defaultStoreReturnReasonRelations = [
|
export const defaultStoreReturnReasonRelations: (keyof ReturnReason)[] = [
|
||||||
"parent_return_reason",
|
"parent_return_reason",
|
||||||
"return_reason_children",
|
"return_reason_children",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -24,11 +24,11 @@ export class ReturnReason extends SoftDeletableEntity {
|
|||||||
description: string
|
description: string
|
||||||
|
|
||||||
@Column({ nullable: true })
|
@Column({ nullable: true })
|
||||||
parent_return_reason_id: string
|
parent_return_reason_id: string | null
|
||||||
|
|
||||||
@ManyToOne(() => ReturnReason, { cascade: ["soft-remove"] })
|
@ManyToOne(() => ReturnReason, { cascade: ["soft-remove"] })
|
||||||
@JoinColumn({ name: "parent_return_reason_id" })
|
@JoinColumn({ name: "parent_return_reason_id" })
|
||||||
parent_return_reason: ReturnReason
|
parent_return_reason: ReturnReason | null
|
||||||
|
|
||||||
@OneToMany(
|
@OneToMany(
|
||||||
() => ReturnReason,
|
() => ReturnReason,
|
||||||
|
|||||||
+44
-48
@@ -1,34 +1,33 @@
|
|||||||
import { MedusaError } from "medusa-core-utils"
|
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 {
|
type InjectedDependencies = {
|
||||||
constructor({ manager, returnReasonRepository }) {
|
manager: EntityManager
|
||||||
super()
|
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
|
this.manager_ = manager
|
||||||
|
|
||||||
/** @private @constant {ReturnReasonRepository} */
|
|
||||||
this.retReasonRepo_ = returnReasonRepository
|
this.retReasonRepo_ = returnReasonRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
withTransaction(manager) {
|
async create(data: CreateReturnReason): Promise<ReturnReason | never> {
|
||||||
if (!manager) {
|
return await this.atomicPhase_(async (manager) => {
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
const cloned = new ReturnReasonService({
|
|
||||||
manager,
|
|
||||||
returnReasonRepository: this.retReasonRepo_,
|
|
||||||
})
|
|
||||||
|
|
||||||
cloned.transactionManager_ = manager
|
|
||||||
|
|
||||||
return cloned
|
|
||||||
}
|
|
||||||
|
|
||||||
create(data) {
|
|
||||||
return this.atomicPhase_(async (manager) => {
|
|
||||||
const rrRepo = manager.getCustomRepository(this.retReasonRepo_)
|
const rrRepo = manager.getCustomRepository(this.retReasonRepo_)
|
||||||
|
|
||||||
if (data.parent_return_reason_id && data.parent_return_reason_id !== "") {
|
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 created = rrRepo.create(data)
|
||||||
|
|
||||||
const result = await rrRepo.save(created)
|
return await rrRepo.save(created)
|
||||||
return result
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
update(id, data) {
|
async update(id: string, data: UpdateReturnReason): Promise<ReturnReason> {
|
||||||
return this.atomicPhase_(async (manager) => {
|
return await this.atomicPhase_(async (manager) => {
|
||||||
const rrRepo = manager.getCustomRepository(this.retReasonRepo_)
|
const rrRepo = manager.getCustomRepository(this.retReasonRepo_)
|
||||||
const reason = await this.retrieve(id)
|
const reason = await this.retrieve(id)
|
||||||
|
|
||||||
const { description, label, parent_return_reason_id } = data
|
for (const key of Object.keys(data).filter(
|
||||||
|
(k) => typeof data[k] !== `undefined`
|
||||||
if (description) {
|
)) {
|
||||||
reason.description = data.description
|
reason[key] = data[key]
|
||||||
}
|
|
||||||
|
|
||||||
if (label) {
|
|
||||||
reason.label = data.label
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parent_return_reason_id) {
|
|
||||||
reason.parent_return_reason_id = parent_return_reason_id
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await rrRepo.save(reason)
|
await rrRepo.save(reason)
|
||||||
@@ -80,11 +70,15 @@ class ReturnReasonService extends BaseService {
|
|||||||
* @return {Promise} the result of the find operation
|
* @return {Promise} the result of the find operation
|
||||||
*/
|
*/
|
||||||
async list(
|
async list(
|
||||||
selector,
|
selector: Selector<ReturnReason>,
|
||||||
config = { skip: 0, take: 50, order: { created_at: "DESC" } }
|
config: FindConfig<ReturnReason> = {
|
||||||
) {
|
skip: 0,
|
||||||
|
take: 50,
|
||||||
|
order: { created_at: "DESC" },
|
||||||
|
}
|
||||||
|
): Promise<ReturnReason[]> {
|
||||||
const rrRepo = this.manager_.getCustomRepository(this.retReasonRepo_)
|
const rrRepo = this.manager_.getCustomRepository(this.retReasonRepo_)
|
||||||
const query = this.buildQuery_(selector, config)
|
const query = buildQuery(selector, config)
|
||||||
return rrRepo.find(query)
|
return rrRepo.find(query)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,11 +88,13 @@ class ReturnReasonService extends BaseService {
|
|||||||
* @param {Object} config - config object
|
* @param {Object} config - config object
|
||||||
* @return {Promise<Order>} the order document
|
* @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 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)
|
const item = await rrRepo.findOne(query)
|
||||||
|
|
||||||
if (!item) {
|
if (!item) {
|
||||||
@@ -111,7 +107,7 @@ class ReturnReasonService extends BaseService {
|
|||||||
return item
|
return item
|
||||||
}
|
}
|
||||||
|
|
||||||
async delete(returnReasonId) {
|
async delete(returnReasonId: string): Promise<void> {
|
||||||
return this.atomicPhase_(async (manager) => {
|
return this.atomicPhase_(async (manager) => {
|
||||||
const rrRepo = manager.getCustomRepository(this.retReasonRepo_)
|
const rrRepo = manager.getCustomRepository(this.retReasonRepo_)
|
||||||
|
|
||||||
@@ -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