Phase 2+5: lab submissions and student lab flow

- progress: submissions table+V4; SubmissionService (deadline-gated submit,
  unlimited resubmits, per-student history, zip download); files on disk
  data/submissions/{student}/{lab}/{seq}/
- student API: POST submit (multipart), GET me submissions, download; admin
  GET lab submissions + admin download (zip pack)
- progress enrich(): labId in MeAssignment; web DTO aligned
- web: /student dashboard (avg/best/worst cards), /student/labs cards,
  /student/labs/{id}: condition md, variant block, submit form, history;
  'Лабораторные' link in nav for students
- admin: submissions column on lab assignment table + download link
- fixed long-standing template bug: broken @{} expression (missing }) in
  admin/lab and student/lab
This commit is contained in:
2026-09-12 00:20:46 +03:00
parent eb55f47f47
commit e1da254599
21 changed files with 628 additions and 49 deletions

View File

@@ -3,6 +3,10 @@ server:
spring:
application:
name: progress-service
servlet:
multipart:
max-file-size: 30MB
max-request-size: 120MB
datasource:
url: ${LMS_DB_URL:jdbc:postgresql://localhost:5432/lms?currentSchema=progress}
username: ${LMS_DB_USER:lms}

View File

@@ -0,0 +1,12 @@
-- Lab submissions: files stored on disk, one row per submission attempt.
CREATE TABLE submissions (
id uuid PRIMARY KEY DEFAULT uuidv7(),
student_id uuid NOT NULL,
lab_id uuid NOT NULL,
seq integer NOT NULL,
created_at timestamptz NOT NULL DEFAULT now(),
CONSTRAINT submissions_seq_unique UNIQUE (student_id, lab_id, seq)
);
CREATE INDEX submissions_lab_idx ON submissions (lab_id);