backend/services/module-booking/functions/bookings/bookings.engine.model.ts
2025-05-14 21:45:16 +02:00

72 lines
2.5 KiB
TypeScript

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<BookingDBInterfaceSchema, BookingDBSchema, BookingSchema> {
public constructor(input?: BookingDBInterfaceSchema & Partial<IEngineSchema>) {
const dataInit = plainToClass(BookingDBSchema, input || {});
super({
// ...init,
collectionName: ModelCollectionEnum.bookings,
permissions: permissions,
dataInit,
});
}
plainToClass(plain: any): BookingSchema | BookingSchema[] {
return plainToClass(BookingSchema, plain);
}
searchEngine(): CustomSearchEngine<BookingArgsSchema> {
const sEngine: CustomSearchEngine<BookingArgsSchema> = {
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;
}
}