2025-05-14 21:45:16 +02:00

61 lines
2.1 KiB
TypeScript

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<OrderEngineDBInterfaceSchema, OrderEngineDBSchema, OrderEngineSchema> {
public constructor(input?: OrderEngineDBInterfaceSchema & Partial<IEngineSchema>) {
const dataInit = plainToClass(OrderEngineDBSchema, input || {});
super({
// ...init,
collectionName: 'shop.orders',
permissions: permissions,
dataInit,
});
}
plainToClass(plain: any): OrderEngineSchema | OrderEngineSchema[] {
return plainToClass(OrderEngineSchema, plain);
}
searchEngine(): CustomSearchEngine<OrderArgs> {
const sEngine: CustomSearchEngine<OrderArgs> = {
orderStatus: {
operation: '$eq',
},
paymentStatus: {
operation: '$eq',
},
search: {
operation: 'freeInput',
freeInputConfig: {
searchOptions: ['billingInfo.company', 'billingInfo.email'],
},
},
};
return sEngine;
}
async afterPaymentSuccess(orderData: OrderEngineSchema): Promise<void> {
throw 'To Implement on parent';
}
async afterPaymentFailed(orderData: OrderEngineSchema): Promise<void> {
throw 'To Implement on parent';
}
}