eduverse-backend / src /modules /assignments /entities /assignment.entity.ts
Awab-Elsadig's picture
fix(database): normalize FK column types for refactored schema sync
fcab6da
Raw
History Blame Contribute Delete
3.1 kB
import {
Entity,
PrimaryGeneratedColumn,
Column,
ManyToOne,
OneToMany,
JoinColumn,
CreateDateColumn,
UpdateDateColumn,
Index,
} from 'typeorm';
import type { Relation } from 'typeorm';
import { SubmissionType, AssignmentStatus } from '../enums';
import type { Course } from '../../courses/entities/course.entity';
import type { User } from '../../auth/entities/user.entity';
import type { AssignmentSubmission } from './assignment-submission.entity';
@Entity('assignments')
@Index(['courseId'])
@Index(['createdBy'])
@Index(['status'])
export class Assignment {
@PrimaryGeneratedColumn('increment', {
name: 'assignment_id',
type: 'bigint',
unsigned: true,
})
id: number;
@Column({
type: 'bigint',
unsigned: true,
nullable: false,
name: 'course_id',
})
courseId: number;
@Column({
type: 'varchar',
length: 255,
nullable: false,
name: 'title',
})
title: string;
@Column({
type: 'text',
nullable: true,
name: 'description',
})
description: string | null;
@Column({
type: 'text',
nullable: true,
name: 'instructions',
})
instructions: string | null;
@Column({
type: 'decimal',
precision: 5,
scale: 2,
default: 100.0,
name: 'max_score',
})
maxScore: number;
@Column({
type: 'decimal',
precision: 5,
scale: 2,
default: 0.0,
name: 'weight',
})
weight: number;
@Column({
type: 'timestamp',
nullable: true,
name: 'due_date',
})
dueDate: Date | null;
@Column({
type: 'timestamp',
nullable: true,
name: 'available_from',
})
availableFrom: Date | null;
@Column({
type: 'tinyint',
width: 1,
default: 0,
name: 'late_submission_allowed',
})
lateSubmissionAllowed: number;
@Column({
type: 'decimal',
precision: 5,
scale: 2,
default: 0.0,
name: 'late_penalty_percent',
})
latePenaltyPercent: number;
@Column({
type: 'enum',
enum: SubmissionType,
default: SubmissionType.FILE,
name: 'submission_type',
})
submissionType: SubmissionType;
@Column({
type: 'int',
default: 10,
name: 'max_file_size_mb',
})
maxFileSizeMb: number;
@Column({
type: 'longtext',
nullable: true,
name: 'allowed_file_types',
})
allowedFileTypes: string | null;
@Column({
type: 'enum',
enum: AssignmentStatus,
default: AssignmentStatus.DRAFT,
name: 'status',
})
status: AssignmentStatus;
@Column({
type: 'bigint',
unsigned: true,
nullable: false,
name: 'created_by',
})
createdBy: number;
@CreateDateColumn({
name: 'created_at',
})
createdAt: Date;
@UpdateDateColumn({
name: 'updated_at',
})
updatedAt: Date;
@ManyToOne('Course', {
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'course_id' })
course: Relation<Course>;
@ManyToOne('User', {
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'created_by' })
creator: Relation<User>;
@OneToMany('AssignmentSubmission', 'assignment')
submissions: Relation<AssignmentSubmission>[];
}