@@ -66,6 +66,7 @@ def build_text_filter(item):
@router.get ( " /events " , tags = [ " events " ] , response_model = list [ events . EventOut ] )
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 ,
@@ -84,8 +85,7 @@ async def read_events(
status_code = status . HTTP_400_BAD_REQUEST ,
detail = " `skip` should be >= 0 and `limit` should be > 0 and greater than `skip`. " ,
)
limit = limit + skip
skip = limit * skip
# Initialize filters
filters = [ ]
@@ -127,8 +127,10 @@ async def read_events(
# Fetch and return results
event_repository = events . EventRepository ( database = database . database )
list_events = [ ]
for event_index in event_repository . find_by ( object_search , limit = limit , skip = skip ) :
event = events . EventOut (
for event_index in event_repository . find_by ( object_search , limit = limit , skip = skip , sort = [ ( " start_date " , 1 ) ] ):
interested_users = getattr ( 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,6 +140,10 @@ async def read_events(
status = event_index . status ,
start_date = event_index . start_date ,
end_date = event_index . end_date ,
ticket = event_index . ticket ,
link = event_index . link ,
interested = is_interested ,
interested_count = len ( interested_users )
)
list_events . append ( event )
@@ -147,6 +153,7 @@ async def read_events(
@router.get ( " /events/search " , tags = [ " events " ] , response_model = list [ events . EventOut ] )
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 ,
@@ -166,7 +173,7 @@ async def search_events(
status_code = status . HTTP_400_BAD_REQUEST ,
detail = " `skip` should be >= 0 and `limit` should be > 0 and greater than `skip`. " ,
)
limit = limit + skip
skip = limit * skip
# Initialize filters
filters = [ { " status " : { " $eq " : status } } ]
@@ -201,8 +208,10 @@ async def search_events(
# Fetch and return results
event_repository = events . EventRepository ( database = database . database )
list_events = [ ]
for event_index in event_repository . find_by ( object_search , limit = limit , skip = skip ) :
event = events . EventOut (
for event_index in event_repository . find_by ( object_search , limit = limit , skip = skip , sort = [ ( " start_date " , 1 ) ] ):
interested_users = getattr ( 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 ,
@@ -212,6 +221,10 @@ async def search_events(
status = event_index . status ,
start_date = event_index . start_date ,
end_date = event_index . end_date ,
link = event_index . link ,
ticket = event_index . ticket ,
interested = is_interested ,
interested_count = len ( interested_users )
)
list_events . append ( event )
@@ -225,7 +238,7 @@ async def read_users_me(current_user: Annotated[users.User, Depends(users_token.
listOrganizers = [ ]
for event_index in event_repository . find_by ( { " organizers " : { " $eq " : current_user . username } } , limit = limit , skip = skip ) :
event = events . EventOut ( id = event_index . id , name = event_index . name , tags = event_index . tags , imgUrl = event_index . imgUrl , description = event_index . description , place = event_index . place , status = event_index . status , start_date = event_index . start_date , end_date = event_index . end_date )
event = events . EventOut ( id = event_index . id , name = event_index . name , ticket = event_index . ticket , link = event_index . link , tags = event_index . tags , imgUrl = event_index . imgUrl , description = event_index . description , place = event_index . place , status = event_index . status , start_date = event_index . start_date , end_date = event_index . end_date )
listOrganizers . append ( event )
content = { " organizers " : listOrganizers }
@@ -315,6 +328,8 @@ async def update_events_me(item_id: str, current_user: Annotated[users.User, Dep
event . end_date = eventSingle . end_date
event . latitude = eventSingle . latitude
event . longitude = eventSingle . longitude
event . link = eventSingle . link
event . ticket = eventSingle . ticket
event . updated_at = datetime . today ( )
event . imgUrl = eventSingle . imgUrl
event_repository . save ( event )
@@ -350,6 +365,8 @@ async def update_events(authorize: Annotated[bool, Depends(permissions_checker.P
event . latitude = eventSingle . latitude
event . longitude = eventSingle . longitude
event . imgUrl = eventSingle . imgUrl
event . link = eventSingle . link
event . ticket = eventSingle . ticket
event . tags = eventSingle . tags
for tag_name in eventSingle . tags :
tag = tags_repository . find_one_by ( { " name " : { ' $eq ' : tag_name } } )
@@ -359,7 +376,7 @@ async def update_events(authorize: Annotated[bool, Depends(permissions_checker.P
event . status = 1
event . created_at = datetime . today ( )
event_repository . save ( event )
content = { " message " : " event is created " }
content = { " message " : " event created " }
response = JSONResponse ( content = content , status_code = status . HTTP_201_CREATED )
return response
@@ -386,6 +403,8 @@ async def update_events_id(item_id: str, authorize: Annotated[bool, Depends(perm
event . start_date = eventSingle . start_date
event . end_date = eventSingle . end_date
event . organizers = eventSingle . organizers
event . link = eventSingle . link
event . ticket = eventSingle . ticket
event . tags = eventSingle . tags
for tag_name in eventSingle :
tag = tags_repository . find_one_by ( { " name " : { ' $eq ' : tag_name } } )
@@ -433,4 +452,26 @@ 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 . get ( ObjectId ( event_id ) )
if not event :
raise HTTPException ( status_code = 404 , detail = " Event not found " )
interested_users = getattr ( 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_repository . update ( { " _id " : ObjectId ( event_id ) } , { " $set " : { " interested_users " : interested_users } } )
return { " event_id " : event_id , " interested " : user_obj_id in interested_users , " interested_count " : len ( interested_users ) }