Skip to content

issue-114 debugged fantom deleted item problem#149

Merged
petrCher merged 1 commit intomainfrom
issue-114/fantom_deleted_item
Apr 10, 2026
Merged

issue-114 debugged fantom deleted item problem#149
petrCher merged 1 commit intomainfrom
issue-114/fantom_deleted_item

Conversation

@Georgon
Copy link
Copy Markdown
Contributor

@Georgon Georgon commented Apr 9, 2026

Решена проблема с ошибкой ObjectNotFound при срабатывании эндпоинта PATCH /rental/itemtype/available/{id} после удаления любого Item.

Удаленный предмет попадал в списки available_items / unavailable_items энпоинта PATCH /rental/itemtype/available/{id}, так как неправильно был построен исходный запрос items в бд:
items = ( db.session.query(Item) .outerjoin(...).
Здесь выполнялся прямой запрос к бд через db.session.query(Item), лишенный фильтра на исключение софт делитов is_deleted. Этот фильтр определен (в base.py) и применяется в методе query родительского класса BaseDbModel, так что при дальнейшем использовании методов Item.update() (внутри которого Item.get, внутри которого Item.query) и возникала ошибка ObjectNotFound:
updated_item = Item.update(available_items[i].id, session=db.session, is_available=False)
или
updated_item = Item.update(unavailable_items[i].id, session=db.session, is_available=True).

Банально в списке items, а как следствие в списках available_items / unavailable_items содержались Item с пометкой мягкого удаления, а в updated_item они отбрасывались, и предмет с данным id нельзя было найти.

Я переписал запрос items, добавив фильтр is_deleted, зашитый в Item.query(session=db.session)...

Также по схожей логике переписал запрос в бд для types, а то там тоже могут возникнуть проблемы с видимостью soft delete, так как при запросе нет фильтра:
types = ItemType.query(session=db.session).filter(ItemType.id == id).one_or_none().

Дополнительно:
Я заметил, что логгер эндпоинта PATCH /rental/itemtype/available/{id} очень криво выдает "item_ids". Особенно это хорошо заметно при изменении доступности сразу у многих предметов. Он может выдать последовательность id типа:
8,2,4,6,8,2,4,6, хотя должно быть 8,2,4,6,5,1,3,7 (к примеру).
Это связано с тем, что в циклах используется переменная i, но обращение идёт к items[i].id, а не к available_items[i].id или unavailable_items[i].id. Хотя списки available_items и unavailable_items являются подмножествами items, их порядок может отличаться, что и вело к неверному логированию.
Поправил обращение к элементам в циклах, теперь логгер работает корректно.

После самостоятельных тестирований и удалений предметов никакой ошибки в работе эндпоинта и логгера замечено не было.

@Georgon Georgon requested a review from petrCher April 9, 2026 22:50
@Georgon Georgon self-assigned this Apr 9, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 9, 2026

Summary

Tests Skipped Failures Errors Time
131 0 💤 0 ❌ 0 🔥 16.832s ⏱️

@petrCher petrCher merged commit e39b78b into main Apr 10, 2026
2 checks passed
@petrCher petrCher linked an issue Apr 10, 2026 that may be closed by this pull request
@petrCher petrCher deleted the issue-114/fantom_deleted_item branch April 10, 2026 14:11
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