feat: add medical test entities

This commit is contained in:
2026-05-23 11:02:20 +03:30
parent 7186af8e7f
commit 7dda2564a8
32 changed files with 389 additions and 11 deletions
@@ -0,0 +1,31 @@
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
import { Submission } from './submission.entity';
import { Question } from '@/modules/questions/entities/question.entity';
import { Choice } from '@/modules/questions/entities/choice.entity';
@Entity()
export class SubmissionAnswer {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => Submission, (submission) => submission.answers, {
onDelete: 'CASCADE',
})
submission: Submission;
@ManyToOne(() => Question, { onDelete: 'CASCADE' })
question: Question;
@ManyToOne(() => Choice, { nullable: true, onDelete: 'CASCADE' })
choice?: Choice;
@Column({ type: 'int', nullable: true })
numericValue?: number;
@Column({
type: 'varchar',
length: 255,
nullable: true,
})
textValue?: string;
}
@@ -0,0 +1,32 @@
import {
Check,
Column,
CreateDateColumn,
Entity,
ManyToOne,
PrimaryGeneratedColumn,
} from 'typeorm';
import { Submission } from './submission.entity';
import { ResultRange } from '@/modules/scoring/entities/result-range.entity';
@Entity()
@Check(`"probability" >= 0 AND "probability" <= 100`)
export class SubmissionResult {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => Submission, { onDelete: 'CASCADE' })
submission: Submission;
@Column({ type: 'int', nullable: false })
score: number;
@Column({ type: 'int', nullable: false })
probability: number;
@ManyToOne(() => ResultRange, { onDelete: 'CASCADE' })
resultRange: ResultRange;
@CreateDateColumn()
createdAt: Date;
}
@@ -0,0 +1,37 @@
import { Test } from '@/modules/tests/entities/test.entity';
import { User } from '@/modules/users/entities/user.entity';
import {
Column,
CreateDateColumn,
Entity,
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
} from 'typeorm';
import { SubmissionStatus } from '../enums/submission-status.enum';
import { SubmissionAnswer } from './submission-answer.entity';
@Entity()
export class Submission {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => User, { nullable: true, onDelete: 'SET NULL' })
user?: User;
@ManyToOne(() => Test, { onDelete: 'CASCADE' })
test: Test;
@Column({
type: 'enum',
enum: SubmissionStatus,
default: SubmissionStatus.IN_PROGRESS,
})
status: SubmissionStatus;
@OneToMany(() => SubmissionAnswer, (answer) => answer.submission)
answers: Array<SubmissionAnswer>;
@CreateDateColumn()
createdAt: Date;
}
@@ -0,0 +1,4 @@
export enum SubmissionStatus {
IN_PROGRESS = 'in-progress',
COMPLETED = 'completed',
}
@@ -0,0 +1,12 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Submission } from './entities/submission.entity';
import { SubmissionAnswer } from './entities/submission-answer.entity';
import { SubmissionResult } from './entities/submission-result.entity';
@Module({
imports: [
TypeOrmModule.forFeature([Submission, SubmissionAnswer, SubmissionResult]),
],
})
export class SubmissionsModule {}