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): room = execute( """ 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, 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] } def get_room_members(room_id): return fetch_all( """ SELECT users.id, users.username FROM room_members JOIN users ON users.id = room_members.user_id WHERE room_members.room_id = ? """, (room_id,) ) def leave_room(room_id, user_id): from database import execute execute( """ DELETE FROM room_members WHERE room_id = ? AND user_id = ? """, ( room_id, user_id ) ) def change_room_name(room_id, new_name, user_id): 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, new_code): execute( """ UPDATE rooms SET invite_code = ? WHERE id = ? """, ( new_code, room_id ) ) return { "status": "updated", "room_id": room_id, "invite_code": new_code }