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

53 lines
1.8 KiB
TypeScript

import { ObjectType } from 'type-graphql';
import { Permission } from '@seed/interfaces/permission';
import { AccountTypeEnum } from '@src/accounts/account.components';
import { EngineModel } from '@lib/seed/engine/EngineModel';
import { plainToClass } from 'class-transformer';
import { CustomSearchEngine } from '@seed/services/database/DBRequestService';
import { IEngineSchema } from '@seed/engine/EngineSchema';
import { ReviewDBIntefaceSchema, ReviewDBSchema, ReviewSchema } from './schemas/reviews.schema';
import { ReviewArgsSchemma } from './schemas/reviews.schema.input';
const permissions: Permission = {
c: [AccountTypeEnum.admin],
r: [AccountTypeEnum.public, AccountTypeEnum.admin],
w: [AccountTypeEnum.admin],
d: [AccountTypeEnum.admin],
};
@ObjectType()
export default class ReviewModel extends EngineModel<ReviewDBIntefaceSchema, ReviewDBSchema, ReviewSchema> {
public constructor(input?: ReviewDBIntefaceSchema & Partial<IEngineSchema>) {
const dataInit = plainToClass(ReviewDBSchema, input || {});
super({
// ...init,
collectionName: 'comments.reviews',
permissions: permissions,
dataInit,
});
}
searchEngine(): CustomSearchEngine<ReviewArgsSchemma> {
const sEngine: CustomSearchEngine<ReviewArgsSchemma> = {
ressourceId: {
operation: '$eq',
},
noteFilter: {
operation: 'between',
dbFName: 'note',
beetweenConfig: {
inputFromField: 'noteMin',
inputToField: 'noteMax',
},
},
};
return sEngine;
}
plainToClass(plain: any): ReviewSchema | ReviewSchema[] {
return plainToClass(ReviewSchema, plain);
}
}