diff --git a/backend/main.py b/backend/main.py index 91d7691..bda78a7 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,3 +1,5 @@ +# GEEN SQL IN MAIN.PY, DIT IS DE API WRAPPER, HOU HET OVERZICHTELIJK!! + from fastapi import FastAPI, Depends, HTTPException from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import PlainTextResponse @@ -31,6 +33,7 @@ from rooms import ( delete_room as delete_room_db, change_room_name, regenerate_invite_code, + remove_room_member, ) from events import ( @@ -368,6 +371,29 @@ def api_leave_room( "status": "left", } +@app.delete("/rooms/{room_id}/members/{user_id}") +def remove_user_as_admin( + room_id: int, + user_id: int, + current_user: int = Depends(get_current_user), +): + if not has_role(room_id, current_user, "admin"): + raise HTTPException( + status_code=403, + detail="admin permission required", + ) + + if not remove_room_member(room_id, user_id): + raise HTTPException( + status_code=404, + detail="user is not a member of this room", + ) + + return { + "status": "removed", + "user_id": user_id, + } + # some settings @app.patch("/rooms/{room_id}") diff --git a/backend/rooms.py b/backend/rooms.py index db128ff..02580c0 100644 --- a/backend/rooms.py +++ b/backend/rooms.py @@ -302,4 +302,27 @@ def regenerate_invite_code(room_id): "status": "updated", "room_id": room_id, "invite_code": new_code - } \ No newline at end of file + } + +def remove_room_member(room_id, user_id): + member = fetch_one( + """ + SELECT 1 + FROM room_members + WHERE room_id = ? AND user_id = ? + """, + (room_id, user_id) + ) + + if member is None: + return False + + execute( + """ + DELETE FROM room_members + WHERE room_id = ? AND user_id = ? + """, + (room_id, user_id) + ) + + return True \ No newline at end of file