import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, CreateDateColumn, UpdateDateColumn, } from 'typeorm'; import type { Relation } from 'typeorm'; import type { User } from '../../auth/entities/user.entity'; export enum TaskType { ASSIGNMENT = 'assignment', QUIZ = 'quiz', LAB = 'lab', STUDY = 'study', CUSTOM = 'custom', } export enum TaskPriority { LOW = 'low', MEDIUM = 'medium', HIGH = 'high', } export enum TaskStatus { PENDING = 'pending', IN_PROGRESS = 'in_progress', COMPLETED = 'completed', OVERDUE = 'overdue', } @Entity('student_tasks') export class StudentTask { @PrimaryGeneratedColumn({ name: 'task_id', type: 'bigint', unsigned: true }) taskId: number; @Column({ name: 'user_id', type: 'bigint', unsigned: true }) userId: number; @Column({ name: 'task_type', type: 'enum', enum: TaskType }) taskType: TaskType; @Column({ name: 'assignment_id', type: 'bigint', unsigned: true, nullable: true }) assignmentId: number | null; @Column({ name: 'quiz_id', type: 'bigint', unsigned: true, nullable: true }) quizId: number | null; @Column({ name: 'lab_id', type: 'bigint', unsigned: true, nullable: true }) labId: number | null; @Column({ name: 'title', type: 'varchar', length: 255 }) title: string; @Column({ name: 'description', type: 'text', nullable: true }) description: string | null; @Column({ name: 'due_date', type: 'timestamp', nullable: true }) dueDate: Date | null; @Column({ name: 'priority', type: 'enum', enum: TaskPriority, default: TaskPriority.MEDIUM }) priority: TaskPriority; @Column({ name: 'status', type: 'enum', enum: TaskStatus, default: TaskStatus.PENDING }) status: TaskStatus; @Column({ name: 'completion_percentage', type: 'int', default: 0 }) completionPercentage: number; @CreateDateColumn({ name: 'created_at', type: 'timestamp' }) createdAt: Date; @UpdateDateColumn({ name: 'updated_at', type: 'timestamp' }) updatedAt: Date; @ManyToOne('User') @JoinColumn({ name: 'user_id' }) user: Relation; }