From 35ddf1334716182a2fd70f577a09accfc650c47f Mon Sep 17 00:00:00 2001 From: Garv Makkar Date: Sun, 5 Jan 2025 21:02:01 +0530 Subject: [PATCH 1/3] add searchManagers function --- src/controllers/createQuiz/quiz/index.ts | 1 + .../createQuiz/quiz/searchManagers.ts | 33 +++++++++++++++++++ src/routers/createQuiz/index.ts | 2 ++ src/routers/createQuiz/managers.ts | 10 ++++++ 4 files changed, 46 insertions(+) create mode 100644 src/controllers/createQuiz/quiz/searchManagers.ts create mode 100644 src/routers/createQuiz/managers.ts diff --git a/src/controllers/createQuiz/quiz/index.ts b/src/controllers/createQuiz/quiz/index.ts index ca74eb1..1b88d6e 100644 --- a/src/controllers/createQuiz/quiz/index.ts +++ b/src/controllers/createQuiz/quiz/index.ts @@ -3,3 +3,4 @@ export { default as updateQuiz } from './updateQuiz' export { default as publishQuiz } from './publishQuiz' export { default as deleteQuiz } from './deleteQuiz' export { default as quizGet } from './getQuiz' +export { default as searchManagers } from './searchManagers' diff --git a/src/controllers/createQuiz/quiz/searchManagers.ts b/src/controllers/createQuiz/quiz/searchManagers.ts new file mode 100644 index 0000000..e7aa19f --- /dev/null +++ b/src/controllers/createQuiz/quiz/searchManagers.ts @@ -0,0 +1,33 @@ +import userModel from '@models/user/userModel' +import { Request, Response } from 'express' +import { IUser } from 'types' + +interface searchManagersRequest extends Request { + body: { + query: string + } +} + +const searchManagers = async (req: searchManagersRequest, res: Response) => { + const { query } = req.body + const managers: IUser[] = await userModel.find({ + $or: [ + { 'personalDetails.name': { $regex: query, $options: 'i' } }, + { 'personalDetails.emailAdd': { $regex: query, $options: 'i' } }, + { 'personalDetails.phoneNo': { $regex: query, $options: 'i' } }, + ], + }) + + if (managers) { + res.status(200).json({ + message: 'Managers found', + managers, + }) + } else { + res.status(404).json({ + message: 'No managers found', + }) + } +} + +export default searchManagers diff --git a/src/routers/createQuiz/index.ts b/src/routers/createQuiz/index.ts index 3f52c31..df0d3c3 100644 --- a/src/routers/createQuiz/index.ts +++ b/src/routers/createQuiz/index.ts @@ -2,11 +2,13 @@ import express from 'express' import quizRouter from './quiz' import sectionRouter from './section' import questionRouter from './question' +import managerRouter from './managers' const router = express.Router() router.use('/quiz', quizRouter) router.use('/section', sectionRouter) router.use('/question', questionRouter) +router.use('/managers', managerRouter) export default router diff --git a/src/routers/createQuiz/managers.ts b/src/routers/createQuiz/managers.ts new file mode 100644 index 0000000..c1952f9 --- /dev/null +++ b/src/routers/createQuiz/managers.ts @@ -0,0 +1,10 @@ +import express from 'express' +import * as questionController from '@controllers/createQuiz/quiz' +import hasEditAccess from '@utils/hasEditAccess' +import isOnboard from '@utils/isOnboard' + +const router = express.Router() + +router.get('/searchManagers', questionController.searchManagers) + +export default router \ No newline at end of file From f7dcedf61a31124a1018f9706c8a584733d79220 Mon Sep 17 00:00:00 2001 From: Garv Makkar Date: Sun, 5 Jan 2025 23:26:29 +0530 Subject: [PATCH 2/3] create /common route for shared functions --- src/controllers/common/index.ts | 1 + .../searchUsers.ts} | 22 +++++++++---------- src/controllers/createQuiz/quiz/index.ts | 3 +-- src/routers/common/index.ts | 8 +++++++ src/routers/createQuiz/index.ts | 2 -- src/routers/createQuiz/managers.ts | 10 --------- src/server.ts | 2 ++ 7 files changed, 23 insertions(+), 25 deletions(-) create mode 100644 src/controllers/common/index.ts rename src/controllers/{createQuiz/quiz/searchManagers.ts => common/searchUsers.ts} (56%) create mode 100644 src/routers/common/index.ts delete mode 100644 src/routers/createQuiz/managers.ts diff --git a/src/controllers/common/index.ts b/src/controllers/common/index.ts new file mode 100644 index 0000000..9989102 --- /dev/null +++ b/src/controllers/common/index.ts @@ -0,0 +1 @@ +export { default as searchUsers } from './searchUsers' diff --git a/src/controllers/createQuiz/quiz/searchManagers.ts b/src/controllers/common/searchUsers.ts similarity index 56% rename from src/controllers/createQuiz/quiz/searchManagers.ts rename to src/controllers/common/searchUsers.ts index e7aa19f..ff06867 100644 --- a/src/controllers/createQuiz/quiz/searchManagers.ts +++ b/src/controllers/common/searchUsers.ts @@ -2,32 +2,32 @@ import userModel from '@models/user/userModel' import { Request, Response } from 'express' import { IUser } from 'types' -interface searchManagersRequest extends Request { - body: { +interface searchUserRequest extends Request { + query: { query: string } } -const searchManagers = async (req: searchManagersRequest, res: Response) => { - const { query } = req.body - const managers: IUser[] = await userModel.find({ +const searchUsers = async (req: searchUserRequest, res: Response) => { + const { query } = req.query + const users: IUser[] = await userModel.find({ $or: [ { 'personalDetails.name': { $regex: query, $options: 'i' } }, { 'personalDetails.emailAdd': { $regex: query, $options: 'i' } }, { 'personalDetails.phoneNo': { $regex: query, $options: 'i' } }, ], }) - - if (managers) { + + if (users) { res.status(200).json({ - message: 'Managers found', - managers, + message: 'Users found', + users, }) } else { res.status(404).json({ - message: 'No managers found', + message: 'No users found', }) } } -export default searchManagers +export default searchUsers \ No newline at end of file diff --git a/src/controllers/createQuiz/quiz/index.ts b/src/controllers/createQuiz/quiz/index.ts index 1b88d6e..00f82a1 100644 --- a/src/controllers/createQuiz/quiz/index.ts +++ b/src/controllers/createQuiz/quiz/index.ts @@ -2,5 +2,4 @@ export { default as hostQuiz } from './createQuiz' export { default as updateQuiz } from './updateQuiz' export { default as publishQuiz } from './publishQuiz' export { default as deleteQuiz } from './deleteQuiz' -export { default as quizGet } from './getQuiz' -export { default as searchManagers } from './searchManagers' +export { default as quizGet } from './getQuiz' \ No newline at end of file diff --git a/src/routers/common/index.ts b/src/routers/common/index.ts new file mode 100644 index 0000000..000e72a --- /dev/null +++ b/src/routers/common/index.ts @@ -0,0 +1,8 @@ +import express from 'express' +import * as commonController from '@controllers/common' + +const router = express.Router() + +router.get('/searchUsers', commonController.searchUsers) + +export default router \ No newline at end of file diff --git a/src/routers/createQuiz/index.ts b/src/routers/createQuiz/index.ts index df0d3c3..3f52c31 100644 --- a/src/routers/createQuiz/index.ts +++ b/src/routers/createQuiz/index.ts @@ -2,13 +2,11 @@ import express from 'express' import quizRouter from './quiz' import sectionRouter from './section' import questionRouter from './question' -import managerRouter from './managers' const router = express.Router() router.use('/quiz', quizRouter) router.use('/section', sectionRouter) router.use('/question', questionRouter) -router.use('/managers', managerRouter) export default router diff --git a/src/routers/createQuiz/managers.ts b/src/routers/createQuiz/managers.ts deleted file mode 100644 index c1952f9..0000000 --- a/src/routers/createQuiz/managers.ts +++ /dev/null @@ -1,10 +0,0 @@ -import express from 'express' -import * as questionController from '@controllers/createQuiz/quiz' -import hasEditAccess from '@utils/hasEditAccess' -import isOnboard from '@utils/isOnboard' - -const router = express.Router() - -router.get('/searchManagers', questionController.searchManagers) - -export default router \ No newline at end of file diff --git a/src/server.ts b/src/server.ts index c7d8653..e3d5cc3 100644 --- a/src/server.ts +++ b/src/server.ts @@ -7,6 +7,7 @@ import authRouter from '@routers/auth' import createQuizRouter from '@routers/createQuiz' import giveQuizRouter from '@routers/giveQuiz' import checkQuizRouter from '@routers/checkQuiz' +import commonRouter from '@routers/common' import logRouter from '@routers/log' import cookieParser from 'cookie-parser' import morgan from 'morgan' @@ -58,6 +59,7 @@ app.use('/auth', authRouter) app.use('/checkQuiz', checkQuizRouter) app.use('/createQuiz', createQuizRouter) app.use('/giveQuiz', giveQuizRouter) +app.use('/common', commonRouter) app.use('/log', logRouter) app.get('/', (req: Request, res: Response) => { res.send('Express + TypeScript Server') From dd9aaef9831a1ec2186bf53f9b15ac0d668794e7 Mon Sep 17 00:00:00 2001 From: Garv Makkar Date: Mon, 6 Jan 2025 17:02:38 +0530 Subject: [PATCH 3/3] implement search by ids --- src/controllers/common/searchUsers.ts | 44 ++++++++++++++++++--------- src/routers/common/index.ts | 4 ++- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/controllers/common/searchUsers.ts b/src/controllers/common/searchUsers.ts index ff06867..f53c264 100644 --- a/src/controllers/common/searchUsers.ts +++ b/src/controllers/common/searchUsers.ts @@ -5,29 +5,45 @@ import { IUser } from 'types' interface searchUserRequest extends Request { query: { query: string + ids: string } } const searchUsers = async (req: searchUserRequest, res: Response) => { - const { query } = req.query - const users: IUser[] = await userModel.find({ - $or: [ - { 'personalDetails.name': { $regex: query, $options: 'i' } }, - { 'personalDetails.emailAdd': { $regex: query, $options: 'i' } }, - { 'personalDetails.phoneNo': { $regex: query, $options: 'i' } }, - ], - }) + const { query, ids } = req.query + const objIds = ids?.split(',') + + if (!query && !ids) { + return res.status(400).json({ + message: 'Invalid query', + }) + } + + let findQuery = {} + if (query) { + findQuery = { + $or: [ + { 'personalDetails.name': { $regex: query, $options: 'i' } }, + { 'personalDetails.emailAdd': { $regex: query, $options: 'i' } }, + ], + } + } else if (ids) { + findQuery = { _id: { $in: objIds } } + } - if (users) { - res.status(200).json({ + const users: IUser[] = await userModel.find(findQuery) + + if (users && users.length > 0) { + return res.status(200).json({ message: 'Users found', users, }) - } else { - res.status(404).json({ - message: 'No users found', - }) } + + return res.status(404).json({ + message: 'No users found', + }) + } export default searchUsers \ No newline at end of file diff --git a/src/routers/common/index.ts b/src/routers/common/index.ts index 000e72a..6c31fd4 100644 --- a/src/routers/common/index.ts +++ b/src/routers/common/index.ts @@ -1,8 +1,10 @@ import express from 'express' import * as commonController from '@controllers/common' +import isOnboard from '@utils/isOnboard' +import isAdmin from '@utils/isAdmin' const router = express.Router() -router.get('/searchUsers', commonController.searchUsers) +router.get('/searchUsers', isOnboard, isAdmin, commonController.searchUsers) export default router \ No newline at end of file