From 8ab2d82e7e7b9d741aab76cfc8fe7eeee158f53a Mon Sep 17 00:00:00 2001 From: Behzad Rabiei Date: Wed, 4 Dec 2024 15:31:33 +0200 Subject: [PATCH 1/3] feat: add active mdoules to get community api --- package-lock.json | 109 ++++++++++-------------- src/controllers/community.controller.ts | 3 +- src/services/module.service.ts | 26 +++++- 3 files changed, 72 insertions(+), 66 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0eb77d1..06f039c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,6 +95,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@acuminous/bitsyntax/-/bitsyntax-0.1.2.tgz", "integrity": "sha512-29lUK80d1muEQqiUsSo+3A0yP6CdspgC95EnKBMi22Xlwt79i/En4Vr67+cXhU+cZjbti3TgGGC5wy1stIywVQ==", + "license": "MIT", "dependencies": { "buffer-more-ints": "~1.0.0", "debug": "^4.3.4", @@ -3657,9 +3658,9 @@ "dev": true }, "node_modules/@togethercrew.dev/db": { - "version": "3.0.72", - "resolved": "https://registry.npmjs.org/@togethercrew.dev/db/-/db-3.0.72.tgz", - "integrity": "sha512-b2KkEjsCqlhqtypxDFBtvn5apyq0S0BiPcgr4BuVgXFHwvUlW5rc96lgKGVJJ8fUqUeNdgJEBJoqzUcLo8OELg==", + "version": "3.0.77", + "resolved": "https://registry.npmjs.org/@togethercrew.dev/db/-/db-3.0.77.tgz", + "integrity": "sha512-fy1l9GnPAhVlpm79tcn7/4+mIgBBLkCi8XSDi61JLHv/dJJ3XaNKLccQ8naRIkBzVQaN89KyFdxnmFCZ9Xn9Hg==", "license": "ISC", "dependencies": { "discord.js": "^14.7.1", @@ -3687,14 +3688,16 @@ "version": "5.5.1", "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz", "integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==", + "license": "Apache-2.0", "engines": { "node": ">=14.20.1" } }, "node_modules/@togethercrew.dev/tc-messagebroker/node_modules/mongodb": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.0.tgz", - "integrity": "sha512-g+GCMHN1CoRUA+wb1Agv0TI4YTSiWr42B5ulkiAfLLHitGK1R+PkSAf3Lr5rPZwi/3F04LiaZEW0Kxro9Fi2TA==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.2.tgz", + "integrity": "sha512-H60HecKO4Bc+7dhOv4sJlgvenK4fQNqqUIlXxZYQNbfEWSALGAwGoyJd/0Qwk4TttFXUOHJ2ZJQe/52ScaUwtQ==", + "license": "Apache-2.0", "dependencies": { "bson": "^5.5.0", "mongodb-connection-string-url": "^2.6.0", @@ -3732,13 +3735,14 @@ } }, "node_modules/@togethercrew.dev/tc-messagebroker/node_modules/mongoose": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.3.tgz", - "integrity": "sha512-moYP2qWCOdWRDeBxqB/zYwQmQnTBsF5DoolX5uPyI218BkiA1ujGY27P0NTd4oWIX+LLkZPw0LDzlc/7oh1plg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.8.3.tgz", + "integrity": "sha512-eFnbkKgyVrICoHB6tVJ4uLanS7d5AIo/xHkEbQeOv6g2sD7gh/1biRwvFifsmbtkIddQVNr3ROqHik6gkknN3g==", + "license": "MIT", "dependencies": { "bson": "^5.5.0", "kareem": "2.5.1", - "mongodb": "5.9.0", + "mongodb": "5.9.2", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", @@ -3756,6 +3760,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "license": "MIT", "dependencies": { "debug": "4.x" }, @@ -3766,7 +3771,8 @@ "node_modules/@togethercrew.dev/tc-messagebroker/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/@tokenizer/token": { "version": "0.3.0", @@ -3798,9 +3804,10 @@ "dev": true }, "node_modules/@types/amqplib": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@types/amqplib/-/amqplib-0.10.1.tgz", - "integrity": "sha512-j6ANKT79ncUDnAs/+9r9eDujxbeJoTjoVu33gHHcaPfmLQaMhvfbH2GqSe8KUM444epAp1Vl3peVOQfZk3UIqA==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@types/amqplib/-/amqplib-0.10.5.tgz", + "integrity": "sha512-/cSykxROY7BWwDoi4Y4/jLAuZTshZxd8Ey1QYa/VaXriMotBDoou7V/twJiOSHzU6t1Kp1AHAUXGCgqq+6DNeg==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4135,9 +4142,10 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz", - "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==" + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "license": "MIT" }, "node_modules/@types/validator": { "version": "13.7.17", @@ -4552,13 +4560,13 @@ } }, "node_modules/amqplib": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.10.3.tgz", - "integrity": "sha512-UHmuSa7n8vVW/a5HGh2nFPqAEr8+cD4dEZ6u9GjP91nHfr1a54RyAKyra7Sb5NH7NBKOUlyQSMXIp0qAixKexw==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.10.5.tgz", + "integrity": "sha512-Dx5zmy0Ur+Q7LPPdhz+jx5IzmJBoHd15tOeAfQ8SuvEtyPJ20hBemhOBA4b1WeORCRa0ENM/kHCzmem1w/zHvQ==", + "license": "MIT", "dependencies": { "@acuminous/bitsyntax": "^0.1.2", "buffer-more-ints": "~1.0.0", - "readable-stream": "1.x >=1.1.9", "url-parse": "~1.5.10" }, "engines": { @@ -5065,7 +5073,8 @@ "node_modules/buffer-more-ints": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz", - "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==" + "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==", + "license": "MIT" }, "node_modules/bullmq": { "version": "5.0.0", @@ -5597,10 +5606,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -10433,13 +10443,14 @@ } }, "node_modules/mongoose": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.12.1.tgz", - "integrity": "sha512-VEawZMiMaclKrR5q8rj+Bu95PfUmx0ld+dk/poi37fqPlSd93sE4TlIPSqBY9GKY9tZPxu0aDEtgFDuHoI8sOg==", + "version": "6.13.5", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.13.5.tgz", + "integrity": "sha512-podJEaIF/5N2mQymkyyUzN2NeL/68MOyYjf3O0zsgCU2B2Omnhg6NhGHVavt9ZH/VxOrwKE9XphbuHDFK+T06g==", + "license": "MIT", "dependencies": { "bson": "^4.7.2", "kareem": "2.5.1", - "mongodb": "4.17.1", + "mongodb": "4.17.2", "mpath": "0.9.0", "mquery": "4.0.3", "ms": "2.1.3", @@ -10466,23 +10477,6 @@ "mongoose": "^6.0.0" } }, - "node_modules/mongoose/node_modules/mongodb": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz", - "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==", - "dependencies": { - "bson": "^4.7.2", - "mongodb-connection-string-url": "^2.6.0", - "socks": "^2.7.1" - }, - "engines": { - "node": ">=12.9.0" - }, - "optionalDependencies": { - "@aws-sdk/credential-providers": "^3.186.0", - "@mongodb-js/saslprep": "^1.1.0" - } - }, "node_modules/mongoose/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -11507,7 +11501,8 @@ "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -11790,22 +11785,6 @@ "node": ">=0.10.0" } }, - "node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, "node_modules/readable-web-to-node-stream": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", @@ -11965,7 +11944,8 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.2", @@ -13500,6 +13480,7 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" diff --git a/src/controllers/community.controller.ts b/src/controllers/community.controller.ts index 2665641..60bcc97 100644 --- a/src/controllers/community.controller.ts +++ b/src/controllers/community.controller.ts @@ -1,5 +1,5 @@ import { Response } from 'express'; -import { communityService, userService, platformService, discordServices } from '../services'; +import { communityService, userService, platformService, discordServices, moduleService } from '../services'; import { IAuthRequest } from '../interfaces/Request.interface'; import { catchAsync, pick, ApiError, roleUtil } from '../utils'; import httpStatus from 'http-status'; @@ -40,6 +40,7 @@ const getCommunity = catchAsync(async function (req: IAuthRequest, res: Response select: '_id name metadata disconnectedAt', }); community = await communityService.populateRoles(community); + community = await moduleService.getActiveModulesForCommunity(community); } res.send(community); }); diff --git a/src/services/module.service.ts b/src/services/module.service.ts index 67ae578..d3eeda2 100644 --- a/src/services/module.service.ts +++ b/src/services/module.service.ts @@ -1,5 +1,5 @@ import { HydratedDocument, Types, FilterQuery } from 'mongoose'; -import { Module, IModule, IModuleUpdateBody } from '@togethercrew.dev/db'; +import { Module, IModule, IModuleUpdateBody, ICommunity } from '@togethercrew.dev/db'; /** * Create a module @@ -31,6 +31,15 @@ const getModuleByFilter = async (filter: FilterQuery): Promise | null>} + */ +const getModulesByFilter = async (filter: FilterQuery): Promise[]> => { + return Module.find(filter); +}; + /** * Get module by id * @param {Types.ObjectId} id @@ -85,6 +94,20 @@ const deleteModule = async (module: HydratedDocument): Promise} community + */ +const getActiveModulesForCommunity = async (community: any) => { + const modules = await getModulesByFilter({ community: community.id }); + const moduleNames = [...new Set(modules.map((module) => module.name))]; + const communityObj = community.toObject(); + communityObj.modules = moduleNames; + return communityObj; +}; export default { createModule, queryModules, @@ -92,4 +115,5 @@ export default { getModuleById, deleteModule, updateModule, + getActiveModulesForCommunity, }; From 936c14431e5b696d874978db409abc7c0f565529 Mon Sep 17 00:00:00 2001 From: Behzad Rabiei Date: Wed, 4 Dec 2024 15:40:38 +0200 Subject: [PATCH 2/3] chore: update permissions for get module --- src/controllers/community.controller.ts | 1 - src/routes/v1/module.route.ts | 2 +- src/services/module.service.ts | 13 +------------ 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/src/controllers/community.controller.ts b/src/controllers/community.controller.ts index 60bcc97..4901e1c 100644 --- a/src/controllers/community.controller.ts +++ b/src/controllers/community.controller.ts @@ -40,7 +40,6 @@ const getCommunity = catchAsync(async function (req: IAuthRequest, res: Response select: '_id name metadata disconnectedAt', }); community = await communityService.populateRoles(community); - community = await moduleService.getActiveModulesForCommunity(community); } res.send(community); }); diff --git a/src/routes/v1/module.route.ts b/src/routes/v1/module.route.ts index 39244d0..18ed4ca 100644 --- a/src/routes/v1/module.route.ts +++ b/src/routes/v1/module.route.ts @@ -13,7 +13,7 @@ router router .route('/:moduleId') - .get(auth('admin'), validate(moduleValidation.getModule), moduleController.getModule) + .get(auth('admin', 'view'), validate(moduleValidation.getModule), moduleController.getModule) .patch(auth('admin'), validate(moduleValidation.dynamicModuleUpdate), moduleController.updateModule) .delete(auth('admin'), validate(moduleValidation.deleteModule), moduleController.deleteModule); diff --git a/src/services/module.service.ts b/src/services/module.service.ts index d3eeda2..d056f2a 100644 --- a/src/services/module.service.ts +++ b/src/services/module.service.ts @@ -97,17 +97,7 @@ const deleteModule = async (module: HydratedDocument): Promise} community - */ -const getActiveModulesForCommunity = async (community: any) => { - const modules = await getModulesByFilter({ community: community.id }); - const moduleNames = [...new Set(modules.map((module) => module.name))]; - const communityObj = community.toObject(); - communityObj.modules = moduleNames; - return communityObj; -}; + export default { createModule, queryModules, @@ -115,5 +105,4 @@ export default { getModuleById, deleteModule, updateModule, - getActiveModulesForCommunity, }; From 308d8c89a315bc3baee17d641cd7d05351de24f4 Mon Sep 17 00:00:00 2001 From: Behzad Rabiei Date: Wed, 4 Dec 2024 15:42:17 +0200 Subject: [PATCH 3/3] chore: remove no needed code --- src/services/module.service.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/services/module.service.ts b/src/services/module.service.ts index d056f2a..38886fd 100644 --- a/src/services/module.service.ts +++ b/src/services/module.service.ts @@ -93,11 +93,6 @@ const updateModule = async ( const deleteModule = async (module: HydratedDocument): Promise> => { return await module.remove(); }; - -interface communityWithModules extends IModule { - modules: string[]; -} - export default { createModule, queryModules,