@@ -63,9 +63,10 @@ def build_text_filter(item):
@router.get ( " /events " , tags = [ " events " ] , response_model = list [ events . EventOut ] )
@router.get ( " /events " , tags = [ " events " ] , response_model = list [ events . EventOutWithInterested ] )
async def read_events (
authorize : Annotated [ bool , Depends ( permissions_checker . PermissionChecker ( roles = [ " Admin " , " User " ] ) ) ] ,
user : users . User = Depends ( users_token . get_current_user ) , # 👈 récupère l’ utilisateur courant
skip : int = 0 ,
limit : int = 20 ,
id_event : str | None = None ,
@@ -127,7 +128,9 @@ async def read_events(
event_repository = events . EventRepository ( database = database . database )
list_events = [ ]
for event_index in event_repository . find_by ( object_search , limit = limit , skip = skip , sort = [ ( " start_date " , 1 ) ] ) :
event = events . EventOut (
interested_users = event_index . interested_users
is_interested = ObjectId ( user . id ) in interested_users
event = events . EventOutWithInterested (
id = event_index . id ,
tags = event_index . tags ,
imgUrl = event_index . imgUrl ,
@@ -138,16 +141,19 @@ async def read_events(
start_date = event_index . start_date ,
end_date = event_index . end_date ,
ticket = event_index . ticket ,
link = event_index . link
link = event_index . link ,
interested = is_interested ,
interested_count = len ( interested_users )
)
list_events . append ( event )
return list_events
@router.get ( " /events/search " , tags = [ " events " ] , response_model = list [ events . EventOut ] )
@router.get ( " /events/search " , tags = [ " events " ] , response_model = list [ events . EventOutWithInterested ] )
async def search_events (
authorize : Annotated [ bool , Depends ( permissions_checker . PermissionChecker ( roles = [ " Admin " , " User " ] ) ) ] ,
user : users . User = Depends ( users_token . get_current_user ) , # 👈 récupère l’ utilisateur courant
skip : int = 0 ,
limit : int = 20 ,
item : Union [ str , None ] = None ,
@@ -203,7 +209,9 @@ async def search_events(
event_repository = events . EventRepository ( database = database . database )
list_events = [ ]
for event_index in event_repository . find_by ( object_search , limit = limit , skip = skip , sort = [ ( " start_date " , 1 ) ] ) :
event = events . EventOut (
interested_users = event_index . interested_users
is_interested = ObjectId ( user . id ) in interested_users
event = events . EventOutWithInterested (
id = event_index . id ,
tags = event_index . tags ,
imgUrl = event_index . imgUrl ,
@@ -214,7 +222,9 @@ async def search_events(
start_date = event_index . start_date ,
end_date = event_index . end_date ,
link = event_index . link ,
ticket = event_index . ticket
ticket = event_index . ticket ,
interested = is_interested ,
interested_count = len ( interested_users )
)
list_events . append ( event )
@@ -243,7 +253,7 @@ async def read_events_count(authorize: Annotated[bool, Depends(permissions_check
return response
@router.get ( " /events/ {item_id} " , tags = [ " events " ] , response_model = events . Event )
@router.get ( " /events/ {item_id} " , tags = [ " events " ] , response_model = events . EventOut )
async def read_events_id ( item_id : str , authorize : Annotated [ bool , Depends ( permissions_checker . PermissionChecker ( roles = [ " Admin " ] ) ) ] ) :
event_repository = events . EventRepository ( database = database . database )
event = event_repository . find_one_by_id ( ObjectId ( item_id ) )
@@ -442,4 +452,27 @@ async def patch_events_id(item_id : str, authorize: Annotated[bool, Depends(perm
event_repository . save ( event )
content = { " message " : " event is enabled " }
response = JSONResponse ( content = content )
return response
return response
@router.post ( " /events/ {event_id} /interest " , tags = [ " events " ] )
async def toggle_interest ( event_id : str , user : users . User = Depends ( users_token . get_current_user ) ) :
event_repository = events . EventRepository ( database = database . database )
event = event_repository . find_one_by_id ( ObjectId ( event_id ) )
if not event :
raise HTTPException ( status_code = 404 , detail = " Event not found " )
interested_users = event . interested_users
user_obj_id = ObjectId ( user . id )
if user_obj_id in interested_users :
# Retirer l’ utilisateur
interested_users . remove ( user_obj_id )
else :
# Ajouter l’ utilisateur
interested_users . append ( user_obj_id )
event . interested_users = interested_users
event_repository . save ( event )
return { " event_id " : event_id , " interested " : user_obj_id in interested_users , " interested_count " : len ( interested_users ) }