Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/329-aurora-1886-vsp-reopen"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #329. Jira: AURORA-1886 (эпик AURORA-1876, замечание №3). Поверх #328 (AURORA-1885) — в диффе против test виден и его коммит
744b71f.⚠️ Порядок мержа
Миграция
0062(down_revision = "0061"), решение человека 12.11: #315 → #317 → #319 → #323 → #328 → этот PR. Раньше #323 alembic не найдёт 0061.Что исправлено
Ошибочно закрытый ВСП можно вернуть в действующие: очистить «Дата закрытия ВСП» или перенести её в будущее →
is_active=true. Изменение пишется в аудит (VSP_UPDATE,changes.closed_at: {before, after: null}).0062_vsp_clear_closed_at.sql:DROP FUNCTION+CREATE FUNCTION v3.upd_vsp(…, p_clear_closed_at boolean DEFAULT false)— тело из0002_functions.sql(позже нигде не переопределялась, проверено и в ветках стека). Приp_clear_closed_atи непустой старой дате —closed_at = NULLи запись в changes. Остальные параметры по-прежнему NULL = «не менять». DROP+CREATE, чтобы не получить перегрузку.VSPRepository.update:p_clear_closed_at = "closed_at" in data and data["closed_at"] is None.VSPService.update: еслиclosed_atпередан и онNoneили в будущем →is_active=True; сегодня или раньше →False(как в 1885). Если не передан — прежняя логика. Исполнителюclosed_atпо-прежнему недоступен.Тесты
test_vsp.py+4: снятие даты →close_date=null,is_active=true, ВСП вGET /dict/info; перенос на +месяц →is_active=true; PUT безclose_dateне меняет дату (регресс); аудит —changes.closed_at.after is null.test_vsp_service_close_date.py: null / будущее / прошлое (тест 1885 «будущая дата → ключа is_active нет» заменён на «→ is_active=True», т. к. поведение намеренно изменилось).#319 (стек 1879–1881) + #323 (1896) + эта веткана чистой БД: 974 passed / 10 failed — те же 10 известных падений test, новых нет; конфликтов слияния нет.Наблюдения
deactivate_by_close_date(ежедневная синхронизация) по-прежнему только деактивирует — возврат в действующие идёт только через правку карточки. По задаче.Rulings I made
🤖 Generated with Claude Code
@ -34,2 +34,3 @@) -> Optional[Vsp]:queries = [Vsp.id == vsp_id, Vsp.is_deleted.is_(with_deleted)]queries = [Vsp.id == vsp_id]if not with_deleted:можно показывать только все и неудаленные, Фомичев почти наверняка захочет посмотреть только удаленные
H-1 — ответ на замечание к
vsp_repository.py:36(«можно показывать только все и неудалённые, Фомичев почти наверняка захочет посмотреть только удалённые»).Оставляю как есть, код не меняю. Причины:
VSPRepository.get— это получение одного ВСП по id. Режим «только удалённые» для него ничего не даёт: админ сwith_deleted=Trueи так получает удалённую запись, и в нейis_deleted=true. Старое условиеis_deleted.is_(with_deleted)и было этим режимом. Из-за него админ получал 404 на действующий ВСП, а в журнале аудита вместо ВСП стояло «—» (ошибка А в AURORA-1885). Других вызовов сwith_deletedв коде нет.GET /dict/info?status=…из AURORA-1883 (#332). Там по спеке удалённые не возвращаются ни при какомstatus, и в таком виде ты #332 одобрил.Если Фомичев попросит список удалённых, сделаем отдельной задачей:
status=deletedв списке справочника для админа. Тогда же решим в 1884 вопрос «физически или скрыто». Репозиторий для этого менять не придётся.Статус H-1: rejected (не требуется для get по id; просмотр удалённых — вне объёма замечания №3, решение по 1884). Решение согласовано с Епифанцевым.
H-1, уточнение к замечанию по
vsp_repository.py:36.Да, сейчас удаление логическое:
v3.del_vspставитis_deleted=true,is_active=falseи заполняетclosed_at, если дата пуста. Физическое удаление только предложено в AURORA-1884 и ждёт ответа заказчика.По строке 36 это ничего не меняет.
getберёт один ВСП по id, и админ сwith_deleted=Trueполучает удалённый ВСП сis_deleted=true. Режим «только удалённые» здесь и был старым условиемis_deleted.is_(with_deleted), из-за которого админ получал 404 на действующий ВСП.Смотреть удалённые имеет смысл списком. Это вынесено в AURORA-1884, комментарий
[vsp-deleted-view]: если заказчик выберет скрытую запись вместо физического удаления, там добавим для админаstatus=deletedвGET /dict/infoи вариант «Удалённые» в фильтре статуса. Репозиторийgetдля этого трогать не нужно.Статус H-1 прежний: rejected для этого PR, просмотр удалённых → AURORA-1884.