11from auth_lib .fastapi import UnionAuth
2- from fastapi import APIRouter , Depends , HTTPException , status
2+ from fastapi import APIRouter , Depends , HTTPException , status , Query
33from fastapi_sqlalchemy import db
44
55from calendar_backend .exceptions import ObjectNotFound
1212
1313@router .post ("/{event_id}/visit" , response_model = VisitResponse )
1414async def set_event_visit_status (
15- event_id : int , visit : VisitRequest , auth : dict = Depends (UnionAuth (scopes = []))
16- ) -> VisitResponse :
15+ event_id : int ,
16+ auth : dict = Depends (UnionAuth ()),
17+ visit : str = Query (enum = ["no_status" , "going" , "not_going" , "attended" ], default = "no_status" ),
18+ ) -> VisitResponse :
1719 """
1820 Отметить посещение мероприятия для текущего пользователя.
1921 """
2022 user_id = auth .get ('id' )
21- if user_id is None :
22- raise HTTPException (
23- status_code = status .HTTP_401_UNAUTHORIZED ,
24- detail = "User ID not found in authentication data" ,
25- )
2623
27- try :
28- _ = Event .get (event_id , with_deleted = False , session = db .session )
29- except ObjectNotFound :
30- raise HTTPException (
31- status_code = status .HTTP_404_NOT_FOUND ,
32- detail = f"Event with id { event_id } not found" ,
33- )
24+ Event .get (event_id , with_deleted = False , session = db .session )
3425
3526 existing = (
36- db .session .query (EventUser )
37- .filter (
38- EventUser .event_id == event_id ,
39- EventUser .user_id == user_id ,
40- EventUser .is_deleted == False ,
41- )
27+ EventUser .get_all (session = db .session )
28+ .filter (EventUser .event_id == event_id , EventUser .user_id == user_id )
4229 .first ()
4330 )
4431
4532 if existing :
46- existing .status = visit .status
47- db .session .flush ()
48- result = existing
33+ result = EventUser .update (existing .id , session = db .session , status = visit )
4934 else :
5035 result = EventUser .create (
5136 session = db .session ,
5237 event_id = event_id ,
5338 user_id = user_id ,
54- status = visit . status ,
39+ status = visit ,
5540 )
5641
5742 db .session .commit ()
58-
59- return VisitResponse (
60- id = result .id ,
61- event_id = result .event_id ,
62- user_id = result .user_id ,
63- status = result .status ,
64- updated_at = result .updated_at .isoformat (),
65- )
43+ return VisitResponse .model_validate (result )
0 commit comments