From e7234c29adcb4c78d1a271e7655678aad07bea6d Mon Sep 17 00:00:00 2001 From: Mayank Mishra Date: Thu, 20 Nov 2025 16:26:48 +0530 Subject: [PATCH] added some columns and fixed some code issues --- prisma/schema.prisma | 6 +++- src/common/utils/constants/common.constant.ts | 7 ++++ .../minglaradmin/handlers/inviteTeammate.ts | 34 ++++++------------- .../minglaradmin/handlers/registration.ts | 9 +++-- .../minglaradmin/services/minglar.service.ts | 33 ++++++++++++------ 5 files changed, 48 insertions(+), 41 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 3f8157e..eaff4de 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -23,8 +23,12 @@ model User { userPassword String? @map("user_password") userPasscode String? @map("user_passcode") profileImage String? @map("profile_image") + userLat String? @map("user_lat") + userLong String? @map("user_long") + userStatus String? @default("pending") @map("user_status") isEmailVerfied Boolean? @default(false) @map("is_email_verified") isMobileVerfied Boolean? @default(false) @map("is_mobile_verified") + isProfileUpdated Boolean? @default(false) @map("is_profile_updated") isActive Boolean? @default(true) @map("is_active") createdAt DateTime? @default(now()) @map("created_at") updatedAt DateTime? @updatedAt @map("updated_at") @@ -133,7 +137,7 @@ model InviteDetails { invited_on DateTime @default(now()) @map("invited_on") is_accepted Boolean @default(false) @map("is_accepted") accepted_on DateTime? @map("accepted_on") - invitation_status String @default("pending") @map("invitation_status") + invitation_status String @default("invited") @map("invitation_status") isMinglarInvitation Boolean @default(false) @map("is_minglar_invitation") isActive Boolean @default(true) @map("is_active") createdAt DateTime @default(now()) @map("created_at") diff --git a/src/common/utils/constants/common.constant.ts b/src/common/utils/constants/common.constant.ts index 05f9f6d..b5fcb80 100644 --- a/src/common/utils/constants/common.constant.ts +++ b/src/common/utils/constants/common.constant.ts @@ -5,4 +5,11 @@ export const ROLE = { HOST: 4, OPERATOR: 5, USER: 6 +} + +export const USER_STATUS = { + INVITED: "Invited", + ACTIVE: "Active", + DE_ACTIVATED: "De-activated", + REJECTED: "Rejected" } \ No newline at end of file diff --git a/src/modules/minglaradmin/handlers/inviteTeammate.ts b/src/modules/minglaradmin/handlers/inviteTeammate.ts index 71ba60b..3b925c3 100644 --- a/src/modules/minglaradmin/handlers/inviteTeammate.ts +++ b/src/modules/minglaradmin/handlers/inviteTeammate.ts @@ -1,22 +1,18 @@ -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 { verifyOnlyMinglarAdminToken } from '@/common/middlewares/jwt/authForOnlyMinglarAdmin'; import { MINGLAR_INVITATION_STATUS } from '@/common/utils/constants/minglar.constant'; +import { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda'; +import { PrismaService } from '../../../common/database/prisma.service'; +import { ROLE } from '../../../common/utils/constants/common.constant'; +import { safeHandler } from '../../../common/utils/handlers/safeHandler'; +import ApiError from '../../../common/utils/helper/ApiError'; import { sendInvitationEmailForMinglarAdmin } from '../services/inviteTeammatesEmail.service'; +import { MinglarService } from '../services/minglar.service'; const prismaService = new PrismaService(); const minglarService = new MinglarService(prismaService); interface InviteTeammateBody { emailAddress: string; - firstName?: string; - lastName?: string; - mobileNumber?: string; - isdCode?: string; roleXid: number; isFixedSalary: boolean; perValue?: number; @@ -39,17 +35,7 @@ export const handler = safeHandler(async ( } // Verify token and get user info - const userInfo = await verifyMinglarAdminToken(token); - - // Check if user has Minglar Admin role (role_xid = 1) - const adminUser = await prismaService.user.findUnique({ - where: { id: userInfo.id }, - select: { id: true, roleXid: true } - }); - - if (!adminUser || adminUser.roleXid !== ROLE.MINGLAR_ADMIN) { - throw new ApiError(403, 'Access denied. Only Minglar Admin can invite teammates.'); - } + const userInfo = await verifyOnlyMinglarAdminToken(token); // Parse request body let body: InviteTeammateBody; @@ -96,7 +82,7 @@ export const handler = safeHandler(async ( const existingUser = await minglarService.checkUserExists(emailAddress); if (existingUser) { - throw new ApiError(400, 'User is already registered.'); + throw new ApiError(400, 'User already exists.'); } // Create new user - using service @@ -106,7 +92,7 @@ export const handler = safeHandler(async ( await minglarService.createUserRevenue(user.id, isFixedSalary, perValue || 0); // Create invite details - using service - await minglarService.createInviteDetails(user.id, adminUser.id, MINGLAR_INVITATION_STATUS.INVITED); + await minglarService.createInviteDetails(user.id, userInfo.id, MINGLAR_INVITATION_STATUS.INVITED); await sendInvitationEmailForMinglarAdmin(emailAddress); diff --git a/src/modules/minglaradmin/handlers/registration.ts b/src/modules/minglaradmin/handlers/registration.ts index 1ade84b..174df9d 100644 --- a/src/modules/minglaradmin/handlers/registration.ts +++ b/src/modules/minglaradmin/handlers/registration.ts @@ -1,12 +1,11 @@ -import { MinglarService } from './../services/minglar.service'; +import { ROLE, USER_STATUS } from '@/common/utils/constants/common.constant'; import { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda'; -import { safeHandler } from '../../../common/utils/handlers/safeHandler'; import { PrismaService } from '../../../common/database/prisma.service'; +import { safeHandler } from '../../../common/utils/handlers/safeHandler'; import ApiError from '../../../common/utils/helper/ApiError'; -import * as bcrypt from 'bcryptjs'; import { generateOtpHelper } from '../../../common/utils/helper/sendOtp'; -import { ROLE } from '@/common/utils/constants/common.constant'; import { sendOtpEmailForMinglarAdmin } from '../services/sendOTPEmail.service'; +import { MinglarService } from './../services/minglar.service'; const prismaService = new PrismaService(); const minglarService = new MinglarService(prismaService); @@ -31,7 +30,7 @@ export const handler = safeHandler(async ( } const user = await prismaService.user.findUnique({ - where: { emailAddress: email }, + where: { emailAddress: email, isActive: true, userStatus: USER_STATUS.INVITED }, select: { emailAddress: true, id: true, userPassword: true, roleXid: true }, }); diff --git a/src/modules/minglaradmin/services/minglar.service.ts b/src/modules/minglaradmin/services/minglar.service.ts index 04ebfb8..a1e215b 100644 --- a/src/modules/minglaradmin/services/minglar.service.ts +++ b/src/modules/minglaradmin/services/minglar.service.ts @@ -1,14 +1,12 @@ +import { ROLE, USER_STATUS } from '@/common/utils/constants/common.constant'; +import { HOST_STATUS_DISPLAY, HOST_STATUS_INTERNAL } from '@/common/utils/constants/host.constant'; +import { MINGLAR_INVITATION_STATUS, MINGLAR_STATUS_DISPLAY, MINGLAR_STATUS_INTERNAL } from '@/common/utils/constants/minglar.constant'; import { Injectable } from '@nestjs/common'; +import { User } from '@prisma/client'; +import * as bcrypt from 'bcryptjs'; import { PrismaService } from '../../../common/database/prisma.service'; import ApiError from '../../../common/utils/helper/ApiError'; -import * as bcrypt from 'bcryptjs'; -import { z } from 'zod'; -import { hostCompanyDetailsSchema } from '../../../common/utils/validation/host/hostCompanyDetails.validation'; import { CreateMinglarDto, UpdateMinglarDto } from '../dto/minglar.dto'; -import { HostHeader, User } from '@prisma/client'; -import { ROLE } from '@/common/utils/constants/common.constant'; -import { MINGLAR_INVITATION_STATUS, MINGLAR_STATUS_DISPLAY, MINGLAR_STATUS_INTERNAL } from '@/common/utils/constants/minglar.constant'; -import { HOST_STATUS_DISPLAY, HOST_STATUS_INTERNAL } from '@/common/utils/constants/host.constant'; @Injectable() @@ -18,7 +16,7 @@ export class MinglarService { async createPassword(user_xid: number, password: string): Promise { // Find user by id const user = await this.prisma.user.findUnique({ - where: { id: user_xid }, + where: { id: user_xid, isActive: true, userStatus: USER_STATUS.INVITED }, select: { id: true, emailAddress: true, userPassword: true }, }); @@ -56,7 +54,7 @@ export class MinglarService { // Update user with hashed password await this.prisma.user.update({ where: { id: user.id }, - data: { userPassword: hashedPassword }, + data: { userPassword: hashedPassword, userStatus: USER_STATUS.ACTIVE, isEmailVerfied: true }, }); return true; @@ -133,7 +131,7 @@ export class MinglarService { async loginForMinglar(emailAddress: string, userPassword: string) { const existingUser = await this.prisma.user.findUnique({ - where: { emailAddress: emailAddress }, + where: { emailAddress: emailAddress, isActive: true }, }); if (!existingUser) { @@ -154,7 +152,7 @@ export class MinglarService { async checkUserExists(emailAddress: string) { return await this.prisma.user.findUnique({ - where: { emailAddress: emailAddress } + where: { emailAddress: emailAddress, isActive: true } }); } @@ -163,6 +161,7 @@ export class MinglarService { data: { emailAddress: emailAddress, roleXid: roleXid, + userStatus: USER_STATUS.INVITED } }); } @@ -334,6 +333,18 @@ export class MinglarService { percentage += 22.5; // Half if only one document } + const profilePercentage = Math.min(percentage, 100) + if (profilePercentage > 80) { + await this.prisma.user.update({ + where: { + id: userId + }, + data: { + isProfileUpdated: true + } + }) + } + return { user: { id: updatedUser.id,