refactor: enhance inviteTeammate handler to utilize MinglarService for user management
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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: {
|
||||
|
||||
Reference in New Issue
Block a user