update time filtering

This commit is contained in:
ben
2026-08-17 17:50:36 +02:00
parent e0eb2d5d8f
commit 2c66d6b075
2 changed files with 71 additions and 23 deletions
+38 -17
View File
@@ -2,19 +2,30 @@ from database import execute
from database import fetch_all, fetch_one 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 = """ query = """
SELECT events.* SELECT events.*
FROM events FROM events
JOIN room_members JOIN room_members
ON events.room_id = room_members.room_id ON events.room_id = room_members.room_id
WHERE room_members.user_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( return fetch_all(
query, query,
(user_id,) tuple(params),
) )
def create_event( def create_event(
@@ -167,18 +178,28 @@ def update_event(
), ),
) )
def get_room_events(room_id): def get_room_events(room_id, date_from=None, date_to=None):
query = """
from database import fetch_all
return fetch_all(
"""
SELECT * SELECT *
FROM events FROM events
WHERE room_id = ? 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): def get_event(event_id):
+33 -6
View File
@@ -608,10 +608,21 @@ def delete_room(
@app.get( @app.get(
"/rooms/{room_id}/events", "/rooms/{room_id}/events",
summary="Get room 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( def api_room_events(
room_id: int, 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), user_id: int = Depends(get_current_user),
): ):
if not has_role(room_id, user_id, "member"): if not has_role(room_id, user_id, "member"):
@@ -620,13 +631,16 @@ def api_room_events(
detail="room member permission required", detail="room member permission required",
) )
events = get_room_events(room_id) events = get_room_events(
room_id,
date_from,
date_to,
)
return { return {
"events": [dict(event) for event in events], "events": [dict(event) for event in events],
} }
@app.post( @app.post(
"/events", "/events",
summary="Create an event", summary="Create an event",
@@ -660,16 +674,29 @@ def api_create_event(
"event_id": event_id, "event_id": event_id,
} }
@app.get( @app.get(
"/events", "/events",
summary="Get user's 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( 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), user_id: int = Depends(get_current_user),
): ):
events = get_user_events(user_id) events = get_user_events(
user_id,
date_from,
date_to,
)
return { return {
"events": [dict(event) for event in events], "events": [dict(event) for event in events],