55 lines
1.0 KiB
Python
55 lines
1.0 KiB
Python
import re
|
|
import secrets
|
|
import string
|
|
|
|
from database import execute, fetch_one, fetch_all
|
|
|
|
DEFAULT_ROLE = "member"
|
|
|
|
|
|
def validate_invite_code(invite_code: str):
|
|
if not 6 <= len(invite_code) <= 32:
|
|
return False
|
|
|
|
if not re.fullmatch(r"[A-Za-z0-9]+", invite_code):
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
def create_room(user_id: int, room_name: str, invite_code: str):
|
|
|
|
if not validate_invite_code(invite_code):
|
|
return {
|
|
"status": "failed",
|
|
"reason": "invalid_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,
|
|
} |