feat: change answer submission logic

This commit is contained in:
2026-08-09 17:12:55 +03:30
parent b4343bdb53
commit 0c82d3426b
9 changed files with 224 additions and 72 deletions
@@ -0,0 +1,61 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class SubmissionCurrentQuestion1786282238898 implements MigrationInterface {
name = 'SubmissionCurrentQuestion1786282238898';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP INDEX "public"."unq_test_start"`);
await queryRunner.query(`DROP INDEX "public"."unq_question_end"`);
await queryRunner.query(`DROP INDEX "public"."unq_question_default"`);
await queryRunner.query(`DROP INDEX "public"."unq_question_choice"`);
await queryRunner.query(`DROP INDEX "public"."unq_question_number_range"`);
await queryRunner.query(
`ALTER TABLE "question_transition" DROP CONSTRAINT "ex_question_number_range_overlap"`,
);
await queryRunner.query(
`ALTER TABLE "submission" RENAME COLUMN "currentQuestionOrder" TO "currentQuestionId"`,
);
await queryRunner.query(
`ALTER TABLE "submission" ALTER COLUMN "currentQuestionId" DROP NOT NULL`,
);
await queryRunner.query(
`ALTER TABLE "submission" ALTER COLUMN "currentQuestionId" DROP DEFAULT`,
);
await queryRunner.query(
`ALTER TABLE "submission" ADD CONSTRAINT "FK_71b22c49b79a4eb32e9b1f05c76" FOREIGN KEY ("currentQuestionId") REFERENCES "question"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "submission" DROP CONSTRAINT "FK_71b22c49b79a4eb32e9b1f05c76"`,
);
await queryRunner.query(
`ALTER TABLE "submission" ALTER COLUMN "currentQuestionId" SET DEFAULT '1'`,
);
await queryRunner.query(
`ALTER TABLE "submission" ALTER COLUMN "currentQuestionId" SET NOT NULL`,
);
await queryRunner.query(
`ALTER TABLE "submission" RENAME COLUMN "currentQuestionId" TO "currentQuestionOrder"`,
);
await queryRunner.query(
`ALTER TABLE "question_transition" ADD CONSTRAINT "ex_question_number_range_overlap" EXCLUDE USING gist ("fromQuestionId" WITH =, int4range(((condition ->> 'min'::text))::integer, ((condition ->> 'max'::text))::integer, '[]'::text) WITH &&) WHERE ((type = 'number-range'::question_transition_type_enum))`,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "unq_question_number_range" ON "question_transition" ("fromQuestionId") WHERE (type = 'number-range'::question_transition_type_enum)`,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "unq_question_choice" ON "question_transition" ("fromQuestionId") WHERE (type = 'choice'::question_transition_type_enum)`,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "unq_question_default" ON "question_transition" ("fromQuestionId") WHERE (type = 'default'::question_transition_type_enum)`,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "unq_question_end" ON "question_transition" ("fromQuestionId") WHERE (type = 'end'::question_transition_type_enum)`,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "unq_test_start" ON "question_transition" ("testId") WHERE (type = 'start'::question_transition_type_enum)`,
);
}
}