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 18:40:11 +07:00
committed by GitHub
parent 1dec44287d
commit 6251aecdaa
9 changed files with 70 additions and 60 deletions

View File

@@ -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 () => {

View File

@@ -85,5 +85,5 @@ export class AdminPostReturnReasonsReq {
description?: string
@IsOptional()
metadata?: object
metadata?: Record<string, unknown>
}

View File

@@ -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",
]

View File

@@ -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,

View File

@@ -79,5 +79,5 @@ export class AdminPostReturnReasonsReasonReq {
description?: string
@IsOptional()
metadata?: object
metadata?: Record<string, unknown>
}

View File

@@ -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",
]

View File

@@ -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,

View File

@@ -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_)

View 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>
}