9412d87fed
fix: закрыть P0/P1 расхождения с целевой моделью
...
- академический отпуск: readOnly, запрет submit/start/finish защиты
- черновики лабораторных скрыты от студентов в списке/деталях/по UUID
- удалено действие «Убрать из группы» из UI и API
- импорт: restoreInactiveStatuses, skipped-отчёт, разблокировка архивного аккаунта
- глобальные материалы STUDENTS/TEACHERS с JWT-фильтрацией и сменой аудитории
- LDD-AUTH-005 переведён на unit-evidence, clean check проходит по P0
- backup: безопасный парсинг .env, verify-latest, кавычки cron
- robots/noindex, комментарии без автора, профиль без черновиков
- docs/18-goal-audit.md; baseline 57 claims / 366 тестов / release PASS
2026-10-29 18:58:21 +03:00
1e1e9ae0e4
feat: закрыть остаточный backlog
...
- keyset-пагинация аудита с курсором (occurred_at, id) и UI «Показать ещё»
- пакетный /api/v1/labs/details и переход progress на один запрос
- абсолютный потолок сессии 30 дней (identity V12 + web), очистка refresh
- админская инвентаризация legacy-активов (/admin/legacy-assets, скрипт)
- E2E в Chromium/Firefox/WebKit (18/18), CI preflight
- LDD: 51 claim, 346 тестов, docs и handoff обновлены
2026-10-29 12:01:44 +03:00
b7129b92e0
fix(json): применять Kotlin-модуль Jackson 3
2026-10-29 12:01:43 +03:00
905feb440b
feat(ldd): property-based, mutation и браузерный E2E
2026-10-29 12:01:43 +03:00
c6ca981eca
feat(progress): преподавательские оценки, защиты и аудит
2026-10-29 12:01:43 +03:00
916046791a
feat(progress): доступ преподавателя к операциям лабораторной
2026-10-29 12:01:43 +03:00
fa097518f8
feat(progress): профиль студента курса и скачивание попыток
2026-10-29 12:01:42 +03:00
cbd98f55f0
fix(progress): перенести профильную миграцию на V13 после аттестаций
2026-10-29 12:01:42 +03:00
de9535d35c
feat(db): миграции групп, курсов, статусов и профиля
2026-10-29 12:01:42 +03:00
26573f2210
revert: keep feature-branch migration out of master
...
V10 belongs to the unfinished groups/courses branch and must not be pulled into master. Production already has V11/V12 applied; master starts with that migration history without V10 and without out-of-order mode.
2026-10-26 17:57:12 +03:00
bfdae41fb8
fix: allow out-of-order progress migrations
...
V10 came from the feature branch after V11/V12 were already applied in production. It is safe to apply after them and adds only profile author columns plus an index.
2026-10-26 17:45:14 +03:00
dc13ba3186
chore: keep progress migrations compatible with feature branch
...
The current local database already has V10 from the groups/courses branch; include it so master can start without a migration history gap.
2026-10-26 17:31:30 +03:00
fb9511280a
fix: polish attestation columns and inline grading
...
- use numeric semesters 1–8 and add show/hide publication per attestation
- edit attestation results directly in the group table without a modal
- hide unpublished attestations from students
- align header separators, average column and action buttons with the existing UI
- remove missed-hours fields until a separate attendance model is ready
2026-10-26 17:15:16 +03:00
f7a1830548
feat: add course attestations and average grade column
...
- store attestation columns and per-student results in progress-service
- add teacher UI for intermediate/pass/exam columns with semester and missed hours
- show average score per student on the group page
- show attestation results on the student dashboard
2026-10-26 16:34:04 +03:00
f7dc8d7d8b
feat: general lab comment and strict square UI
...
Add a non-required general comment for a student's lab grade (progress V9, API, admin modal, student card). Empty string is the default. Switch the UI to square corners and bump static asset versions.
2026-10-20 21:56:38 +03:00
51d1b84297
Redesign B3 bordeaux + finish lab-page rework
...
- Lab page is now read-only with a settings screen for levels/variants;
variant issuance moved to a large modal on the group page (assign-fragment).
- Header: bordeaux logo and 2px accent underline, bordeaux login/logout/theme
buttons; smaller radii across the UI; filled secondary/danger buttons.
- Includes prior agent work (login backoff, no-cache pages, API timeouts,
content tweaks) and fixes (variant usage Map.values, import order).
- Bump static asset version to v=9.
2026-10-02 15:41:16 +03:00
c0cf11a5a3
Admin: users page with search and full cascade delete (identity + progress + files)
2026-10-02 11:53:01 +03:00
b94538cb7e
Defense: sync admin/student timers from server every 10s; toasts with ready reason; live eye counter
2026-10-02 01:21:32 +03:00
fba4e013e5
Publication per student: checkbox in lab column, partial state in eye, cursor on Variant
2026-10-02 00:33:16 +03:00
b97a0096ff
Solutions zip: use real file/submission timestamps instead of epoch (fixes bogus years)
2026-09-29 18:31:19 +03:00
e35b0621db
Grade comments: show live usage count and allow deleting unused templates
2026-09-29 15:56:00 +03:00
daaacb1d5f
Admin group: counter = number of group students who submitted a solution
2026-09-28 17:35:10 +03:00
74c09aae53
Defense: keep assignment text for admins, hide it only from students
2026-09-28 17:30:11 +03:00
4e1e0d1488
Admin group: fix script loading (extra div), total submissions counter, label cleanup
2026-09-28 17:22:09 +03:00
5e1a4f2459
Refactor: split ContentService and ProgressService; defaults tightened
2026-09-27 22:48:13 +03:00
d96369c7e3
Test: Testcontainers integration tests for distribution and content import
2026-09-27 22:22:54 +03:00
a021bdb904
Lint: strict mode on; tune detekt thresholds; more decompositions
2026-09-27 22:15:00 +03:00
82b912ba46
Refactor: split loop/throws helpers; drop deprecated JSON accessors
2026-09-27 22:02:56 +03:00
577a2c8f41
Refactor: extract helpers to satisfy detekt (throws, returns, loops)
2026-09-27 22:00:15 +03:00
a821d97ef7
Refactor: reduce detekt findings (unused params, throws, long methods, config)
2026-09-27 21:54:00 +03:00
c6e0b0d7c8
Build: enable ktlint+detekt, format sources, add core unit tests
2026-09-27 21:46:05 +03:00
a91cd34e30
Submissions: reject XML project files, show submitted file names to admin
2026-09-24 11:32:19 +03:00
d04207302a
Phase 7: deployment, data import, UI hardening and security fixes
...
Docker/prod deployment:
- multi-stage Dockerfile (JDK21 build, JRE21 run), docker-compose.prod.yml,
nginx config for lms.our-place.ru, deploy.sh; DEPLOY/IMPORT guides (UI flow)
- Fix Docker 401: LMS_JWT_JWK_SET_URI for academic/progress; forward-headers
Variant distribution (lab page only):
- round-robin by student level, shared random queue across selected groups,
least-used variants, manual pins always preserved; occupied/dup labels
- setup page: single form + one «Сохранить всё», batch level/variant for
selected students (checkboxes)
Grades, defense, materials:
- publication gate + comment lists; defense CSV import (2/3 cols, quotes)
- additional task after defense ("начать заново"); enroll/unenroll students
from group page; temporary-password lock (no navigation until changed) and
persistent "Смена пароля"; forced change once
- chapter page /learn/{c}; header: LMS home, Войти, user -> dashboard,
compact theme toggle; responsive mobile header
- markdown: single newlines are soft breaks; highlight.js with light/dark themes
- lab/content imports ZIP-only (lab.yaml+README+variants/assets,
chapters tree+assets); duplicate lab numbers rejected; variant ordering
and date defaults honored
Fixes:
- 500 on student create (@MapsId set before persist); broken dialogs/JS refs in group page
2026-09-15 00:09:28 +03:00
d355319a20
Phase 4: grade comments with frequency-ranked suggestions
...
- progress comment_templates (tone + use_count) and grade_comments tables;
setGrade now accepts comments list; templates created/bumped automatically;
GET /api/v1/comment-templates?q= returns suggestions ranked by frequency
- admin group page: per-grade ✎ dialog (score + editable comment rows with
tone, datalist suggestions), chips under each score, data-comments JSON attr
- student lab page: score + colored tone chips
- fixed damaged button/attributes from earlier manual template surgery
2026-09-12 01:51:23 +03:00
ccd31263d5
Phase 3: individual defense assignments with invite codes
...
- progress V5 defense_sessions: per student+lab individual task (md), status
machine waiting -> started -> ready, one-time 6-digit codes
- 30-min timer with server-side lazy expiry (syncTimeouts: started->ready by
timeout), countdown JS on student page
- admin: assign task dialog (+prefill existing via data-md), CSV import
(studentNo;task, \n for newlines) resolved via identity students,
issue/reset code buttons, defense status column
- student: code entry form (code hidden until start), assignment md,
'Готов к сдаче', waiting-for-teacher note
- gateway: /api/v1/defenses,/api/v1/defenses/** routes
- web api client + admin/student controllers wired
2026-09-12 00:54:10 +03:00
a3be71db27
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
2026-09-12 00:20:46 +03:00
095e337136
Lab editing and group grades
...
- academic-service: PUT /labs/{id} (title, deadline, defense, points, status,
description), POST/PUT/DELETE variants endpoints
- progress-service: lab_grades table, POST/GET /api/v1/grades, GET /me/grades
- gateway: routes for /api/v1/assign and /api/v1/grades
- web: lab edit page (metadata + per-variant forms + add/delete variant)
- web: group page shows grades matrix per lab with editable score inputs
and computed average column
- web: student dashboard renders statement via markdown, shows deadline
2026-09-11 00:03:24 +03:00
0de6d3f2d8
Lab assignment management UI and student variant view
...
- progress-service: POST /api/v1/assign (manual variant), GET /api/v1/assignments?labId=
(enriched assignments), fixed enrich() to return real variant number/title/statement
- gateway: routes for /api/v1/assign and /api/v1/levels (exact paths)
- web: lab detail page shows students grouped with level and variant selects,
group filter, distribute/redistribute buttons, source badge (auto/manual)
- web: student dashboard renders variant statement via libs/markdown (spoilers,
code highlight, sanitized)
- academic-service: unquote YAML front-matter values (variant numbers were quoted)
- academic-service: LabLevelDetail.id for level references
2026-09-10 23:25:36 +03:00
84532adbff
Complete distribution flow and student UI
...
- progress-service: Distribute variants (round-robin per lab per level),
student level assignment, API for levels/assignments
- progress-service: Inter-service clients (academic, identity) via RestClient
- web: Admin lab detail page with distribute/level buttons
- web: Student dashboard shows assigned labs from progress-service
- web: ApiClient methods for labs detail, distribute, levels, me/assignments
- academic-service: Add id to LabLevelDetail DTO for progress-service
- Fix: CSS-only layout, footer at bottom via flex column
2026-09-10 22:18:47 +03:00
9b7748571e
Initial commit: LMS microservices scaffold
...
- Gradle multi-module: libs/{common-http,security-jwt,markdown,test-support},
services/{identity,academic,progress,gateway}, web (Thymeleaf+htmx)
- identity-service: JWT auth (RSA), accounts, students, groups, enrollment,
import from XLSX/CSV, credentials export, password reset
- academic-service: lab import from JSON/zip (markdown + YAML + variants),
levels, API
- progress-service: schema for student levels and variant assignments
- gateway: Spring Cloud Gateway, JWT validation, route propagation
- web: Server-side UI with flex/footer layout, light/dark theme toggle,
admin dashboard, groups CRUD, student portal placeholder
- docker-compose: PostgreSQL 18
- Tests: identity smoke test with Testcontainers
2026-09-10 19:46:13 +03:00