diff --git a/serverless.yml b/serverless.yml index 3a08ef2..4aec7b4 100644 --- a/serverless.yml +++ b/serverless.yml @@ -276,6 +276,22 @@ functions: path: /minglaradmin/update-profile method: patch + prepopulateTeammate: + handler: src/modules/minglaradmin/handlers/prepopulateTeammate.handler + package: + patterns: + - "src/modules/minglaradmin/**" + - "common/**" + - "src/common/**" + - "node_modules/@prisma/client/**" + - "node_modules/.prisma/**" + + events: + - httpApi: + path: /minglaradmin/prepopulate-Roles + method: get + + addCompanyDetails: handler: src/modules/host/handlers/addCompanyDetails.handler package: diff --git a/src/modules/minglaradmin/handlers/prepopulateTeammate.ts b/src/modules/minglaradmin/handlers/prepopulateTeammate.ts new file mode 100644 index 0000000..142fdd5 --- /dev/null +++ b/src/modules/minglaradmin/handlers/prepopulateTeammate.ts @@ -0,0 +1,85 @@ +import { + APIGatewayProxyEvent, + APIGatewayProxyResult, + Context, +} from 'aws-lambda'; +import { safeHandler } from '../../../common/utils/handlers/safeHandler'; +import { PrismaService } from '../../../common/database/prisma.service'; +import ApiError from '../../../common/utils/helper/ApiError'; +import { ROLE } from '../../../common/utils/constants/common.constant'; +import { verifyMinglarAdminToken } from '../../../common/middlewares/jwt/authForMinglarAdmin'; + +const prismaService = new PrismaService(); + +/** + * Get prepopulated roles for Coadmin and Account_manager + * Returns an array of role objects with their IDs + * Only accessible by MINGLAR_ADMIN (role_xid = 1) + */ +export const handler = safeHandler( + async ( + event: APIGatewayProxyEvent, + context?: Context, + ): Promise => { + const token = + event.headers['x-auth-token'] || event.headers['X-Auth-Token']; + if (!token) { + throw new ApiError( + 401, + 'This is a protected route. Please provide a valid token.', + ); + } + + // Verify token and get user info + const userInfo = await verifyMinglarAdminToken(token); + console.log('User Info:', userInfo); + // Check if user has Minglar Admin role (role_xid = 1) + const user = await prismaService.user.findUnique({ + where: { id: userInfo.id }, + select: { roleXid: true }, + }); + + if (!user || user.roleXid !== ROLE.MINGLAR_ADMIN) { + throw new ApiError( + 403, + 'Access denied. Only Minglar Admin can access this route.', + ); + } + + // Fetch Coadmin and Account_Manager roles + const roles = await prismaService.roles.findMany({ + where: { + id: { + in: [ROLE.CO_ADMIN, ROLE.ACCOUNT_MANAGER], + }, + isActive: true, + deletedAt: null, + }, + select: { + id: true, + roleName: true, + }, + orderBy: { + id: 'asc', + }, + }); + + if (!roles || roles.length === 0) { + throw new ApiError(404, 'No roles found for Coadmin or Account_manager'); + } + + return { + statusCode: 200, + headers: { + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + }, + body: JSON.stringify({ + success: true, + message: 'Roles retrieved successfully', + data: roles, + count: roles.length, + }), + }; + }, +);