refactor: enhance inviteTeammate handler to utilize MinglarService for user management

This commit is contained in:
paritosh18
2025-11-14 18:52:37 +05:30
parent e9496d3868
commit 54c024fc4f
2 changed files with 52 additions and 36 deletions

View File

@@ -1,12 +1,14 @@
import { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda'; import { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda';
import { safeHandler } from '../../../common/utils/handlers/safeHandler'; import { safeHandler } from '../../../common/utils/handlers/safeHandler';
import { PrismaService } from '../../../common/database/prisma.service'; import { PrismaService } from '../../../common/database/prisma.service';
import { MinglarService } from '../services/minglar.service';
import ApiError from '../../../common/utils/helper/ApiError'; import ApiError from '../../../common/utils/helper/ApiError';
import { ROLE } from '../../../common/utils/constants/common.constant'; import { ROLE } from '../../../common/utils/constants/common.constant';
import { verifyMinglarAdminToken } from '../../../common/middlewares/jwt/authForMinglarAdmin'; import { verifyMinglarAdminToken } from '../../../common/middlewares/jwt/authForMinglarAdmin';
import { MINGLAR_INVITATION_STATUS } from '@/common/utils/constants/minglar.constant'; 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 { interface InviteTeammateBody {
emailAddress: string; emailAddress: string;
@@ -39,7 +41,7 @@ export const handler = safeHandler(async (
const userInfo = await verifyMinglarAdminToken(token); const userInfo = await verifyMinglarAdminToken(token);
// Check if user has Minglar Admin role (role_xid = 1) // 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 }, where: { id: userInfo.id },
select: { id: true, roleXid: true } 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'); throw new ApiError(400, 'Per value must be greater than 0');
} }
// Check if user already exists // Check if user already exists - using service
const existingUser = await prisma.user.findUnique({ const existingUser = await minglarService.checkUserExists(emailAddress);
where: { emailAddress: emailAddress }
});
if (existingUser) { if (existingUser) {
throw new ApiError(400, 'User is already registered.'); throw new ApiError(400, 'User is already registered.');
} }
// Create new user - using service
const user = await minglarService.createUserForInvite(emailAddress, roleXid);
// Create new user // Create user revenue - using service
const user = await prisma.user.create({ await minglarService.createUserRevenue(user.id, isFixedSalary, perValue || 0);
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 invite details - using service
await minglarService.createInviteDetails(user.id, adminUser.id, MINGLAR_INVITATION_STATUS.PENDING);
return { return {
statusCode: 200, statusCode: 200,

View File

@@ -132,6 +132,46 @@ export class MinglarService {
return existingUser; 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( async updateProfile(
userId: number, userId: number,
userData: { userData: {