72 lines
2.5 KiB
TypeScript
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;
|
|
}
|
|
}
|