Skip to content

patch archive handler#26

Open
rifcrat wants to merge 3 commits into
mainfrom
patch_id_archive_handler
Open

patch archive handler#26
rifcrat wants to merge 3 commits into
mainfrom
patch_id_archive_handler

Conversation

@rifcrat

@rifcrat rifcrat commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Изменения

Добавил ручку PATCH/notification/{id}/archive

Детали реализации

В файле schemas\models.py добавил новую схему для ответа
В файле routes\notes.py написал саму ручку
В файле utils\services.py добавил логику для ручки

Check-List

  • Вы проверили свой код перед отправкой запроса?
  • Вы написали тесты к реализованным функциям?
  • Вы не забыли применить форматирование black и isort для Back-End или Prettier для Front-End?

@rifcrat
rifcrat requested a review from petrCher July 7, 2026 22:44
@rifcrat rifcrat self-assigned this Jul 7, 2026
@rifcrat rifcrat linked an issue Jul 7, 2026 that may be closed by this pull request

@petrCher petrCher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А почему не тестил код?
Надо делать еще небольшой user story что пользователь архивировал модалку и потом делает get запрос, а там та модалка со статусом active

Comment thread modal_backend/routes/notes.py Outdated
Comment thread modal_backend/utils/services.py Outdated
@petrCher

petrCher commented Jul 8, 2026

Copy link
Copy Markdown
Member

Как сделаешь изменения скинь на ревью, планирую потом дать тебе доработать ручку
План на потом:

  1. добавить возможность возврата из архива в этой же ручке (например, нужно для подготовления уведомлений и постов заранее)
  2. поменять название пути ручки на что-то универсальное (с archive на status например)
  3. в логике возврата проверять на возможность возобновления работы модалки (например, проблема может быть с уже несуществующими группами или с истекшим временем)
  4. аргументы в параметрах ручки сделать не только для айди но и для статуса (см https://github.com/profcomff/rating-api/blob/main/rating_api/routes/comment.py#L207-L209 )

@petrCher

This comment was marked as resolved.

@rifcrat
rifcrat force-pushed the patch_id_archive_handler branch from a2381df to 68f174a Compare July 10, 2026 21:30
@petrCher

Copy link
Copy Markdown
Member

@rifcrat сделай git rebase прежде чем коммитить дальше, появились изменения в мейне

@rifcrat
rifcrat force-pushed the patch_id_archive_handler branch from 68f174a to 7aa6d8a Compare July 14, 2026 16:37
note = Note.get(session=db.session, id=id)
group_ids = note.group_ids
for group_id in group_ids:
Group.get(session=db.session, id=group_id)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/profcomff/modal-service-api/blob/main/modal_backend/models/base.py#L60
При вызове метода get может вылететь 404, если не найдено ничего. Если выскакивает 404, то код дальше не пойдет и 404 так и высветится в статусе. План такой, что для групп и сервисов, которые существуют мы модалку сможем вернуть из архива. Поэтому в данном случае лучше использовать db.session.query(...).filter(...) и тд, так как при таком поиске автоматического вылета 404 не будет, максимум вернется пустое значение (так же не забудь is_deleted=true убирать из рассмотрения). А дальше надо подготовить массив групп и сервисов, которые будут отправлены в параметры update

db.session.query(...).filter(...) см пример реализации https://github.com/profcomff/rental-api/blob/main/rental_backend/routes/item.py#L130

То есть если ты пропишешь сперва Group а потом к нему метод get то будет работать наше кастомное решение с дополнительными автоматическими проверками (см самую первую ссылку в этом комменте)

Group.get(session=db.session, id=group_id)
service_ids = note.service_ids
for service_id in service_ids:
Service.get(session=db.session, id=service_id)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

с сервисом аналогично

if note.is_always == False and time >= end_ts:
raise ForbiddenAction(Note)
else:
if note.status == ModalStatus.ACTIVE:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

такая ситуация: time >= end_ts (то есть вчера модалка завершилась) и note.is_always == False (не бесконечное время)
почему тогда мне высветится ForbiddenAction даже без проверки активна ли сейчас модалка или нет?
Если она активна, а я ее в архив хочу отправить, то в текущей реализации несостыковка


Права: `["modal.note.patch"]`

Исключение **ObjectNotFound**, если `id` не найден

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

хочется добавить достаточно подробную информацию о том, как работает все.
Но делать это надо только в конце, после того, как исправишь логику работы по моим комментам

@petrCher

Copy link
Copy Markdown
Member

modal.note.patch дал тебе скоуп

@petrCher

Copy link
Copy Markdown
Member

И еще сделай опять ребейз, тесты готовы

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Добавить архивацию модалки

2 participants