Skip to content

Commit 19e49cc

Browse files
committed
finish swagger descriptions
1 parent 1823ae1 commit 19e49cc

5 files changed

Lines changed: 312 additions & 88 deletions

File tree

rental_backend/routes/event.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,28 @@ async def get_events(
1919
user=Depends(UnionAuth(scopes=["rental.event.view"], auto_error=False)),
2020
) -> list[EventGet]:
2121
"""
22-
Retrieves a list of events, with optional filtering.
22+
Возвращает список событий с возможностью фильтрации.
2323
24-
Scopes: `["rental.event.view"]`
24+
Эндпоинт позволяет получить все события или отфильтровать их по пользователю,
25+
администратору и сессии аренды.
2526
26-
- **admin_id**: Filter events by admin ID.
27-
- **session_id**: Filter events by session ID.
27+
Условия:
28+
- Пользователь должен быть аутентифицирован
29+
- Пользователь должен иметь право на просмотр событий
2830
29-
Returns a list of events.
31+
Скоупы:
32+
- `rental.event.view`
33+
34+
Параметры:
35+
- `user_id` — (необязательный) фильтр по идентификатору пользователя
36+
- `admin_id` — (необязательный) фильтр по идентификатору администратора
37+
- `session_id` — (необязательный) фильтр по идентификатору сессии аренды
38+
39+
Возвращает:
40+
- список объектов `Event`
41+
42+
Ошибки:
43+
- отсутствуют
3044
"""
3145
query = db.session.query(Event)
3246
if user_id is not None:

rental_backend/routes/item.py

Lines changed: 89 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,22 @@
1818
@item.get("", response_model=list[ItemGet])
1919
async def get_items(type_id: int = Query(None), user=Depends(UnionAuth())) -> list[ItemGet]:
2020
"""
21-
Retrieves a list of items. If `type_id` is specified, only items of that type are returned.
21+
Возвращает список предметов. При указании `type_id` возвращаются только предметы заданного типа.
2222
23-
- **type_id**: The ID of the item type (optional).
23+
Условия:
24+
- Пользователь должен быть аутентифицирован
2425
25-
Returns a list of items.
26+
Скоупы:
27+
- отсутствуют (доступно любому авторизованному пользователю)
28+
29+
Параметры:
30+
- `type_id` — (необязательный) идентификатор типа предмета для фильтрации
31+
32+
Возвращает:
33+
- список объектов `Item`
34+
35+
Ошибки:
36+
- отсутствуют
2637
"""
2738
query = Item.query(session=db.session)
2839
if type_id is not None:
@@ -34,15 +45,27 @@ async def get_items(type_id: int = Query(None), user=Depends(UnionAuth())) -> li
3445
@item.post("", response_model=ItemGet)
3546
async def create_item(item: ItemPost, user=Depends(UnionAuth(scopes=["rental.item.create"]))) -> ItemGet:
3647
"""
37-
Creates a new item.
48+
Создает новый предмет.
49+
50+
Перед созданием проверяется, существует ли тип предмета с указанным `type_id`.
51+
После успешного создания действие логируется как `CREATE_ITEM`.
3852
39-
Scopes: `["rental.item.create"]`
53+
Условия:
54+
- Пользователь должен быть аутентифицирован
55+
- Пользователь должен иметь право на создание предметов
56+
- Тип предмета с указанным `type_id` должен существовать
4057
41-
- **item**: The data for the new item.
58+
Скоупы:
59+
- `rental.item.create`
4260
43-
Returns the created item.
61+
Параметры:
62+
- `item` — данные нового предмета
4463
45-
Raises **ObjectNotFound** if the item type with the specified `type_id` is not found.
64+
Возвращает:
65+
- созданный объект `Item`
66+
67+
Ошибки:
68+
- `ObjectNotFound` — тип предмета с указанным `type_id` не найден
4669
"""
4770
item_type = ItemType.get(item.type_id, session=db.session)
4871
if item_type is None:
@@ -65,16 +88,28 @@ async def update_item(
6588
user=Depends(UnionAuth(scopes=["rental.item.patch"])),
6689
) -> ItemGet:
6790
"""
68-
Updates the availability status of an item by its ID.
91+
Обновляет статус доступности предмета по его идентификатору.
92+
93+
Эндпоинт позволяет изменить только поле `is_available`.
94+
После успешного обновления действие логируется как `UPDATE_ITEM`.
6995
70-
Scopes: `["rental.item.patch"]`
96+
Условия:
97+
- Пользователь должен быть аутентифицирован
98+
- Пользователь должен иметь право на изменение предметов
99+
- Предмет с указанным `id` должен существовать
71100
72-
- **id**: The ID of the item.
73-
- **is_available**: The new availability status for the item.
101+
Скоупы:
102+
- `rental.item.patch`
74103
75-
Returns the updated item.
104+
Параметры:
105+
- `id` — идентификатор предмета
106+
- `is_available` — новое значение доступности предмета
76107
77-
Raises **ObjectNotFound** if the item with the specified ID is not found.
108+
Возвращает:
109+
- обновленный объект `Item`
110+
111+
Ошибки:
112+
- `ObjectNotFound` — предмет с указанным `id` не найден
78113
"""
79114
item = Item.query(session=db.session).filter(Item.id == id).one_or_none()
80115
if item is not None:
@@ -95,15 +130,34 @@ async def delete_item(
95130
id: int, user=Depends(UnionAuth(scopes=["rental.item.delete"], allow_none=False))
96131
) -> StatusResponseModel:
97132
"""
98-
Deletes an item by its ID.
133+
Удаляет предмет по его идентификатору.
134+
135+
Перед удалением проверяется, что с предметом не связано активных,
136+
зарезервированных или просроченных сессий аренды.
137+
Если такие сессии существуют — удаление запрещено.
99138
100-
Scopes: `["rental.item.delete"]`
139+
При успешном удалении:
140+
- удаляется сам предмет
141+
- удаляются связанные сессии аренды (если они не помечены как удалённые)
142+
- удаляются связанные страйки и события
143+
- действие логируется как `DELETE_ITEM`
101144
102-
- **id**: The ID of the item.
145+
Условия:
146+
- Пользователь должен быть аутентифицирован
147+
- Пользователь должен иметь право на удаление предметов
148+
- У предмета не должно быть сессий в статусах ACTIVE / RESERVED / OVERDUE
103149
104-
Returns a status response.
150+
Скоупы:
151+
- `rental.item.delete`
105152
106-
Raises **ObjectNotFound** if the item with the specified ID is not found.
153+
Параметры:
154+
- `id` — идентификатор предмета
155+
156+
Возвращает:
157+
- объект `StatusResponseModel` со статусом удаления
158+
159+
Ошибки:
160+
- `ObjectNotFound` — предмет не найден или удаление запрещено из-за активных сессий
107161
"""
108162
rental_sessions = db.session.query(RentalSession).filter(RentalSession.item_id == id)
109163
session = rental_sessions.filter(
@@ -134,7 +188,22 @@ async def delete_item(
134188
@item.get("/{id}", response_model=ItemGet)
135189
async def get_item(id: int) -> ItemGet:
136190
"""
137-
Получает предмет по его идентификатору.
191+
Возвращает предмет по его идентификатору.
192+
193+
Условия:
194+
- отсутствуют (доступно без авторизации)
195+
196+
Скоупы:
197+
- отсутствуют
198+
199+
Параметры:
200+
- `id` — идентификатор предмета
201+
202+
Возвращает:
203+
- объект `Item`
204+
205+
Ошибки:
206+
- возможна ошибка валидации, если предмет с указанным `id` не найден
138207
"""
139208
item = Item.get(id=id, session=db.session)
140209
return ItemGet.model_validate(item)

0 commit comments

Comments
 (0)