Skip to content

Commit

Permalink
refactorFiltersAndAddFiltersForBooks
Browse files Browse the repository at this point in the history
  • Loading branch information
pavelbrui committed Apr 15, 2024
1 parent 0f7d777 commit 5f91532
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 43 deletions.
2 changes: 1 addition & 1 deletion packages/integrations/gei-bookings/package.json
Original file line number Diff line number Diff line change
@@ -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": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ export const getService = async (input: FieldResolveInput) =>
throw new GlobalError(r, import.meta.url);
}))
})

}),
)(input.arguments);
export default getService;
21 changes: 3 additions & 18 deletions packages/integrations/gei-bookings/src/PublicQuery/listServices.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,19 @@
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);
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 },
})
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
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) =>
resolverFor('UserQuery', 'getBookingsForService', async (args, src) =>
errMiddleware(async () => {
sourceContainUserIdOrThrow(src);
const po = preparePageOptions(args?.input?.page);
const inputFilters = inputBooksFiltersSet(args.input?.filters)


const ownedServices = await MongoOrb('Services')
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
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) =>
resolverFor('UserQuery', 'getSelfBooks', async (args, src) =>
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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -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)
Expand All @@ -41,3 +28,6 @@ export const getSelfServices = async (input: FieldResolveInput) =>
}),
)(input.arguments, input.source);
export default getSelfServices;



28 changes: 27 additions & 1 deletion packages/integrations/gei-bookings/src/utils/db/orm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,30 @@ export function updateNestedFields(inputObject: Record<string, any>, nestedObjec
}
}
return updateObject;
}
}

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) } })}}

0 comments on commit 5f91532

Please sign in to comment.