From ffb1ce2d40fc581c83473820af2a6729916032b7 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Thu, 24 Apr 2025 17:55:18 +0700 Subject: [PATCH] feat: allow multiple import nationality for user --- prisma/schema.prisma | 10 +++++++++- src/controllers/02-user-controller.ts | 21 ++++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index bc100b5..ab19cb5 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -366,6 +366,14 @@ enum UserType { AGENCY } +model UserImportNationality { + id String @id @default(cuid()) + name String + + user User @relation(fields: [userId], references: [id]) + userId String +} + model User { id String @id @default(cuid()) @@ -424,7 +432,7 @@ model User { licenseExpireDate DateTime? @db.Date sourceNationality String? - importNationality String? + importNationality UserImportNationality[] trainingPlace String? responsibleArea UserResponsibleArea[] diff --git a/src/controllers/02-user-controller.ts b/src/controllers/02-user-controller.ts index f11255b..2c864e6 100644 --- a/src/controllers/02-user-controller.ts +++ b/src/controllers/02-user-controller.ts @@ -99,7 +99,7 @@ type UserCreate = { licenseIssueDate?: Date | null; licenseExpireDate?: Date | null; sourceNationality?: string | null; - importNationality?: string | null; + importNationality?: string[] | null; trainingPlace?: string | null; responsibleArea?: string[] | null; birthDate?: Date | null; @@ -161,7 +161,7 @@ type UserUpdate = { licenseIssueDate?: Date | null; licenseExpireDate?: Date | null; sourceNationality?: string | null; - importNationality?: string | null; + importNationality?: string[] | null; trainingPlace?: string | null; responsibleArea?: string[] | null; birthDate?: Date | null; @@ -383,6 +383,7 @@ export class UserController extends Controller { prisma.user.findMany({ orderBy: [{ statusOrder: "asc" }, { createdAt: "asc" }], include: { + importNationality: true, responsibleArea: true, province: true, district: true, @@ -401,6 +402,7 @@ export class UserController extends Controller { return { result: result.map((v) => ({ ...v, + importNationality: v.importNationality.map((v) => v.name), responsibleArea: v.responsibleArea.map((v) => v.area), branch: includeBranch ? v.branch.map((a) => a.branch) : undefined, })), @@ -415,6 +417,7 @@ export class UserController extends Controller { async getUserById(@Path() userId: string) { const record = await prisma.user.findFirst({ include: { + importNationality: true, province: true, district: true, subDistrict: true, @@ -426,7 +429,11 @@ export class UserController extends Controller { if (!record) throw notFoundError("User"); - return record; + const { importNationality, ...rest } = record; + + return Object.assign(rest, { + importNationality: importNationality.map((v) => v.name), + }); } @Post() @@ -528,6 +535,9 @@ export class UserController extends Controller { create: rest.responsibleArea.map((v) => ({ area: v })), } : undefined, + importNationality: { + createMany: { data: rest.importNationality?.map((v) => ({ name: v })) || [] }, + }, statusOrder: +(rest.status === "INACTIVE"), username, userRole: role.name, @@ -683,6 +693,7 @@ export class UserController extends Controller { const record = await prisma.user.update({ include: { + importNationality: true, province: true, district: true, subDistrict: true, @@ -697,6 +708,10 @@ export class UserController extends Controller { create: rest.responsibleArea.map((v) => ({ area: v })), } : undefined, + importNationality: { + deleteMany: {}, + createMany: { data: rest.importNationality?.map((v) => ({ name: v })) || [] }, + }, statusOrder: +(rest.status === "INACTIVE"), userRole, province: connectOrDisconnect(provinceId),