From 5f915322de491fdc6852f0769edd459f7af8a61d Mon Sep 17 00:00:00 2001 From: Pavel Brui Date: Mon, 15 Apr 2024 16:11:12 +0200 Subject: [PATCH] refactorFiltersAndAddFiltersForBooks --- .../integrations/gei-bookings/package.json | 2 +- .../src/PublicQuery/getService.ts | 1 - .../src/PublicQuery/listServices.ts | 21 ++------------ .../src/UserQuery/getBookingsForService.ts | 5 ++-- .../src/UserQuery/getSelfBooks.ts | 6 ++-- .../src/UserQuery/getSelfServices.ts | 26 ++++++----------- .../gei-bookings/src/utils/db/orm.ts | 28 ++++++++++++++++++- 7 files changed, 46 insertions(+), 43 deletions(-) diff --git a/packages/integrations/gei-bookings/package.json b/packages/integrations/gei-bookings/package.json index ad34abb..1325db6 100644 --- a/packages/integrations/gei-bookings/package.json +++ b/packages/integrations/gei-bookings/package.json @@ -1,6 +1,6 @@ { "name": "gei-bookings", - "version": "0.2.2", + "version": "0.2.3", "description": "Automatically generated by graphql-editor-cli", "main": "lib/index.js", "scripts": { diff --git a/packages/integrations/gei-bookings/src/PublicQuery/getService.ts b/packages/integrations/gei-bookings/src/PublicQuery/getService.ts index a0e8b7c..737d067 100644 --- a/packages/integrations/gei-bookings/src/PublicQuery/getService.ts +++ b/packages/integrations/gei-bookings/src/PublicQuery/getService.ts @@ -11,7 +11,6 @@ export const getService = async (input: FieldResolveInput) => throw new GlobalError(r, import.meta.url); })) }) - }), )(input.arguments); export default getService; diff --git a/packages/integrations/gei-bookings/src/PublicQuery/listServices.ts b/packages/integrations/gei-bookings/src/PublicQuery/listServices.ts index 8e8b01f..4216ced 100644 --- a/packages/integrations/gei-bookings/src/PublicQuery/listServices.ts +++ b/packages/integrations/gei-bookings/src/PublicQuery/listServices.ts @@ -1,7 +1,7 @@ import { FieldResolveInput } from 'stucco-js'; import { resolverFor } from '../zeus/index.js'; import { convertDateObjToStringForArray, errMiddleware } from '../utils/middleware.js'; -import { MongoOrb, preparePageOptions } from '../utils/db/orm.js'; +import { MongoOrb, inputServiceFiltersSet, preparePageOptions } from '../utils/db/orm.js'; import { ServicesCollection } from '../utils/db/collections.js'; export const isScalarDate = (obj: unknown): boolean => typeof obj === 'string' && obj !== null && !!Date.parse(obj); @@ -9,26 +9,11 @@ export const listServices = async (input: FieldResolveInput) => resolverFor('PublicQuery', 'listServices', async (args) => errMiddleware(async () => { const po = preparePageOptions(args?.input?.page); - const pa = - args?.input?.filters && - Object.fromEntries(Object.entries(args?.input?.filters).filter((v) => v !== null && v !== undefined && v[0] !== 'fromDate' && v[0] !== 'toDate')); - const fromDate = isScalarDate(args?.input?.filters?.fromDate) - ? isScalarDate(args?.input?.filters?.fromDate) - : undefined; - - const toDate = isScalarDate(args?.input?.filters?.toDate) - ? isScalarDate(args?.input?.filters?.toDate) - : undefined; + const inputFilters = inputServiceFiltersSet(args.input?.filters) return { services: convertDateObjToStringForArray(await MongoOrb(ServicesCollection) .collection.find({ - ...pa, - ...(fromDate && { startDate: { $gte: new Date(args?.input?.filters?.fromDate as string) } }), - ...(toDate && { startDate: { $lte: new Date(args?.input?.filters?.toDate as string) } }), - ...(args?.input?.filters?.name && { name: { $regex: args?.input.filters.name, $options: 'i' } }), - ...(args?.input?.filters?.description && { - description: { $regex: args?.input.filters.description, $options: 'i' }, - }), + ...inputFilters, active: { $ne: false }, taken: { $ne: true }, }) diff --git a/packages/integrations/gei-bookings/src/UserQuery/getBookingsForService.ts b/packages/integrations/gei-bookings/src/UserQuery/getBookingsForService.ts index 4c7fa53..a691298 100644 --- a/packages/integrations/gei-bookings/src/UserQuery/getBookingsForService.ts +++ b/packages/integrations/gei-bookings/src/UserQuery/getBookingsForService.ts @@ -1,7 +1,7 @@ import { FieldResolveInput } from 'stucco-js'; import { resolverFor } from '../zeus/index.js'; import { sourceContainUserIdOrThrow, errMiddleware, convertDateObjToStringForArray } from '../utils/middleware.js'; -import { MongoOrb, preparePageOptions } from '../utils/db/orm.js'; +import { MongoOrb, inputBooksFiltersSet, preparePageOptions } from '../utils/db/orm.js'; import { BookingRecordModel } from '../models/BookingRecordModel.js'; export const getBookingsForService = async (input: FieldResolveInput) => @@ -9,6 +9,7 @@ export const getBookingsForService = async (input: FieldResolveInput) => errMiddleware(async () => { sourceContainUserIdOrThrow(src); const po = preparePageOptions(args?.input?.page); + const inputFilters = inputBooksFiltersSet(args.input?.filters) const ownedServices = await MongoOrb('Services') @@ -17,7 +18,7 @@ export const getBookingsForService = async (input: FieldResolveInput) => .then((s) => s.map((ss) => ss._id)) const bookings = await MongoOrb('Bookings') - .collection.find({ services: { $in: ownedServices } }) + .collection.find({ ...inputFilters, services: { $in: ownedServices } }) .limit(po.limit) .skip(po.skip) .sort('createdAt', -1) diff --git a/packages/integrations/gei-bookings/src/UserQuery/getSelfBooks.ts b/packages/integrations/gei-bookings/src/UserQuery/getSelfBooks.ts index def5c9d..6925dc7 100644 --- a/packages/integrations/gei-bookings/src/UserQuery/getSelfBooks.ts +++ b/packages/integrations/gei-bookings/src/UserQuery/getSelfBooks.ts @@ -1,6 +1,6 @@ import { FieldResolveInput } from 'stucco-js'; import { resolverFor } from '../zeus/index.js'; -import { MongoOrb, preparePageOptions } from '../utils/db/orm.js'; +import { MongoOrb, inputBooksFiltersSet, preparePageOptions } from '../utils/db/orm.js'; import { convertDateObjToStringForArray, errMiddleware, sourceContainUserIdOrThrow } from '../utils/middleware.js'; export const getSelfBooks = async (input: FieldResolveInput) => @@ -8,9 +8,11 @@ export const getSelfBooks = async (input: FieldResolveInput) => errMiddleware(async () => { sourceContainUserIdOrThrow(src); const po = preparePageOptions(args?.input?.page); + const inputFilters = inputBooksFiltersSet(args.input?.filters) + return { books: convertDateObjToStringForArray(await MongoOrb('Bookings') - .collection.find({ bookerId: src.userId || src._id }) + .collection.find({ ...inputFilters, bookerId: src.userId || src._id }) .skip(po.skip) .limit(po.limit) .sort('createdAt', -1) diff --git a/packages/integrations/gei-bookings/src/UserQuery/getSelfServices.ts b/packages/integrations/gei-bookings/src/UserQuery/getSelfServices.ts index 1978f97..330503b 100644 --- a/packages/integrations/gei-bookings/src/UserQuery/getSelfServices.ts +++ b/packages/integrations/gei-bookings/src/UserQuery/getSelfServices.ts @@ -1,7 +1,7 @@ import { FieldResolveInput } from 'stucco-js'; import { resolverFor } from '../zeus/index.js'; import { convertDateObjToStringForArray, errMiddleware, sourceContainUserIdOrThrow } from '../utils/middleware.js'; -import { MongoOrb, preparePageOptions } from '../utils/db/orm.js'; +import { MongoOrb, inputServiceFiltersSet, preparePageOptions } from '../utils/db/orm.js'; import { ServicesCollection } from '../utils/db/collections.js'; import { isScalarDate } from '../PublicQuery/listServices.js'; import { ServiceModel } from '../models/ServiceModel.js'; @@ -12,25 +12,12 @@ export const getSelfServices = async (input: FieldResolveInput) => errMiddleware(async () => { sourceContainUserIdOrThrow(src); const po = preparePageOptions(args?.input?.page); - const pa = - args?.input?.filters && - Object.fromEntries(Object.entries(args?.input?.filters).filter((v) => v !== null && v !== undefined && v[0] !== 'fromDate' && v[0] !== 'toDate')); - const fromDate = isScalarDate(args?.input?.filters?.fromDate) - ? isScalarDate(args?.input?.filters?.fromDate) - : undefined; - - const toDate = isScalarDate(args?.input?.filters?.toDate) - ? isScalarDate(args?.input?.filters?.toDate) - : undefined; + + const inputFilters = inputServiceFiltersSet(args.input?.filters) + const selfServices = await MongoOrb(ServicesCollection) .collection.find({ - ...pa, - ...(fromDate && { startDate: { $gte: new Date(args?.input?.filters?.fromDate as string) } }), - ...(toDate && { startDate: { $lte: new Date(args?.input?.filters?.toDate as string) } }), - ...(args?.input?.filters?.name && { name: { $regex: args?.input.filters.name, $options: 'i' } }), - ...(args?.input?.filters?.description && { - description: { $regex: args?.input.filters.description, $options: 'i' }, - }), + ...inputFilters, ownerId: src.userId || src._id, }) .limit(po.limit) @@ -41,3 +28,6 @@ export const getSelfServices = async (input: FieldResolveInput) => }), )(input.arguments, input.source); export default getSelfServices; + + + diff --git a/packages/integrations/gei-bookings/src/utils/db/orm.ts b/packages/integrations/gei-bookings/src/utils/db/orm.ts index bb0cc2b..02d19d1 100644 --- a/packages/integrations/gei-bookings/src/utils/db/orm.ts +++ b/packages/integrations/gei-bookings/src/utils/db/orm.ts @@ -91,4 +91,30 @@ export function updateNestedFields(inputObject: Record, nestedObjec } } return updateObject; -} \ No newline at end of file +} + +export const isScalarDate = (obj: unknown): boolean => typeof obj === 'string' && obj !== null && !!Date.parse(obj); +export const inputServiceFiltersSet = (filters: any ) => { + if (!filters) return {} + const pa = + filters && + Object.fromEntries(Object.entries(filters).filter((v) => v !== null && v !== undefined && v[0] !== 'fromDate' && v[0] !== 'toDate')); + const fromDate = isScalarDate(filters.fromDate) + const toDate = isScalarDate(filters.toDate) + + return {...pa, ...(toDate && { startDate: { $lte: new Date(filters.toDate as string) } }), ...(fromDate && { startDate: { $gte: new Date(filters.fromDate as string) } }), ...(filters?.name && { name: { $regex: filters.name, $options: 'i' } }), + ...(filters?.description && { + description: { $regex: filters.description, $options: 'i' }, + })} + } + + + export const inputBooksFiltersSet = (filters: any ) => { + if (!filters) return {} + const pa = + filters && + Object.fromEntries(Object.entries(filters).filter((v) => v !== null && v !== undefined && v[0] !== 'fromDate' && v[0] !== 'toDate')); + const fromDate = isScalarDate(filters.fromDate) + const toDate = isScalarDate(filters.toDate) + return {...pa, ...(toDate && { 'comments.to': { $lte: new Date(filters.toDate as string) } }), ...(fromDate && { 'comments.from': { $gte: new Date(filters.fromDate as string) } })}} + \ No newline at end of file