From 84a00c0d41eb175126f694e590e580efadac757a Mon Sep 17 00:00:00 2001 From: avicenan Date: Mon, 16 Feb 2026 17:24:01 +0700 Subject: [PATCH 1/5] add new entity: measurement_unit --- src/entity/measurement_unit.ts | 39 ++++++++++++++++++++++++++++++++++ src/schema/public.ts | 1 + 2 files changed, 40 insertions(+) create mode 100644 src/entity/measurement_unit.ts diff --git a/src/entity/measurement_unit.ts b/src/entity/measurement_unit.ts new file mode 100644 index 0000000..5316099 --- /dev/null +++ b/src/entity/measurement_unit.ts @@ -0,0 +1,39 @@ +import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from 'typeorm'; + +import { Status } from '../types/status'; + +@Entity('measurement_units') +export class MeasurementUnit { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ + nullable: false, + length: 256, + }) + unit: string; + + @Column({ + nullable: false, + length: 64, + }) + status: Status; + + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @UpdateDateColumn({ nullable: true }) + updated_at: Date; + + @Column({ nullable: true, length: 256 }) + updated_by: string; + + @DeleteDateColumn({ nullable: true }) + deleted_at: Date; + + @Column({ nullable: true, length: 256 }) + deleted_by: string; +} diff --git a/src/schema/public.ts b/src/schema/public.ts index a448c90..8e12c1b 100644 --- a/src/schema/public.ts +++ b/src/schema/public.ts @@ -20,6 +20,7 @@ export * from "../entity/service_fare" export * from "../entity/service_package" export * from "../entity/department" export * from "../entity/doctor_schedule" +export * from "../entity/measurement_unit" export * from "../types/action"; export * from "../types/error"; From 1f6b098b2bb80fec3f1e44ed5f951d9a74245bb5 Mon Sep 17 00:00:00 2001 From: avicenan Date: Wed, 18 Feb 2026 10:15:45 +0700 Subject: [PATCH 2/5] add new entity: reference_range and enum gender --- src/entity/reference_range.ts | 67 +++++++++++++++++++++++++++++++++++ src/enum/gender.ts | 4 +++ src/schema/public.ts | 1 + 3 files changed, 72 insertions(+) create mode 100644 src/entity/reference_range.ts create mode 100644 src/enum/gender.ts diff --git a/src/entity/reference_range.ts b/src/entity/reference_range.ts new file mode 100644 index 0000000..995d6e3 --- /dev/null +++ b/src/entity/reference_range.ts @@ -0,0 +1,67 @@ +import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from 'typeorm'; + +import { Status } from '../types/status'; +import { Gender } from '../enum/gender'; + +@Entity('reference_ranges') +export class ReferenceRange { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ + type: 'enum', + enum: Gender, + nullable: true, + }) + gender: Gender; + + @Column({ + nullable: false, + length: 128, + default: '0 day', + }) + age_range_min: string; + + @Column({ + nullable: false, + length: 128, + default: '999 years', + }) + age_range_max: string; + + @Column({ + nullable: false, + length: 256, + }) + value_min: string; + + @Column({ + nullable: false, + length: 256, + }) + value_max: string; + + @Column({ + nullable: false, + length: 64, + }) + status: Status; + + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @UpdateDateColumn({ nullable: true }) + updated_at: Date; + + @Column({ nullable: true, length: 256 }) + updated_by: string; + + @DeleteDateColumn({ nullable: true }) + deleted_at: Date; + + @Column({ nullable: true, length: 256 }) + deleted_by: string; +} diff --git a/src/enum/gender.ts b/src/enum/gender.ts new file mode 100644 index 0000000..f6428fd --- /dev/null +++ b/src/enum/gender.ts @@ -0,0 +1,4 @@ +export enum Gender { + male = 'male', + female = 'female', +} diff --git a/src/schema/public.ts b/src/schema/public.ts index 8e12c1b..f8244bb 100644 --- a/src/schema/public.ts +++ b/src/schema/public.ts @@ -21,6 +21,7 @@ export * from "../entity/service_package" export * from "../entity/department" export * from "../entity/doctor_schedule" export * from "../entity/measurement_unit" +export * from "../entity/reference_range" export * from "../types/action"; export * from "../types/error"; From 4a453afe16de85fc09bf2c5d8917a1325517a1e9 Mon Sep 17 00:00:00 2001 From: avicenan Date: Wed, 18 Feb 2026 11:45:03 +0700 Subject: [PATCH 3/5] add new entity: queue monitoring --- src/entity/queue_monitoring.ts | 57 ++++++++++++++++++++++++++++++++++ src/schema/public.ts | 1 + 2 files changed, 58 insertions(+) create mode 100644 src/entity/queue_monitoring.ts diff --git a/src/entity/queue_monitoring.ts b/src/entity/queue_monitoring.ts new file mode 100644 index 0000000..25e47ae --- /dev/null +++ b/src/entity/queue_monitoring.ts @@ -0,0 +1,57 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + DeleteDateColumn, + ManyToMany, + JoinTable, +} from 'typeorm'; + +import { Status } from '../types/status'; +import { Room } from './room'; + +@Entity('queue_monitorings') +export class QueueMonitoring { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ + type: 'text', + nullable: false, + }) + slug: string; + + @ManyToMany(() => Room, { onDelete: 'NO ACTION' }) + @JoinTable({ + name: 'queue_monitoring_rooms', + joinColumn: { name: 'queue_monitoring_id', referencedColumnName: 'id' }, + inverseJoinColumn: { name: 'room_id', referencedColumnName: 'id' }, + }) + rooms: Room[]; + + @Column({ + nullable: false, + length: 64, + }) + status: Status; + + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @UpdateDateColumn({ nullable: true }) + updated_at: Date; + + @Column({ nullable: true, length: 256 }) + updated_by: string; + + @DeleteDateColumn({ nullable: true }) + deleted_at: Date; + + @Column({ nullable: true, length: 256 }) + deleted_by: string; +} diff --git a/src/schema/public.ts b/src/schema/public.ts index f8244bb..16da3d2 100644 --- a/src/schema/public.ts +++ b/src/schema/public.ts @@ -22,6 +22,7 @@ export * from "../entity/department" export * from "../entity/doctor_schedule" export * from "../entity/measurement_unit" export * from "../entity/reference_range" +export * from "../entity/queue_monitoring" export * from "../types/action"; export * from "../types/error"; From ec9f714d81fd11da1b4ef0ab5c155c61721b24c4 Mon Sep 17 00:00:00 2001 From: avicenan Date: Wed, 18 Feb 2026 13:53:01 +0700 Subject: [PATCH 4/5] add new entity: examination_detail and examination_type --- src/entity/examination_detail.ts | 64 ++++++++++++++++++++++++++++++++ src/entity/examination_type.ts | 57 ++++++++++++++++++++++++++++ src/schema/public.ts | 2 + 3 files changed, 123 insertions(+) create mode 100644 src/entity/examination_detail.ts create mode 100644 src/entity/examination_type.ts diff --git a/src/entity/examination_detail.ts b/src/entity/examination_detail.ts new file mode 100644 index 0000000..a285cdb --- /dev/null +++ b/src/entity/examination_detail.ts @@ -0,0 +1,64 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + DeleteDateColumn, + ManyToOne, + JoinColumn, +} from 'typeorm'; + +import { Status } from '../types/status'; +import { MeasurementUnit } from './measurement_unit'; +import { ReferenceRange } from './reference_range'; + +@Entity('examination_details') +export class ExaminationDetail { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ + type: 'text', + nullable: false, + }) + name: string; + + @Column({ + type: 'text', + nullable: false, + }) + order_no: string; + + @ManyToOne(() => MeasurementUnit, { onDelete: 'NO ACTION', nullable: false }) + @JoinColumn() + measurement_unit: MeasurementUnit; + + @ManyToOne(() => ReferenceRange, { onDelete: 'NO ACTION', nullable: false }) + @JoinColumn() + reference_range: ReferenceRange; + + @Column({ + nullable: false, + length: 64, + }) + status: Status; + + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @UpdateDateColumn({ nullable: true }) + updated_at: Date; + + @Column({ nullable: true, length: 256 }) + updated_by: string; + + @DeleteDateColumn({ nullable: true }) + deleted_at: Date; + + @Column({ nullable: true, length: 256 }) + deleted_by: string; +} diff --git a/src/entity/examination_type.ts b/src/entity/examination_type.ts new file mode 100644 index 0000000..cec944c --- /dev/null +++ b/src/entity/examination_type.ts @@ -0,0 +1,57 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + DeleteDateColumn, + ManyToMany, + JoinTable, +} from 'typeorm'; + +import { Status } from '../types/status'; +import { Service } from './service'; + +@Entity('examination_types') +export class ExaminationType { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ + type: 'text', + nullable: false, + }) + name: string; + + @Column({ + nullable: false, + length: 64, + }) + status: Status; + + @ManyToMany(() => Service, { onDelete: 'NO ACTION' }) + @JoinTable({ + name: 'examination_type_services', + joinColumn: { name: 'examination_type_id', referencedColumnName: 'id' }, + inverseJoinColumn: { name: 'service_id', referencedColumnName: 'id' }, + }) + services: Service[]; + + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @UpdateDateColumn({ nullable: true }) + updated_at: Date; + + @Column({ nullable: true, length: 256 }) + updated_by: string; + + @DeleteDateColumn({ nullable: true }) + deleted_at: Date; + + @Column({ nullable: true, length: 256 }) + deleted_by: string; +} diff --git a/src/schema/public.ts b/src/schema/public.ts index 16da3d2..b0a69c2 100644 --- a/src/schema/public.ts +++ b/src/schema/public.ts @@ -23,6 +23,8 @@ export * from "../entity/doctor_schedule" export * from "../entity/measurement_unit" export * from "../entity/reference_range" export * from "../entity/queue_monitoring" +export * from "../entity/examination_detail" +export * from "../entity/examination_type" export * from "../types/action"; export * from "../types/error"; From 30d8a45cf8630b63f0bb230c8e543a58265b3262 Mon Sep 17 00:00:00 2001 From: avicenan Date: Wed, 18 Feb 2026 14:33:44 +0700 Subject: [PATCH 5/5] upd entity service: examination_details --- src/entity/service.ts | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/entity/service.ts b/src/entity/service.ts index d5a712b..4d1accd 100644 --- a/src/entity/service.ts +++ b/src/entity/service.ts @@ -13,6 +13,7 @@ import { import { ServiceType } from './service_type'; import { Room } from './room'; +import { ExaminationDetail } from './examination_detail'; @Entity('services') export class Service { @@ -29,17 +30,25 @@ export class Service { @JoinColumn() serviceType: ServiceType; - @ManyToMany(() => Room, (room) => room.services) - @JoinTable({ - name: 'service_rooms', - joinColumn: { name: 'service_id', referencedColumnName: 'id' }, - inverseJoinColumn: { name: 'room_id', referencedColumnName: 'id' }, - }) - rooms: Room[]; + @ManyToMany(() => Room, (room) => room.services) + @JoinTable({ + name: 'service_rooms', + joinColumn: { name: 'service_id', referencedColumnName: 'id' }, + inverseJoinColumn: { name: 'room_id', referencedColumnName: 'id' }, + }) + rooms: Room[]; - @Column() - @CreateDateColumn() - created_at: Date; + @ManyToMany(() => ExaminationDetail, { onDelete: 'NO ACTION' }) + @JoinTable({ + name: 'service_examinations', + joinColumn: { name: 'service_id', referencedColumnName: 'id' }, + inverseJoinColumn: { name: 'examination_detail_id', referencedColumnName: 'id' }, + }) + examination_details: ExaminationDetail[]; + + @Column() + @CreateDateColumn() + created_at: Date; @Column({ nullable: true, length: 256 }) created_by: string;