diff --git a/src/entity/schedule_exceptions.ts b/src/entity/schedule_exceptions.ts new file mode 100644 index 0000000..52a376d --- /dev/null +++ b/src/entity/schedule_exceptions.ts @@ -0,0 +1,74 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + DeleteDateColumn, + ManyToOne, + JoinColumn, +} from "typeorm"; + +import { ScheduleSeries } from "./schedule_series"; +import { User } from "./users"; +import { Room } from "./room"; + +@Entity("schedule_exceptions") +export class ScheduleException { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "uuid" }) + series_id: string; + + @ManyToOne(() => ScheduleSeries, { onDelete: "CASCADE" }) + @JoinColumn({ name: "series_id" }) + series: ScheduleSeries; + + @Column({ type: "date", nullable: false }) + occurrence_date: Date; + + @Column({ type: "boolean", default: false }) + is_cancelled: boolean; + + @Column({ type: "uuid", nullable: true }) + override_room_id: string; + + @Column({ type: "uuid", nullable: true }) + override_doctor_id: string; + + @ManyToOne(() => Room, { onDelete: "SET NULL", nullable: true }) + @JoinColumn({ name: "override_room_id" }) + override_room: Room; + + @ManyToOne(() => User, { onDelete: "SET NULL", nullable: true }) + @JoinColumn({ name: "override_doctor_id" }) + override_doctor: User; + + @Column({ nullable: true, length: 256 }) + override_title: string; + + @Column({ type: "timestamptz", nullable: true }) + override_start_at: Date; + + @Column({ type: "timestamptz", nullable: true }) + override_end_at: Date; + + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @UpdateDateColumn() + 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/schedule_series.ts b/src/entity/schedule_series.ts new file mode 100644 index 0000000..4c2490e --- /dev/null +++ b/src/entity/schedule_series.ts @@ -0,0 +1,80 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + DeleteDateColumn, + ManyToOne, + JoinColumn, +} from "typeorm"; + +import { Status } from "../types/status"; +import { User } from "./users"; +import { Room } from "./room"; + +@Entity("schedule_series") +export class ScheduleSeries { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "uuid" }) + room_id: string; + + @Column({ type: "uuid" }) + doctor_id: string; + + @ManyToOne(() => Room, { onDelete: "NO ACTION" }) + @JoinColumn({ name: "room_id" }) + room: Room; + + @ManyToOne(() => User, { onDelete: "NO ACTION" }) + @JoinColumn({ name: "doctor_id" }) + doctor: User; + + @Column({ nullable: false, length: 256 }) + title: string; + + @Column({ nullable: false, length: 64 }) + timezone: string; + + @Column({ type: "date", nullable: false }) + start_date: Date; + + @Column({ type: "date", nullable: true }) + until_date: Date; + + @Column({ type: "time", nullable: false }) + start_time_local: string; + + @Column({ type: "time", nullable: false }) + end_time_local: string; + + @Column({ nullable: false, type: "text" }) + recurrence_rule: string; + + @Column({ + type: "enum", + enum: Status, + default: Status.Active, + }) + status: Status; + + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @UpdateDateColumn() + 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 8b92435..f4e696e 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/schedule_series" +export * from "../entity/schedule_exceptions" export * from "../entity/doctor_item" export * from "../entity/doctor_item_package" export * from "../entity/measurement_unit"