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 { public constructor(input?: ReviewDBIntefaceSchema & Partial) { const dataInit = plainToClass(ReviewDBSchema, input || {}); super({ // ...init, collectionName: 'comments.reviews', permissions: permissions, dataInit, }); } searchEngine(): CustomSearchEngine { const sEngine: CustomSearchEngine = { ressourceId: { operation: '$eq', }, noteFilter: { operation: 'between', dbFName: 'note', beetweenConfig: { inputFromField: 'noteMin', inputToField: 'noteMax', }, }, }; return sEngine; } plainToClass(plain: any): ReviewSchema | ReviewSchema[] { return plainToClass(ReviewSchema, plain); } }