54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
import { Test } from '@/modules/tests/entities/test.entity';
|
|
import { User } from '@/modules/users/entities/user.entity';
|
|
import {
|
|
Column,
|
|
CreateDateColumn,
|
|
Entity,
|
|
ManyToOne,
|
|
OneToMany,
|
|
OneToOne,
|
|
PrimaryGeneratedColumn,
|
|
BaseEntity,
|
|
} from 'typeorm';
|
|
import { SubmissionStatus } from '../enums/submission-status.enum';
|
|
import { SubmissionAnswer } from './submission-answer.entity';
|
|
import { SubmissionResult } from './submission-result.entity';
|
|
import { Question } from '@/modules/questions/entities/question.entity';
|
|
|
|
@Entity()
|
|
export class Submission extends BaseEntity {
|
|
@PrimaryGeneratedColumn()
|
|
id!: number;
|
|
|
|
@Column({ type: 'varchar', nullable: true })
|
|
code!: string;
|
|
|
|
@ManyToOne(() => User, { onDelete: 'CASCADE' })
|
|
user!: User;
|
|
|
|
@ManyToOne(() => Test, { onDelete: 'CASCADE' })
|
|
test!: Test;
|
|
|
|
@Column({
|
|
type: 'enum',
|
|
enum: SubmissionStatus,
|
|
default: SubmissionStatus.IN_PROGRESS,
|
|
})
|
|
status!: SubmissionStatus;
|
|
|
|
@ManyToOne(() => Question, { onDelete: 'SET NULL', nullable: true })
|
|
currentQuestion!: Question | null;
|
|
|
|
@OneToMany(() => SubmissionAnswer, (answer) => answer.submission)
|
|
answers!: Array<SubmissionAnswer>;
|
|
|
|
@OneToOne(() => SubmissionResult, (result) => result.submission)
|
|
result?: SubmissionResult;
|
|
|
|
@CreateDateColumn()
|
|
createdAt!: Date;
|
|
|
|
@Column({ type: 'timestamptz', nullable: true })
|
|
completedAt?: Date;
|
|
}
|