From b6523067067cbb8ec97d5912f51e440d5d78e53b Mon Sep 17 00:00:00 2001 From: Georgon Date: Thu, 14 May 2026 19:26:52 +0300 Subject: [PATCH 1/2] get event/{event_id}/visit/me --- calendar_backend/routes/event/user_event.py | 33 +++++++++++++++++++-- calendar_backend/routes/models/visit.py | 5 ++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/calendar_backend/routes/event/user_event.py b/calendar_backend/routes/event/user_event.py index 8fd191cb..4559cff3 100644 --- a/calendar_backend/routes/event/user_event.py +++ b/calendar_backend/routes/event/user_event.py @@ -2,8 +2,8 @@ from fastapi import APIRouter, Depends, Query from fastapi_sqlalchemy import db -from calendar_backend.models import Event, EventUser -from calendar_backend.routes.models.visit import VisitResponse +from calendar_backend.models import Event, EventUser, EventUserStatus +from calendar_backend.routes.models.visit import UserVisitStatus, VisitResponse router = APIRouter(prefix="/event", tags=["Event: Visit"]) @@ -49,3 +49,32 @@ async def set_event_visit_status( ) return VisitResponse.model_validate(result) + + +@router.get("/{event_id}/visit/me", response_model=UserVisitStatus) +async def get_my_event_visit_status( + event_id: int, + auth: dict = Depends(UnionAuth()), +) -> UserVisitStatus: + """ + Получить статус посещения мероприятия для текущего пользователя. + Возвращает event_id и статус (no_status, если пользователь никак не отметился). + + Параметры: + event_id - id события + + Ошибки: + ObjectNotFound - нет события с таким event_id + """ + user_id = auth.get('id') + Event.get(event_id, session=db.session) + existing = ( + EventUser.get_all(session=db.session) + .filter(EventUser.event_id == event_id, EventUser.user_id == user_id) + .first() + ) + + if existing: + return UserVisitStatus(event_id=existing.event_id, status=existing.status) + else: + return UserVisitStatus(event_id=event_id, status=EventUserStatus.NO_STATUS) diff --git a/calendar_backend/routes/models/visit.py b/calendar_backend/routes/models/visit.py index 79622078..9dbcaab2 100644 --- a/calendar_backend/routes/models/visit.py +++ b/calendar_backend/routes/models/visit.py @@ -11,3 +11,8 @@ class VisitResponse(Base): user_id: int status: EventUserStatus updated_at: datetime.datetime + + +class UserVisitStatus(Base): + event_id: int + status: EventUserStatus From 3219e9928f6f42309f5220f5d3c83aacbfa24d9c Mon Sep 17 00:00:00 2001 From: Georgon Date: Thu, 14 May 2026 21:39:07 +0300 Subject: [PATCH 2/2] with model_validate --- calendar_backend/routes/event/user_event.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/calendar_backend/routes/event/user_event.py b/calendar_backend/routes/event/user_event.py index 4559cff3..1e3b55ea 100644 --- a/calendar_backend/routes/event/user_event.py +++ b/calendar_backend/routes/event/user_event.py @@ -75,6 +75,6 @@ async def get_my_event_visit_status( ) if existing: - return UserVisitStatus(event_id=existing.event_id, status=existing.status) + return UserVisitStatus.model_validate(existing) else: - return UserVisitStatus(event_id=event_id, status=EventUserStatus.NO_STATUS) + return UserVisitStatus.model_validate({"event_id": event_id, "status": EventUserStatus.NO_STATUS})