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 { 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,
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
Reference in New Issue
Block a user