From b89bea7261b5a761ee6fbc4338d3a339eff41e7e Mon Sep 17 00:00:00 2001 From: avicenan Date: Mon, 16 Mar 2026 16:32:40 +0700 Subject: [PATCH] feat(db): add doctor favorite and item package entities --- src/entity/doctor_favorite_item.ts | 41 ++++++++++++++++++++++ src/entity/doctor_item_package.ts | 56 ++++++++++++++++++++++++++++++ src/schema/public.ts | 2 ++ 3 files changed, 99 insertions(+) create mode 100644 src/entity/doctor_favorite_item.ts create mode 100644 src/entity/doctor_item_package.ts diff --git a/src/entity/doctor_favorite_item.ts b/src/entity/doctor_favorite_item.ts new file mode 100644 index 0000000..db37746 --- /dev/null +++ b/src/entity/doctor_favorite_item.ts @@ -0,0 +1,41 @@ +import { + Entity, + PrimaryGeneratedColumn, + ManyToOne, + JoinColumn, + CreateDateColumn, + UpdateDateColumn, + DeleteDateColumn, + Column, + Index, +} from "typeorm"; + +import { User } from "./users"; +import { ItemMaster } from "./pharmacy/item_master"; + +@Entity("doctor_favorite_item") +@Index(["doctor", "item_master"], { unique: true }) +export class DoctorFavoriteItem { + @PrimaryGeneratedColumn("uuid") + id!: string; + + @ManyToOne(() => User, { nullable: false, onDelete: "CASCADE" }) + @JoinColumn({ name: "doctor_id" }) + doctor!: User; + + @ManyToOne(() => ItemMaster, { nullable: false, onDelete: "CASCADE" }) + @JoinColumn({ name: "item_master_id" }) + item_master!: ItemMaster; + + @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; +} diff --git a/src/entity/doctor_item_package.ts b/src/entity/doctor_item_package.ts new file mode 100644 index 0000000..722cde4 --- /dev/null +++ b/src/entity/doctor_item_package.ts @@ -0,0 +1,56 @@ +import { + Entity, + PrimaryGeneratedColumn, + ManyToOne, + JoinColumn, + ManyToMany, + JoinTable, + CreateDateColumn, + UpdateDateColumn, + DeleteDateColumn, + Column, + Index, +} from "typeorm"; + +import { User } from "./users"; +import { ItemMaster } from "./pharmacy/item_master"; + +@Entity("doctor_item_package") +@Index(["doctor", "name"], { unique: true }) +export class DoctorItemPackage { + @PrimaryGeneratedColumn("uuid") + id!: string; + + @ManyToOne(() => User, { nullable: false, onDelete: "CASCADE" }) + @JoinColumn({ name: "doctor_id" }) + doctor!: User; + + @Column({ type: "text", nullable: false }) + name!: string; + + @Column({ type: "text", nullable: true }) + description?: string; + + @ManyToMany(() => ItemMaster) + @JoinTable({ + name: "doctor_item_package_items", + joinColumn: { name: "doctor_item_package_id", referencedColumnName: "id" }, + inverseJoinColumn: { name: "item_master_id", referencedColumnName: "id" }, + }) + items!: ItemMaster[]; + + @Column({ type: "boolean", default: true }) + active!: boolean; + + @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; +} diff --git a/src/schema/public.ts b/src/schema/public.ts index 3c84b9a..18655b7 100644 --- a/src/schema/public.ts +++ b/src/schema/public.ts @@ -20,6 +20,8 @@ export * from "../entity/service_fare" export * from "../entity/service_package" export * from "../entity/department" export * from "../entity/doctor_schedule" +export * from "../entity/doctor_favorite_item" +export * from "../entity/doctor_item_package" export * from "../entity/measurement_unit" export * from "../entity/reference_range" export * from "../entity/queue_monitoring"