diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 2e1eaa6..a6994e7 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -29,6 +29,7 @@ model User { isEmailVerfied Boolean? @default(false) @map("is_email_verified") isMobileVerfied Boolean? @default(false) @map("is_mobile_verified") isProfileUpdated Boolean? @default(false) @map("is_profile_updated") + userRefNumber String? @map("user_ref_number") @db.VarChar(20) isActive Boolean? @default(true) @map("is_active") createdAt DateTime? @default(now()) @map("created_at") updatedAt DateTime? @updatedAt @map("updated_at") diff --git a/src/modules/host/handlers/Host_Admin/onboarding/signUp.ts b/src/modules/host/handlers/Host_Admin/onboarding/signUp.ts index 178a893..de4d8a6 100644 --- a/src/modules/host/handlers/Host_Admin/onboarding/signUp.ts +++ b/src/modules/host/handlers/Host_Admin/onboarding/signUp.ts @@ -12,6 +12,21 @@ import { ROLE } from '../../../../../common/utils/constants/common.constant'; const prismaService = new PrismaService(); const hostService = new HostService(prismaService); +export async function generateHostRefNumber(tx: any) { + const lastrecord = await tx.user.findFirst({ + orderBy: { + id: 'desc', + }, + select: { + id: true, + }, + }); + + const nextId = lastrecord ? lastrecord.id + 1 : 1; + + return `HS-${String(nextId).padStart(6, '0')}`;; +} + export const handler = safeHandler(async ( event: APIGatewayProxyEvent, context?: Context @@ -44,13 +59,15 @@ export const handler = safeHandler(async ( let newUserLocal; + const referenceNumber = await generateHostRefNumber(tx); + if (user && !user.userPassword) { // reuse existing invited user record newUserLocal = user; } else { // create new user record within the transaction newUserLocal = await tx.user.create({ - data: { emailAddress: email, roleXid: ROLE.HOST }, + data: { emailAddress: email, roleXid: ROLE.HOST, userRefNumber: referenceNumber }, }); } diff --git a/src/modules/minglaradmin/services/minglar.service.ts b/src/modules/minglaradmin/services/minglar.service.ts index db60eaf..d325923 100644 --- a/src/modules/minglaradmin/services/minglar.service.ts +++ b/src/modules/minglaradmin/services/minglar.service.ts @@ -86,6 +86,28 @@ export class MinglarService { return true; } + async generateHostRefNumber(tx: any, role_xid: number) { + const lastrecord = await tx.user.findFirst({ + orderBy: { + id: 'desc', + }, + select: { + id: true, + }, + }); + let referenceId = ''; + + const nextId = lastrecord ? lastrecord.id + 1 : 1; + + if (role_xid === ROLE.ACCOUNT_MANAGER) { + referenceId = `AM-${String(nextId).padStart(6, '0')}`; + } else if (role_xid === ROLE.CO_ADMIN) { + referenceId = `CA-${String(nextId).padStart(6, '0')}`; + } + + return referenceId; + } + async createHost(data: CreateMinglarDto) { return this.prisma.user.create({ data }); } @@ -337,12 +359,15 @@ export class MinglarService { throw new ApiError(400, 'User already exists.'); } + const referenceNumber = await this.generateHostRefNumber(tx, roleXid); + // Create user with INVITED status const user = await tx.user.create({ data: { emailAddress: emailAddress, roleXid: roleXid, userStatus: USER_STATUS.INVITED, + userRefNumber: referenceNumber }, });