added some columns and fixed some code issues
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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 },
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user