Files
calendar/backend/rooms.py
T
2026-08-04 10:11:46 +02:00

204 lines
3.4 KiB
Python

from fastapi import FastAPI
from pydantic import BaseModel
from database import execute, fetch_one, fetch_all
DEFAULT_ROLE = "member"
def create_room(user_id, room_name, invite_code):
room_id = execute(
"""
INSERT INTO rooms (name, owner_id, invite_code)
VALUES (?, ?, ?)
""",
(
room_name,
user_id,
invite_code
)
)
member_id = execute(
"""
INSERT INTO room_members (room_id, user_id, role)
VALUES (?, ?, ?)
""",
(
room_id,
user_id,
"owner"
)
)
return {
"room_id": room_id,
"member_id": member_id
}
def search_room(
invite_code
):
query = """
SELECT name
FROM rooms
WHERE invite_code = ?
"""
room = fetch_one(
query,
(
invite_code,
)
)
if room is None:
return None
return room["name"]
def accept_room(user_id, invite_code):
query = """
SELECT id
FROM rooms
WHERE invite_code = ?
"""
room = fetch_one(
query,
(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
query = """
INSERT INTO room_members
(room_id, user_id, role)
VALUES (?, ?, ?)
"""
member_id = execute(
query,
(
room_id,
user_id,
"member"
)
)
return {
"room_id": room_id,
"member_id": member_id
}
def get_rooms(user_id):
query = """
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 = ?
"""
rooms = fetch_all(
query,
(
user_id,
)
)
return rooms
def delete_room(room_id):
execute(
"""
DELETE FROM rooms
WHERE id = ?
""",
(room_id,)
)
return {"status":"deleted"}
def get_room(room_id, user_id):
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]
}