diff --git a/backend/events.py b/backend/events.py index 1936d82..3a1d995 100644 --- a/backend/events.py +++ b/backend/events.py @@ -2,19 +2,30 @@ from database import execute from database import fetch_all, fetch_one -def get_user_events(user_id): - +def get_user_events(user_id, date_from=None, date_to=None): query = """ - SELECT events.* - FROM events - JOIN room_members - ON events.room_id = room_members.room_id - WHERE room_members.user_id = ? + SELECT events.* + FROM events + JOIN room_members + ON events.room_id = room_members.room_id + WHERE room_members.user_id = ? """ + params = [user_id] + + if date_from: + query += " AND events.start_time >= ?" + params.append(date_from) + + if date_to: + query += " AND events.start_time <= ?" + params.append(date_to) + + query += " ORDER BY events.start_time" + return fetch_all( query, - (user_id,) + tuple(params), ) def create_event( @@ -166,19 +177,29 @@ def update_event( event_id, ), ) - -def get_room_events(room_id): - from database import fetch_all - - return fetch_all( - """ +def get_room_events(room_id, date_from=None, date_to=None): + query = """ SELECT * FROM events WHERE room_id = ? - ORDER BY start_time - """, - (room_id,) + """ + + params = [room_id] + + if date_from: + query += " AND start_time >= ?" + params.append(date_from) + + if date_to: + query += " AND start_time <= ?" + params.append(date_to) + + query += " ORDER BY start_time" + + return fetch_all( + query, + tuple(params), ) def get_event(event_id): diff --git a/backend/main.py b/backend/main.py index 2733920..b4bfa8b 100644 --- a/backend/main.py +++ b/backend/main.py @@ -608,10 +608,21 @@ def delete_room( @app.get( "/rooms/{room_id}/events", summary="Get room events", - description="Returns all events belonging to a room. The authenticated user must be a member.", + description="Returns events belonging to a room, optionally filtered by date.", ) + def api_room_events( room_id: int, + date_from: str | None = Query( + None, + alias="from", + description="Only return events starting on or after this date.", + ), + date_to: str | None = Query( + None, + alias="to", + description="Only return events starting on or before this date.", + ), user_id: int = Depends(get_current_user), ): if not has_role(room_id, user_id, "member"): @@ -620,13 +631,16 @@ def api_room_events( detail="room member permission required", ) - events = get_room_events(room_id) + events = get_room_events( + room_id, + date_from, + date_to, + ) return { "events": [dict(event) for event in events], } - @app.post( "/events", summary="Create an event", @@ -660,16 +674,29 @@ def api_create_event( "event_id": event_id, } - @app.get( "/events", summary="Get user's events", - description="Returns events from rooms the authenticated user belongs to.", + description="Returns events from rooms the authenticated user belongs to, optionally filtered by date.", ) def get_events( + date_from: str | None = Query( + None, + alias="from", + description="Only return events starting on or after this date.", + ), + date_to: str | None = Query( + None, + alias="to", + description="Only return events starting on or before this date.", + ), user_id: int = Depends(get_current_user), ): - events = get_user_events(user_id) + events = get_user_events( + user_id, + date_from, + date_to, + ) return { "events": [dict(event) for event in events],