import { ObjectType, Field, ID, ArgsType, InputType } from 'type-graphql'; import { Permission } from '@seed/interfaces/permission'; import { AccountTypeEnum } from '@src/accounts/account.components'; import { OrderEngineDBInterfaceSchema, OrderEngineDBSchema, OrderEngineSchema } from './schemas/order.schema'; import { EngineModel } from '@lib/seed/engine/EngineModel'; import { plainToClass } from 'class-transformer'; import { IEngineSchema } from '@lib/seed/engine/EngineSchema'; import { OrderArgs } from './schemas/order.schema.input'; import { CustomSearchEngine } from '@lib/seed/services/database/DBRequestService'; const permissions: Permission = { c: [AccountTypeEnum.admin], r: [AccountTypeEnum.admin], w: [AccountTypeEnum.admin], d: [AccountTypeEnum.admin], }; @ObjectType() export default class OrderEngineModel extends EngineModel { public constructor(input?: OrderEngineDBInterfaceSchema & Partial) { const dataInit = plainToClass(OrderEngineDBSchema, input || {}); super({ // ...init, collectionName: 'shop.orders', permissions: permissions, dataInit, }); } plainToClass(plain: any): OrderEngineSchema | OrderEngineSchema[] { return plainToClass(OrderEngineSchema, plain); } searchEngine(): CustomSearchEngine { const sEngine: CustomSearchEngine = { orderStatus: { operation: '$eq', }, paymentStatus: { operation: '$eq', }, search: { operation: 'freeInput', freeInputConfig: { searchOptions: ['billingInfo.company', 'billingInfo.email'], }, }, }; return sEngine; } async afterPaymentSuccess(orderData: OrderEngineSchema): Promise { throw 'To Implement on parent'; } async afterPaymentFailed(orderData: OrderEngineSchema): Promise { throw 'To Implement on parent'; } }