From 54c024fc4f4ad8a4f922ed13accd8ef3f8bc2f47 Mon Sep 17 00:00:00 2001 From: paritosh18 Date: Fri, 14 Nov 2025 18:52:37 +0530 Subject: [PATCH] refactor: enhance inviteTeammate handler to utilize MinglarService for user management --- .../minglaradmin/handlers/inviteTeammate.ts | 48 +++++-------------- .../minglaradmin/services/minglar.service.ts | 40 ++++++++++++++++ 2 files changed, 52 insertions(+), 36 deletions(-) diff --git a/src/modules/minglaradmin/handlers/inviteTeammate.ts b/src/modules/minglaradmin/handlers/inviteTeammate.ts index 148b856..59fd527 100644 --- a/src/modules/minglaradmin/handlers/inviteTeammate.ts +++ b/src/modules/minglaradmin/handlers/inviteTeammate.ts @@ -1,12 +1,14 @@ import { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda'; import { safeHandler } from '../../../common/utils/handlers/safeHandler'; import { PrismaService } from '../../../common/database/prisma.service'; +import { MinglarService } from '../services/minglar.service'; import ApiError from '../../../common/utils/helper/ApiError'; import { ROLE } from '../../../common/utils/constants/common.constant'; import { verifyMinglarAdminToken } from '../../../common/middlewares/jwt/authForMinglarAdmin'; import { MINGLAR_INVITATION_STATUS } from '@/common/utils/constants/minglar.constant'; -const prisma = new PrismaService(); +const prismaService = new PrismaService(); +const minglarService = new MinglarService(prismaService); interface InviteTeammateBody { emailAddress: string; @@ -39,7 +41,7 @@ export const handler = safeHandler(async ( const userInfo = await verifyMinglarAdminToken(token); // Check if user has Minglar Admin role (role_xid = 1) - const adminUser = await prisma.user.findUnique({ + const adminUser = await prismaService.user.findUnique({ where: { id: userInfo.id }, select: { id: true, roleXid: true } }); @@ -89,47 +91,21 @@ export const handler = safeHandler(async ( throw new ApiError(400, 'Per value must be greater than 0'); } - // Check if user already exists - const existingUser = await prisma.user.findUnique({ - where: { emailAddress: emailAddress } - }); + // Check if user already exists - using service + const existingUser = await minglarService.checkUserExists(emailAddress); if (existingUser) { throw new ApiError(400, 'User is already registered.'); } + // Create new user - using service + const user = await minglarService.createUserForInvite(emailAddress, roleXid); - // Create new user - const user = await prisma.user.create({ - data: { - emailAddress: emailAddress, - roleXid: roleXid, - } - }); - - - await prisma.userRevenue.create({ - data: { - userXid: user.id, - is_fixed_salary: isFixedSalary, - per_value: perValue || 0, - isActive: true - } - }); - await prisma.inviteDetails.create({ - data: { - userXid: user.id, - is_invited: true, - invited_by: adminUser.id, - invited_on: new Date(), - is_accepted: false, - invitation_status: MINGLAR_INVITATION_STATUS.PENDING, - isActive: true - } - } - - ); + // Create user revenue - using service + await minglarService.createUserRevenue(user.id, isFixedSalary, perValue || 0); + // Create invite details - using service + await minglarService.createInviteDetails(user.id, adminUser.id, MINGLAR_INVITATION_STATUS.PENDING); return { statusCode: 200, diff --git a/src/modules/minglaradmin/services/minglar.service.ts b/src/modules/minglaradmin/services/minglar.service.ts index 5148ae4..c62cbf3 100644 --- a/src/modules/minglaradmin/services/minglar.service.ts +++ b/src/modules/minglaradmin/services/minglar.service.ts @@ -132,6 +132,46 @@ export class MinglarService { return existingUser; } + async checkUserExists(emailAddress: string) { + return await this.prisma.user.findUnique({ + where: { emailAddress: emailAddress } + }); + } + + async createUserForInvite(emailAddress: string, roleXid: number) { + return await this.prisma.user.create({ + data: { + emailAddress: emailAddress, + roleXid: roleXid, + } + }); + } + + async createUserRevenue(userXid: number, isFixedSalary: boolean, perValue: number) { + return await this.prisma.userRevenue.create({ + data: { + userXid: userXid, + is_fixed_salary: isFixedSalary, + per_value: perValue || 0, + isActive: true + } + }); + } + + async createInviteDetails(userXid: number, invitedBy: number, invitationStatus: string) { + return await this.prisma.inviteDetails.create({ + data: { + userXid: userXid, + is_invited: true, + invited_by: invitedBy, + invited_on: new Date(), + is_accepted: false, + invitation_status: invitationStatus, + isActive: true + } + }); + } + async updateProfile( userId: number, userData: {