138 lines
2.1 KiB
Python
138 lines
2.1 KiB
Python
from fastapi import FastAPI
|
|
from pydantic import BaseModel
|
|
from database import execute, fetch_one
|
|
|
|
DEFAULT_ROLE = "member"
|
|
|
|
def create_room(
|
|
room_name,
|
|
creator_id,
|
|
invite_code
|
|
):
|
|
query = """
|
|
INSERT INTO "main"."rooms"
|
|
("name", "owner_id", "invite_code")
|
|
VALUES (?, ?, ?);
|
|
"""
|
|
room_id = execute(
|
|
query,
|
|
(
|
|
room_name,
|
|
creator_id,
|
|
invite_code
|
|
)
|
|
)
|
|
|
|
query2 = """
|
|
SELECT id
|
|
FROM rooms
|
|
WHERE invite_code = ?
|
|
"""
|
|
room = fetch_one(
|
|
query2,
|
|
(
|
|
invite_code,
|
|
)
|
|
)
|
|
|
|
if room is None:
|
|
return None
|
|
|
|
room_id = room["id"]
|
|
role = DEFAULT_ROLE
|
|
query3 = """
|
|
INSERT INTO "main"."room_members"
|
|
("room_id", "user_id", "role")
|
|
VALUES (?, ?, ?);
|
|
"""
|
|
|
|
member_id = execute(
|
|
query3,
|
|
(
|
|
room_id,
|
|
creator_id,
|
|
role
|
|
)
|
|
)
|
|
|
|
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"]
|
|
|
|
# check dubbele join
|
|
existing = fetch_one(
|
|
"""
|
|
SELECT id
|
|
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
|
|
} |