исправил качество правил и изменение расписания (не черновика)

This commit is contained in:
Zuev
2026-08-12 01:07:35 +03:00
parent 18a97b293a
commit 491e373cc3
23 changed files with 826 additions and 316 deletions

View File

@@ -1,5 +1,5 @@
{
"generated_at": "2026-07-31T00:26:15.582806+00:00",
"generated_at": "2026-08-11T21:13:26.923984+00:00",
"nodes": {
"_gitea_workflows_docker_build_backend_image_pipeline": {
"code_fingerprint": "54d549276598adddd9334dede2b54f31e8610315ee84b0b0269706bf339d6077",
@@ -22,7 +22,7 @@
"q": "The goal you specified requires a project to execute but there is no POM in this directory (/workspace)."
}
],
"score": 2.92268101,
"score": 2.221841026,
"source_file": ".gitea/workflows/docker-build.yaml",
"status": "preferred",
"uses": 3
@@ -59,7 +59,7 @@
"q": "Проверить опубликованные образы: backend Trivy HIGH/CRITICAL scan завершился exitcode 1"
}
],
"score": 6.81633329,
"score": 5.181820698,
"source_file": ".gitea/workflows/docker-build.yaml",
"status": "contested",
"uses": 8,
@@ -87,7 +87,7 @@
"q": "сам можешь выполнить эти действия?"
}
],
"score": 0.972977818,
"score": 0.739664036,
"source_file": ".gitea/workflows/docker-build.yaml",
"status": "contested",
"uses": 2,
@@ -114,7 +114,7 @@
"q": "The goal you specified requires a project to execute but there is no POM in this directory (/workspace)."
}
],
"score": 2.923540074,
"score": 2.222494092,
"source_file": ".gitea/workflows/docker-build.yaml",
"status": "preferred",
"uses": 3
@@ -140,7 +140,7 @@
"q": "Почему RequireRoles связывает множество контроллеров, моделей и сервисов как cross-community bridge?"
}
],
"score": 1.810960536,
"score": 1.376703924,
"source_file": "backend/src/main/java/com/magistr/app/config/auth/AuthorizationInterceptor.java",
"status": "preferred",
"uses": 3
@@ -156,7 +156,7 @@
"q": "Какие подсистемы связывают исправления аутентификации, tenant-конфигурации, расписания и инфраструктуры?"
}
],
"score": 0.643405092,
"score": 0.489120716,
"source_file": "backend/src/main/java/com/magistr/app/config/auth/JwtTokenService.java",
"status": "tentative",
"uses": 1
@@ -172,7 +172,7 @@
"q": "Почему RequireRoles связывает множество контроллеров, моделей и сервисов как cross-community bridge?"
}
],
"score": 0.541345879,
"score": 0.411534642,
"source_file": "backend/src/main/java/com/magistr/app/config/auth/RequireRoles.java",
"status": "tentative",
"uses": 1
@@ -188,7 +188,7 @@
"q": "Как безопасно обновлять tenant DataSource без потери рабочего подключения?"
}
],
"score": 0.658422513,
"score": 0.500537057,
"source_file": "backend/src/main/java/com/magistr/app/config/DataInitializer.java",
"status": "tentative",
"uses": 1
@@ -204,7 +204,7 @@
"q": "проанализируй весь проект на баги и ошибки и дополни '/mnt/HDD/ProjectMagistr/magistr/BUG_REPORT.md'"
}
],
"score": 0.626209565,
"score": 0.476048566,
"source_file": "backend/src/main/java/com/magistr/app/config/tenant/ConfigMapUpdater.java",
"status": "tentative",
"uses": 1
@@ -220,7 +220,7 @@
"q": "Как безопасно заменить tenant DataSource без потери рабочего подключения?"
}
],
"score": 0.658310876,
"score": 0.50045219,
"source_file": "backend/src/main/java/com/magistr/app/config/tenant/TenantConfig.java",
"status": "tentative",
"uses": 1
@@ -246,7 +246,7 @@
"q": "проанализируй весь проект на баги и ошибки и дополни '/mnt/HDD/ProjectMagistr/magistr/BUG_REPORT.md'"
}
],
"score": 1.942942954,
"score": 1.477037813,
"source_file": "backend/src/main/java/com/magistr/app/config/tenant/TenantConfigWatcher.java",
"status": "preferred",
"uses": 3
@@ -272,7 +272,7 @@
"q": "Какие подсистемы связывают исправления аутентификации, tenant-конфигурации, расписания и инфраструктуры?"
}
],
"score": 1.960138481,
"score": 1.490109964,
"source_file": "backend/src/main/java/com/magistr/app/config/tenant/TenantRoutingDataSource.java",
"status": "preferred",
"uses": 3
@@ -288,7 +288,7 @@
"q": "давай сделаем \"Один непрерывный период с одинаковой активностью становится одной строкой\". пиши всё в v1 не создавая новую миграцию. внеси изменения о которых сказал, не беспокоясь о проде, потому что проект на этапе разработки и ничего не сломается."
}
],
"score": 0.999825381,
"score": 0.760073728,
"source_file": "backend/src/main/java/com/magistr/app/controller/AcademicCalendarController.java",
"status": "tentative",
"uses": 1
@@ -304,7 +304,7 @@
"q": "Почему в выборе аудитории показаны корпус и этаж?"
}
],
"score": 0.809436264,
"score": 0.615338689,
"source_file": "backend/src/main/java/com/magistr/app/controller/ClassroomController.java",
"status": "tentative",
"uses": 1
@@ -320,7 +320,7 @@
"q": "Какие подсистемы связывают исправления аутентификации, tenant-конфигурации, расписания и инфраструктуры?"
}
],
"score": 0.643405092,
"score": 0.489120716,
"source_file": "backend/src/main/java/com/magistr/app/controller/DatabaseController.java",
"status": "tentative",
"uses": 1
@@ -341,13 +341,13 @@
"q": "Как безопасно заменить tenant DataSource без потери рабочего подключения?"
}
],
"score": 1.316733389,
"score": 1.000989247,
"source_file": "backend/src/main/java/com/magistr/app/controller/DatabaseController.java",
"status": "preferred",
"uses": 2
},
"backend_src_main_java_com_magistr_app_controller_globalexceptionhandler_globalexceptionhandler": {
"code_fingerprint": "a637ea110ec1c5fef0c0a1d88cccbc54d56b3b6ca66a6c1d3659871bd5ff7f4e",
"code_fingerprint": "327129c8d189e5d65b254235ef5207cb000bc6783162774e6da99128be0310a1",
"label": "GlobalExceptionHandler",
"last": "2026-07-10T18:14:03.213067+00:00",
"provenance": [
@@ -357,7 +357,7 @@
"q": "проанализируй весь проект на баги и ошибки и дополни '/mnt/HDD/ProjectMagistr/magistr/BUG_REPORT.md'"
}
],
"score": 0.626209565,
"score": 0.476048566,
"source_file": "backend/src/main/java/com/magistr/app/controller/GlobalExceptionHandler.java",
"status": "tentative",
"uses": 1
@@ -378,7 +378,7 @@
"q": "Какие подсистемы связывают исправления аутентификации, tenant-конфигурации, расписания и инфраструктуры?"
}
],
"score": 1.452093958,
"score": 1.103891228,
"source_file": "backend/src/main/java/com/magistr/app/controller/ScheduleController.java",
"status": "preferred",
"uses": 2
@@ -394,16 +394,21 @@
"q": "Как безопасно валидировать и сохранять точечные изменения расписания?"
}
],
"score": 0.653704248,
"score": 0.496950202,
"source_file": "backend/src/main/java/com/magistr/app/controller/ScheduleOverrideController.java",
"status": "tentative",
"uses": 1
},
"backend_src_main_java_com_magistr_app_controller_scheduleruleadmincontroller_scheduleruleadmincontroller": {
"code_fingerprint": "88244c8ce05d55ac3581c4295a7213294389d1245b56c73a0ad5df2da4ecf000",
"code_fingerprint": "544765eadda64b60f2e6fdb8e0c305b30cc9130e8e57dbd287806ee2acd84940",
"label": "ScheduleRuleAdminController",
"last": "2026-07-12T21:48:38.060218+00:00",
"last": "2026-08-11T21:06:37.878825+00:00",
"provenance": [
{
"date": "2026-08-11T21:06:37.878825+00:00",
"outcome": "useful",
"q": "хочу чтобы изменять можно было не только черновик, но и само по себе расписание. и даже больше, чтобы по умолчанию можно было менять обычные расписнаия, либо переключаться на черновик. чтобы черновик можно было создать прямо по кнопке в конструкторе правил и чтобы за основу он брал то расписание которое там выбрано."
},
{
"date": "2026-07-12T21:48:38.060218+00:00",
"outcome": "useful",
@@ -415,10 +420,10 @@
"q": "проанализируй весь проект на баги и ошибки и дополни '/mnt/HDD/ProjectMagistr/magistr/BUG_REPORT.md'"
}
],
"score": 1.284297038,
"score": 1.976221543,
"source_file": "backend/src/main/java/com/magistr/app/controller/ScheduleRuleAdminController.java",
"status": "preferred",
"uses": 2
"uses": 3
},
"backend_src_main_java_com_magistr_app_model_academiccalendar_academiccalendar": {
"code_fingerprint": "5bdd7da771fe97443661a5bd06bed94f453ea036759c4de8c927ed68eb2b723d",
@@ -441,7 +446,7 @@
"q": "хотим поменять название сервиса, придумай что-то короткое одним словом подходящее по смыслу"
}
],
"score": 2.827859657,
"score": 2.149757219,
"source_file": "backend/src/main/java/com/magistr/app/model/AcademicCalendar.java",
"status": "preferred",
"uses": 3
@@ -457,7 +462,7 @@
"q": "Почему в выборе аудитории показаны корпус и этаж?"
}
],
"score": 0.809436264,
"score": 0.615338689,
"source_file": "backend/src/main/java/com/magistr/app/model/Classroom.java",
"status": "tentative",
"uses": 1
@@ -473,16 +478,21 @@
"q": "хотим поменять название сервиса, придумай что-то короткое одним словом подходящее по смыслу"
}
],
"score": 0.828623782,
"score": 0.629925164,
"source_file": "backend/src/main/java/com/magistr/app/model/Department.java",
"status": "tentative",
"uses": 1
},
"backend_src_main_java_com_magistr_app_model_schedulerule_schedulerule": {
"code_fingerprint": "692d61c1bfd5b46f5865174dde8cf2d962d2ccd124b5e4320e2ba8535bb29605",
"code_fingerprint": "9a47408d331e8a8e6d815732385c9463555bd7c013eeea01cdf6988db229ca27",
"label": "ScheduleRule",
"last": "2026-07-12T21:48:38.060218+00:00",
"last": "2026-08-11T21:06:37.878825+00:00",
"provenance": [
{
"date": "2026-08-11T21:06:37.878825+00:00",
"outcome": "useful",
"q": "хочу чтобы изменять можно было не только черновик, но и само по себе расписание. и даже больше, чтобы по умолчанию можно было менять обычные расписнаия, либо переключаться на черновик. чтобы черновик можно было создать прямо по кнопке в конструкторе правил и чтобы за основу он брал то расписание которое там выбрано."
},
{
"date": "2026-07-12T21:48:38.060218+00:00",
"outcome": "useful",
@@ -494,10 +504,10 @@
"q": "Корректны ли inferred-связи вокруг ScheduleRule?"
}
],
"score": 1.200037579,
"score": 1.912166957,
"source_file": "backend/src/main/java/com/magistr/app/model/ScheduleRule.java",
"status": "preferred",
"uses": 2
"uses": 3
},
"backend_src_main_java_com_magistr_app_model_scheduleruleslot_scheduleruleslot": {
"code_fingerprint": "0b1cef627b98558752cc70624d74cd54eb09d9dbff8ca985f81f56d5b3dd34ff",
@@ -510,7 +520,7 @@
"q": "Какие связи затрагивает полная валидация правил расписания в исправлении №7?"
}
],
"score": 0.658087473,
"score": 0.500282357,
"source_file": "backend/src/main/java/com/magistr/app/model/ScheduleRuleSlot.java",
"status": "tentative",
"uses": 1
@@ -531,7 +541,7 @@
"q": "в дополнительные фильры просмотра расписаний нужно добавить выбор семестра"
}
],
"score": 1.637312649,
"score": 1.244695676,
"source_file": "backend/src/main/java/com/magistr/app/model/Semester.java",
"status": "preferred",
"uses": 2
@@ -547,7 +557,7 @@
"q": "хотим поменять название сервиса, придумай что-то короткое одним словом подходящее по смыслу"
}
],
"score": 0.828623782,
"score": 0.629925164,
"source_file": "backend/src/main/java/com/magistr/app/model/StudentGroup.java",
"status": "tentative",
"uses": 1
@@ -568,7 +578,7 @@
"q": "как ты думаешь, нужно ли оптимизировать таблицу academic_calendar_days? а то расписаний будет очень много, минимум 1000 и со временем будет расти, а там уже такой большой объём данных, даже когда расписаний мало. Можем подумать как переделать логику чтобы оптимизировать это дело"
}
],
"score": 1.999235874,
"score": 1.519832055,
"source_file": "backend/src/main/java/com/magistr/app/repository/AcademicCalendarDayRepository.java",
"status": "preferred",
"uses": 2
@@ -584,7 +594,7 @@
"q": "Какие связи затрагивает полная валидация правил расписания в исправлении №7?"
}
],
"score": 0.658087473,
"score": 0.500282357,
"source_file": "backend/src/main/java/com/magistr/app/repository/SemesterRepository.java",
"status": "tentative",
"uses": 1
@@ -605,7 +615,7 @@
"q": "Как безопасно валидировать и сохранять точечные изменения расписания?"
}
],
"score": 1.462393114,
"score": 1.111720714,
"source_file": "backend/src/main/java/com/magistr/app/service/ScheduleQueryService.java",
"status": "preferred",
"uses": 2
@@ -621,13 +631,13 @@
"q": "Корректны ли inferred-связи вокруг ScheduleRule?"
}
],
"score": 0.541950106,
"score": 0.41199398,
"source_file": "backend/src/test/java/com/magistr/app/model/ScheduleRuleTest.java",
"status": "tentative",
"uses": 1
},
"compose_backend_service": {
"code_fingerprint": "944ed05aa3bb66491e0622baa9659fc2db3115c79076325ebe243aeb84ca09f9",
"code_fingerprint": "3945e5ea72f627e060f6f0cbbdf9a8ff4315aa39b3639faffbf8d3ddc419de2d",
"label": "Backend-сервис Docker Compose",
"last": "2026-07-11T22:22:23.259230+00:00",
"provenance": [
@@ -637,29 +647,34 @@
"q": "Какие подсистемы связывают исправления аутентификации, tenant-конфигурации, расписания и инфраструктуры?"
}
],
"score": 0.643405092,
"score": 0.489120716,
"source_file": "compose.yaml",
"status": "tentative",
"uses": 1
},
"compose_db_service": {
"code_fingerprint": "944ed05aa3bb66491e0622baa9659fc2db3115c79076325ebe243aeb84ca09f9",
"code_fingerprint": "3945e5ea72f627e060f6f0cbbdf9a8ff4315aa39b3639faffbf8d3ddc419de2d",
"label": "PostgreSQL-сервис Docker Compose",
"last": "2026-07-29T19:59:04.551881+00:00",
"last": "2026-07-31T00:27:24.418402+00:00",
"provenance": [
{
"date": "2026-07-31T00:27:24.418402+00:00",
"outcome": "useful",
"q": "отлично, как мне подключиться к этой бд через dbeaver?"
},
{
"date": "2026-07-29T19:59:04.551881+00:00",
"outcome": "useful",
"q": "новая схема на проде на удалённом сервере создана через CREATE SCHEMA public. я проверил, давай дальше"
}
],
"score": 0.972979865,
"score": 1.499886061,
"source_file": "compose.yaml",
"status": "tentative",
"uses": 1
"status": "preferred",
"uses": 2
},
"docs_database_flyway_migrations": {
"code_fingerprint": "2b50799351b008ee1b60bba24a352e8cb6c0faf710e5af8ed780a5c2d3a1fc87",
"code_fingerprint": "5a9768f9a9599414fe94ff758c9bfc42a599007aa83a0f14ac2e797d9de74476",
"label": "Flyway-миграции",
"last": "2026-07-29T19:26:44.188240+00:00",
"provenance": [
@@ -669,11 +684,27 @@
"q": "теперь напиши мне инструкцию как это всё выыкатить на прод. у мня уже поднят на проде этот сервис со старой базой данных, но я могу её затереть. ci/cd тоже настроен, по сути я прямо сейчас могу залить это в ветку мейн и оно должно раскататься. каие есть подводные камни после изменений безопасности которые мы внесли?"
}
],
"score": 0.972475129,
"score": 0.739281889,
"source_file": "docs/DATABASE.md",
"status": "tentative",
"uses": 1
},
"docs_infrastructure_docker_compose": {
"code_fingerprint": "f0d580f018f58ee321bcca59df5787ebad772071c433fb340da53fa885fa7ebc",
"label": "Docker Compose инфраструктура",
"last": "2026-07-31T00:27:24.418402+00:00",
"provenance": [
{
"date": "2026-07-31T00:27:24.418402+00:00",
"outcome": "useful",
"q": "отлично, как мне подключиться к этой бд через dbeaver?"
}
],
"score": 0.760220468,
"source_file": "docs/INFRASTRUCTURE.md",
"status": "tentative",
"uses": 1
},
"docs_infrastructure_gitea_actions_cicd": {
"code_fingerprint": "f0d580f018f58ee321bcca59df5787ebad772071c433fb340da53fa885fa7ebc",
"label": "CI/CD Gitea Actions в инфраструктуре",
@@ -700,7 +731,7 @@
"q": "The goal you specified requires a project to execute but there is no POM in this directory (/workspace)."
}
],
"score": 3.897900479,
"score": 2.96320918,
"source_file": "docs/INFRASTRUCTURE.md",
"status": "preferred",
"uses": 4
@@ -726,7 +757,7 @@
"q": "теперь напиши мне инструкцию как это всё выыкатить на прод. у мня уже поднят на проде этот сервис со старой базой данных, но я могу её затереть. ci/cd тоже настроен, по сути я прямо сейчас могу залить это в ветку мейн и оно должно раскататься. каие есть подводные камни после изменений безопасности которые мы внесли?"
}
],
"score": 2.922437367,
"score": 2.221655807,
"source_file": "docs/INFRASTRUCTURE.md",
"status": "preferred",
"uses": 3
@@ -763,7 +794,7 @@
"q": "теперь напиши мне инструкцию как это всё выыкатить на прод. у мня уже поднят на проде этот сервис со старой базой данных, но я могу её затереть. ci/cd тоже настроен, по сути я прямо сейчас могу залить это в ветку мейн и оно должно раскататься. каие есть подводные камни после изменений безопасности которые мы внесли?"
}
],
"score": 2.918432812,
"score": 2.218611518,
"source_file": "docs/INFRASTRUCTURE.md",
"status": "contested",
"uses": 4,
@@ -780,7 +811,7 @@
"q": "теперь напиши мне инструкцию как это всё выыкатить на прод. у мня уже поднят на проде этот сервис со старой базой данных, но я могу её затереть. ci/cd тоже настроен, по сути я прямо сейчас могу залить это в ветку мейн и оно должно раскататься. каие есть подводные камни после изменений безопасности которые мы внесли?"
}
],
"score": 0.972475129,
"score": 0.739281889,
"source_file": "docs/INFRASTRUCTURE.md",
"status": "tentative",
"uses": 1
@@ -796,7 +827,7 @@
"q": "Проверить опубликованные образы: backend Trivy HIGH/CRITICAL scan завершился exitcode 1"
}
],
"score": 0.974360405,
"score": 0.740715088,
"source_file": "",
"status": "tentative",
"uses": 1

View File

@@ -0,0 +1,24 @@
---
type: "query"
date: "2026-08-11T21:06:37.878825+00:00"
question: "хочу чтобы изменять можно было не только черновик, но и само по себе расписание. и даже больше, чтобы по умолчанию можно было менять обычные расписнаия, либо переключаться на черновик. чтобы черновик можно было создать прямо по кнопке в конструкторе правил и чтобы за основу он брал то расписание которое там выбрано."
contributor: "graphify"
outcome: "useful"
source_nodes: ["ScheduleRule", "ScheduleRuleAdminController", "ScheduleGeneratorService"]
---
# Q: хочу чтобы изменять можно было не только черновик, но и само по себе расписание. и даже больше, чтобы по умолчанию можно было менять обычные расписнаия, либо переключаться на черновик. чтобы черновик можно было создать прямо по кнопке в конструкторе правил и чтобы за основу он брал то расписание которое там выбрано.
## Answer
Expanded from original query via vocab: [schedule, rule, constructor, create, update, semester, admin, generator]. Реализовано редактирование PUBLISHED и DRAFT через ScheduleRuleService; ARCHIVED оставлена только для чтения. Конструктор по умолчанию выбирает PUBLISHED текущего семестра, позволяет переключаться на DRAFT и создаёт новый DRAFT копированием выбранной версии. Новый семестр получает пустую PUBLISHED-версию автоматически. Сохранены ID существующих слотов и добавлена защита связанных точечных изменений и заявок. Проверено 328 backend- и 76 frontend-тестами.
## Outcome
- Signal: useful
## Source Nodes
- ScheduleRule
- ScheduleRuleAdminController
- ScheduleGeneratorService

View File

@@ -1,22 +1,25 @@
# Lessons
_Auto-generated by `graphify reflect` from 23 session memories in graphify-out/memory/. Deterministic; no LLM. Use for orientation — verify before relying, and revisit dead ends if the code has changed since._
_Auto-generated by `graphify reflect` from 26 session memories in graphify-out/memory/. Deterministic; no LLM. Use for orientation — verify before relying, and revisit dead ends if the code has changed since._
## Summary
- 21 useful · 1 dead ends · 1 corrected · 0 unmarked
- 24 useful · 1 dead ends · 1 corrected · 0 unmarked
## Lessons
**Preferred sources** — corroborated by ≥2 useful results; start here.
- `ScheduleGeneratorService` (5× useful)
- `ScheduleGeneratorService` (7× useful)
- `CI/CD Gitea Actions в инфраструктуре` (4× useful)
- `Pipeline frontend-образа` (3× useful)
- `Pipeline backend-образа` (3× useful)
- `Политика JWT-секрета` (3× useful)
- `AcademicCalendar` (3× useful)
- `ScheduleRuleAdminController` (3× useful)
- `ScheduleRule` (3× useful)
- `AcademicCalendarDayRepository` (2× useful)
- `PostgreSQL-сервис Docker Compose` (2× useful)
- `TenantRoutingDataSource` (3× useful)
- `TenantConfigWatcher` (3× useful)
- `AuthorizationInterceptor` (3× useful)
@@ -24,15 +27,13 @@ _Auto-generated by `graphify reflect` from 23 session memories in graphify-out/m
- `ScheduleQueryService` (2× useful)
- `ScheduleController.java` (2× useful)
- `DatabaseController` (2× useful)
- `ScheduleRuleAdminController` (2× useful)
- `ScheduleRule` (2× useful)
**Tentative** — useful in fewer than 2 results; verify before relying.
- `Docker Compose инфраструктура` (1× useful)
- `AcademicCalendarController` (1× useful)
- `AcademicDateService` (1× useful)
- `SpringBootApplication` (1× useful)
- `PostgreSQL-сервис Docker Compose` (1× useful)
- `Flyway-миграции` (1× useful)
- `Tenants ConfigMap` (1× useful)
- `Department` (1× useful)