diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6b5d92f..4c58f17 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -930,8 +930,10 @@ model EmployeeOtherInfo { } model Institution { - id String @id @default(cuid()) - name String + id String @id @default(cuid()) + code String + group String // Use for grouping, but not use relation + name String address String addressEN String diff --git a/src/controllers/04-institution-controller.ts b/src/controllers/04-institution-controller.ts index 0fd1f8c..27f1905 100644 --- a/src/controllers/04-institution-controller.ts +++ b/src/controllers/04-institution-controller.ts @@ -27,6 +27,8 @@ function globalAllow(user: RequestWithUser["user"]) { type InstitutionPayload = { name: string; + code: string; + addressEN: string; address: string; soi?: string | null; @@ -69,17 +71,34 @@ export class InstitutionController extends Controller { @Get("{institutionId}") @Security("keycloak") - async getInstitution(@Path() institutionId: string) { + async getInstitution(@Path() institutionId: string, @Query() group?: string) { return await prisma.institution.findFirst({ - where: { id: institutionId }, + where: { id: institutionId, group }, }); } @Post() @Security("keycloak") async createInstitution(@Body() body: InstitutionPayload) { - return await prisma.institution.create({ - data: body, + return await prisma.$transaction(async (tx) => { + const last = await tx.runningNo.upsert({ + where: { + key: `INST_${body.code}`, + }, + create: { + key: `INST_${body.code}`, + value: 1, + }, + update: { value: { increment: 1 } }, + }); + + return await tx.institution.create({ + data: { + ...body, + code: `${body.code}${last.value.toString().padStart(5, "0")}`, + group: body.code, + }, + }); }); }