Feat/convert return reason service to typescript (#1961)

**What**
- Convert return reason service to typescript

Fixes CORE-355
This commit is contained in:
Philip Korsholm
2022-08-02 11:40:11 +00:00
committed by GitHub
parent 1dec44287d
commit 6251aecdaa
9 changed files with 70 additions and 60 deletions
@@ -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",
] ]
+2 -2
View File
@@ -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,
@@ -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>
}