|
2 | 2 | from fastapi import APIRouter, Depends, Query |
3 | 3 | from fastapi_sqlalchemy import db |
4 | 4 |
|
5 | | -from calendar_backend.models import Event, EventUser |
6 | | -from calendar_backend.routes.models.visit import VisitResponse |
| 5 | +from calendar_backend.models import Event, EventUser, EventUserStatus |
| 6 | +from calendar_backend.routes.models.visit import UserVisitStatus, VisitResponse |
7 | 7 |
|
8 | 8 |
|
9 | 9 | router = APIRouter(prefix="/event", tags=["Event: Visit"]) |
@@ -49,3 +49,32 @@ async def set_event_visit_status( |
49 | 49 | ) |
50 | 50 |
|
51 | 51 | return VisitResponse.model_validate(result) |
| 52 | + |
| 53 | + |
| 54 | +@router.get("/{event_id}/visit/me", response_model=UserVisitStatus) |
| 55 | +async def get_my_event_visit_status( |
| 56 | + event_id: int, |
| 57 | + auth: dict = Depends(UnionAuth()), |
| 58 | +) -> UserVisitStatus: |
| 59 | + """ |
| 60 | + Получить статус посещения мероприятия для текущего пользователя. |
| 61 | + Возвращает event_id и статус (no_status, если пользователь никак не отметился). |
| 62 | +
|
| 63 | + Параметры: |
| 64 | + event_id - id события |
| 65 | +
|
| 66 | + Ошибки: |
| 67 | + ObjectNotFound - нет события с таким event_id |
| 68 | + """ |
| 69 | + user_id = auth.get('id') |
| 70 | + Event.get(event_id, session=db.session) |
| 71 | + existing = ( |
| 72 | + EventUser.get_all(session=db.session) |
| 73 | + .filter(EventUser.event_id == event_id, EventUser.user_id == user_id) |
| 74 | + .first() |
| 75 | + ) |
| 76 | + |
| 77 | + if existing: |
| 78 | + return UserVisitStatus.model_validate(existing) |
| 79 | + else: |
| 80 | + return UserVisitStatus.model_validate({"event_id": event_id, "status": EventUserStatus.NO_STATUS}) |
0 commit comments