From 78320b8682f444166f8f5821c3f7572bdb81e64d Mon Sep 17 00:00:00 2001 From: wangziqi Date: Sun, 5 Jul 2026 19:18:31 +0800 Subject: [PATCH] feat: add ClassSchedule entity --- .../src/entities/class-schedule.entity.ts | 82 +++++++++++++++++++ apps/server/src/entities/index.ts | 1 + 2 files changed, 83 insertions(+) create mode 100644 apps/server/src/entities/class-schedule.entity.ts diff --git a/apps/server/src/entities/class-schedule.entity.ts b/apps/server/src/entities/class-schedule.entity.ts new file mode 100644 index 0000000..36e7417 --- /dev/null +++ b/apps/server/src/entities/class-schedule.entity.ts @@ -0,0 +1,82 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + ManyToOne, + JoinColumn, + Check, +} from 'typeorm'; + +export enum ScheduleType { + INTERNAL = 'INTERNAL', + RENTAL = 'RENTAL', +} + +@Entity('class_schedule') +@Check('week_day BETWEEN 1 AND 7') +export class ClassSchedule { + @PrimaryGeneratedColumn() + id: number; + + @Column({ name: 'class_id', type: 'integer' }) + classId: number; + + // Forward reference — Class entity + @ManyToOne('Class') + @JoinColumn({ name: 'class_id' }) + class: unknown; + + @Column({ name: 'classroom_id', type: 'integer' }) + classroomId: number; + + // Forward reference — Classroom entity + @ManyToOne('Classroom') + @JoinColumn({ name: 'classroom_id' }) + classroom: unknown; + + @Column({ name: 'week_day', type: 'integer' }) + weekDay: number; + + @Column({ name: 'start_time', length: 5 }) + startTime: string; + + @Column({ name: 'end_time', length: 5 }) + endTime: string; + + @Column({ name: 'start_date', type: 'date' }) + startDate: string; + + @Column({ name: 'end_date', type: 'date' }) + endDate: string; + + @Column({ name: 'subject', length: 50 }) + subject: string; + + @Column({ name: 'teacher_id', type: 'integer', nullable: true }) + teacherId: number; + + // Forward reference — User entity + @ManyToOne('User', { nullable: true }) + @JoinColumn({ name: 'teacher_id' }) + teacher: unknown; + + @Column({ name: 'schedule_type', length: 20, default: 'INTERNAL' }) + scheduleType: string; + + @Column({ name: 'rental_id', type: 'integer', nullable: true }) + rentalId: number; + + @Column({ name: 'status', length: 20, default: 'active' }) + status: string; + + @Column({ name: 'notes', type: 'text', nullable: true }) + notes: string; + + @CreateDateColumn({ name: 'created_at' }) + createdAt: Date; + + @UpdateDateColumn({ name: 'updated_at' }) + updatedAt: Date; +} diff --git a/apps/server/src/entities/index.ts b/apps/server/src/entities/index.ts index 872b79f..dacefa4 100644 --- a/apps/server/src/entities/index.ts +++ b/apps/server/src/entities/index.ts @@ -16,3 +16,4 @@ export { Role } from './role.entity'; export { Class, ClassType, ClassStatus } from './class.entity'; export { ClassStudent } from './class-student.entity'; export { ClassTeacher, TeacherRoleType } from './class-teacher.entity'; +export { ClassSchedule, ScheduleType } from './class-schedule.entity';