diff --git a/.eslintrc b/.eslintrc index 00cea44..a0f671c 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,19 +1,18 @@ -{ - "root": true, + { + "parser": "@typescript-eslint/parser", // Specifies the ESLint parser "extends": [ - "prettier", - "eslint:recommended", - "plugin:@typescript-eslint/recommended" + "plugin:@typescript-eslint/recommended", // Uses the recommended rules from the @typescript-eslint/eslint-plugin + "plugin:prettier/recommended" // Enables eslint-plugin-prettier and eslint-config-prettier. This will display prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. ], - "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint"], + "parserOptions": { + "ecmaVersion": 2018, // Allows for the parsing of modern ECMAScript features + "sourceType": "module" // Allows for the use of imports + }, + "plugins": ["@typescript-eslint", "prettier"], "rules": { - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_" - } - ] + "@typescript-eslint/no-use-before-define": 0, + "@typescript-eslint/explicit-function-return-type": 0, + "@typescript-eslint/no-var-requires": 0, + "@typescript-eslint/explicit-module-boundary-types": 0 } } diff --git a/.eslintrc2 b/.eslintrc2 new file mode 100644 index 0000000..00cea44 --- /dev/null +++ b/.eslintrc2 @@ -0,0 +1,19 @@ +{ + "root": true, + "extends": [ + "prettier", + "eslint:recommended", + "plugin:@typescript-eslint/recommended" + ], + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "rules": { + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_" + } + ] + } +} diff --git a/.gitignore b/.gitignore index 55b9ef8..e41b6f9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ lib node_modules .graphql-editor-auth.json -tsconfig.tsbuildinfo \ No newline at end of file +tsconfig.tsbuildinfo +.vscode \ No newline at end of file diff --git a/.prettierrc b/.prettierrc.json similarity index 100% rename from .prettierrc rename to .prettierrc.json diff --git a/packages/integrations/gei-bookings/package.json b/packages/integrations/gei-bookings/package.json index 7d6464c..041a7e5 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.6", + "version": "0.2.7", "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 737d067..ddc1b9b 100644 --- a/packages/integrations/gei-bookings/src/PublicQuery/getService.ts +++ b/packages/integrations/gei-bookings/src/PublicQuery/getService.ts @@ -7,8 +7,8 @@ export const getService = async (input: FieldResolveInput) => resolverFor('PublicQuery', 'getService', async (args) => errMiddleware(async () => { return ({ - service: convertDatedObjToString(await MongoOrb('Services').collection.findOne({ _id: args.serviceId, active: { $ne: false } }).catch((r) => { - throw new GlobalError(r, import.meta.url); + service: convertDatedObjToString(await MongoOrb('Services').collection.findOne({ _id: args.serviceId, active: { $ne: false } }).catch((r) => { + throw new GlobalError(r, import.meta.url); })) }) }), diff --git a/packages/integrations/gei-bookings/src/PublicQuery/listServices.ts b/packages/integrations/gei-bookings/src/PublicQuery/listServices.ts index 4006831..e25eaf2 100644 --- a/packages/integrations/gei-bookings/src/PublicQuery/listServices.ts +++ b/packages/integrations/gei-bookings/src/PublicQuery/listServices.ts @@ -10,18 +10,24 @@ export const listServices = async (input: FieldResolveInput) => errMiddleware(async () => { const po = preparePageOptions(args?.input?.page); const inputFilters = inputServiceFiltersSet(args?.input?.filters) - return { - services: convertDateObjToStringForArray(await MongoOrb(ServicesCollection) - .collection.find({ - ...inputFilters, - active: { $ne: false }, - taken: { $ne: true }, - }) - .limit(po.limit) - .skip(po.skip) - .sort('createdAt', -1) - .toArray(), - )}; - }), + const servicesCursor = MongoOrb(ServicesCollection) + .collection.find({ + ...inputFilters, + active: { $ne: false }, + taken: { $ne: true }, + }) + const paginatedServices = await (po.limit < 1 ? + servicesCursor + : servicesCursor.limit(po.limit + 1).skip(po.skip) + ).sort('createdAt', -1) + .toArray() + const hasNext = paginatedServices.length === po.limit + 1 +if(hasNext) paginatedServices.pop(); + +return { + services: convertDateObjToStringForArray(paginatedServices), + hasNextPage: hasNext +}; + }), )(input.arguments); export default listServices; diff --git a/packages/integrations/gei-bookings/src/UserQuery/getBookingsForService.ts b/packages/integrations/gei-bookings/src/UserQuery/getBookingsForService.ts index 48fcabb..20f06a2 100644 --- a/packages/integrations/gei-bookings/src/UserQuery/getBookingsForService.ts +++ b/packages/integrations/gei-bookings/src/UserQuery/getBookingsForService.ts @@ -17,14 +17,23 @@ export const getBookingsForService = async (input: FieldResolveInput) => .toArray() .then((s) => s.map((ss) => ss._id)) - const bookings = await MongoOrb('Bookings') - .collection.find({ ...inputFilters, services: { $in: ownedServices } }) - .limit(po.limit) - .skip(po.skip) - .sort('createdAt', -1) - .toArray() - return { books: convertDateObjToStringForArray(await MongoOrb('Bookings').composeRelated(bookings, 'services', 'Services', '_id')) } + const bookingsCursor = MongoOrb('Bookings') + .collection.find({ ...inputFilters, services: { $in: ownedServices } }) + const paginatedBookings = await (po.limit < 1 ? + bookingsCursor + : bookingsCursor.limit(po.limit + 1).skip(po.skip) + ).sort('createdAt', -1) + .toArray() + const hasNext = paginatedBookings.length === po.limit + 1 + if(hasNext) paginatedBookings.pop(); + + + + return { + books: convertDateObjToStringForArray(await MongoOrb('Bookings').composeRelated(paginatedBookings, 'services', 'Services', '_id')), + hasNextPage: hasNext + } }), )(input.arguments, input.source); export default getBookingsForService; diff --git a/packages/integrations/gei-bookings/src/UserQuery/getSelfBooks.ts b/packages/integrations/gei-bookings/src/UserQuery/getSelfBooks.ts index ef06ba4..42d364d 100644 --- a/packages/integrations/gei-bookings/src/UserQuery/getSelfBooks.ts +++ b/packages/integrations/gei-bookings/src/UserQuery/getSelfBooks.ts @@ -10,15 +10,20 @@ export const getSelfBooks = async (input: FieldResolveInput) => const po = preparePageOptions(args?.input?.page); const inputFilters = inputBooksFiltersSet(args?.input?.filters) - return { - books: convertDateObjToStringForArray(await MongoOrb('Bookings') - .collection.find({ ...inputFilters, bookerId: src.userId || src._id }) - .skip(po.skip) - .limit(po.limit) - .sort('createdAt', -1) - .toArray() - .then(async (b) => MongoOrb('Bookings').composeRelated(b, 'services', 'Services', '_id'))), - }; + const bookingsCursor = MongoOrb('Bookings') + .collection.find({ ...inputFilters, bookerId: src.userId || src._id }) + const paginatedBookings = await (po.limit < 1 ? + bookingsCursor + : bookingsCursor.limit(po.limit + 1).skip(po.skip) + ).sort('createdAt', -1) + .toArray() + const hasNext = paginatedBookings.length === po.limit + 1 + if(hasNext) paginatedBookings.pop(); + + return { + books: convertDateObjToStringForArray(await MongoOrb('Bookings').composeRelated(paginatedBookings, 'services', 'Services', '_id')), + hasNextPage: hasNext + } }), )(input.arguments, input.source); export default getSelfBooks;