import { ObjectType } from 'type-graphql'; import { plainToClass } from 'class-transformer'; import { EngineModel } from '@lib/seed/engine/EngineModel'; import { Permission } from '@seed/interfaces/permission'; import { CustomSearchEngine } from '@seed/services/database/DBRequestService'; import { AccountTypeEnum } from '@src/accounts/account.components'; import { IEngineSchema } from '@seed/engine/EngineSchema'; import { ModelCollectionEnum } from '@src/__indexes/__collections'; import { BookingDBInterfaceSchema, BookingDBSchema, BookingSchema } from '@src/bookings/schemas/bookings.schema'; import { BookingArgsSchema } from '@src/bookings/schemas/bookings.input'; import { RangeType } from '@seed/interfaces/components'; const permissions: Permission = { c: [AccountTypeEnum.admin], r: [AccountTypeEnum.admin], w: [AccountTypeEnum.admin], d: [AccountTypeEnum.admin], }; @ObjectType() export default class BookingModel extends EngineModel { public constructor(input?: BookingDBInterfaceSchema & Partial) { const dataInit = plainToClass(BookingDBSchema, input || {}); super({ // ...init, collectionName: ModelCollectionEnum.bookings, permissions: permissions, dataInit, }); } plainToClass(plain: any): BookingSchema | BookingSchema[] { return plainToClass(BookingSchema, plain); } searchEngine(): CustomSearchEngine { const sEngine: CustomSearchEngine = { dateTab: { operation: 'dateTab', dateTabConfig: { dbFromField: 'dates.startDate', dbToField: 'dates.endDate', }, }, dateRange: { operation: 'dateRange', dateRangeConfig: { inputFromField: 'startDate', inputToField: 'endDate', dbFromField: 'dates.startDate', dbToField: 'dates.endDate', dateRangeType: RangeType.intersect, }, }, ressourceId: { operation: '$eq', dbFName: 'paths.ressourceId', }, ressourceModel: { operation: '$eq', dbFName: 'paths.ressourceModel', }, status: { operation: '$in', }, }; return sEngine; } }