added some columns and fixed some code issues

This commit is contained in:
2025-11-20 16:26:48 +05:30
parent 6bbcb36b10
commit e7234c29ad
5 changed files with 48 additions and 41 deletions

View File

@@ -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")

View File

@@ -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"
}

View File

@@ -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);

View File

@@ -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 },
});

View File

@@ -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<boolean> {
// 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,