This commit is contained in:
ben
2026-08-18 14:43:14 +02:00
parent 3d3270988c
commit 63b4ee2a6f
2 changed files with 340 additions and 1 deletions
+27
View File
@@ -37,6 +37,7 @@ from permissions import (
from rooms import (
create_room,
search_room,
accept_room,
get_rooms,
get_room,
@@ -375,6 +376,32 @@ def api_create_room(
**result,
}
@app.post(
"/search-room",
summary="Search for a room",
description="Searches for a room using its invite code.",
)
def api_search_room(
room: RoomSearch,
user_id: int = Depends(get_current_user),
):
room_name = search_room(
room.invite_code,
)
if room_name is None:
return {
"status": "failed",
"reason": "room_not_found",
}
return {
"status": "found",
"room_name": room_name,
}
@app.post(
"/join-room",
summary="Join a room",
+312
View File
@@ -53,3 +53,315 @@ def create_room(user_id: int, room_name: str, invite_code: str):
"room_id": room_id,
"member_id": member_id,
}
def search_room(invite_code: str):
room = fetch_one(
"""
SELECT name
FROM rooms
WHERE invite_code = ?
""",
(invite_code,)
)
if room is None:
return None
return room["name"]
def accept_room(user_id: int, invite_code: str):
room = fetch_one(
"""
SELECT id
FROM rooms
WHERE invite_code = ?
""",
(invite_code,)
)
if room is None:
return None
room_id = room["id"]
existing = fetch_one(
"""
SELECT *
FROM room_members
WHERE room_id = ?
AND user_id = ?
""",
(
room_id,
user_id,
)
)
if existing:
return None
member_id = execute(
"""
INSERT INTO room_members
(room_id, user_id, role)
VALUES (?, ?, ?)
""",
(
room_id,
user_id,
DEFAULT_ROLE,
)
)
return {
"room_id": room_id,
"member_id": member_id,
}
def get_rooms(user_id: int):
return fetch_all(
"""
SELECT
rooms.id,
rooms.name,
rooms.owner_id,
rooms.invite_code,
room_members.role
FROM rooms
JOIN room_members
ON rooms.id = room_members.room_id
WHERE room_members.user_id = ?
""",
(user_id,)
)
def delete_room(room_id: int):
room = fetch_one(
"""
SELECT id
FROM rooms
WHERE id = ?
""",
(room_id,)
)
if not room:
return {"error": "room not found"}
execute(
"""
DELETE FROM rooms
WHERE id = ?
""",
(room_id,)
)
return {"status": "deleted"}
def get_room(room_id: int, user_id: int):
room = fetch_one(
"""
SELECT
rooms.id,
rooms.name,
rooms.owner_id,
room_members.role
FROM rooms
JOIN room_members
ON rooms.id = room_members.room_id
WHERE rooms.id = ?
AND room_members.user_id = ?
""",
(
room_id,
user_id,
)
)
if room is None:
return None
members = fetch_all(
"""
SELECT
users.id,
users.username,
room_members.role
FROM room_members
JOIN users
ON users.id = room_members.user_id
WHERE room_members.room_id = ?
""",
(room_id,)
)
events = fetch_all(
"""
SELECT *
FROM events
WHERE room_id = ?
ORDER BY start_time
""",
(room_id,)
)
return {
"room": dict(room),
"members": [dict(member) for member in members],
"events": [dict(event) for event in events],
}
def get_room_members(room_id: int):
return fetch_all(
"""
SELECT
users.id,
users.username,
room_members.role
FROM room_members
JOIN users
ON users.id = room_members.user_id
WHERE room_members.room_id = ?
""",
(room_id,)
)
def leave_room(room_id: int, user_id: int):
execute(
"""
DELETE FROM room_members
WHERE room_id = ?
AND user_id = ?
""",
(
room_id,
user_id,
)
)
def change_room_name(room_id: int, new_name: str, user_id: int):
room = fetch_one(
"""
SELECT id
FROM rooms
WHERE id = ?
""",
(room_id,)
)
if not room:
return {
"status": "error",
"reason": "room_not_found",
}
execute(
"""
UPDATE rooms
SET name = ?
WHERE id = ?
""",
(
new_name,
room_id,
)
)
return {
"status": "updated",
"new_name": new_name,
"room_id": room_id,
"updated_by": user_id,
}
def regenerate_invite_code(room_id: int):
new_code = ''.join(
secrets.choice(string.ascii_uppercase + string.digits)
for _ in range(8)
)
execute(
"""
UPDATE rooms
SET invite_code = ?
WHERE id = ?
""",
(
new_code,
room_id,
)
)
return {
"status": "updated",
"room_id": room_id,
"invite_code": new_code,
}
def remove_room_member(room_id: int, user_id: int):
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
def update_member_role(room_id: int, user_id: int, role: str):
execute(
"""
UPDATE room_members
SET role = ?
WHERE room_id = ?
AND user_id = ?
""",
(
role,
room_id,
user_id,
)
)