feat(schedule): add series and exception entities

This commit is contained in:
avicenan
2026-03-24 20:16:52 +07:00
parent a2864b2386
commit 972324aa43
3 changed files with 156 additions and 0 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -20,6 +20,8 @@ export * from "../entity/service_fare"
export * from "../entity/service_package" export * from "../entity/service_package"
export * from "../entity/department" export * from "../entity/department"
export * from "../entity/doctor_schedule" 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"
export * from "../entity/doctor_item_package" export * from "../entity/doctor_item_package"
export * from "../entity/measurement_unit" export * from "../entity/measurement_unit"