transient.chat/blueprints/rooms.py

61 lines
1.8 KiB
Python
Raw Normal View History

2026-05-12 23:50:49 +00:00
from flask import Blueprint, request, jsonify
from models.state import (
room_users,
messages,
public_chat_rooms,
regional_chat_rooms,
topical_chat_rooms,
video_state,
)
rooms_bp = Blueprint("rooms", __name__)
@rooms_bp.route("/rooms", methods=["GET", "POST"])
def get_or_create_rooms():
if request.method == "POST":
data = request.get_json()
room_name = data.get("name", "").strip()
if not room_name:
return jsonify({"error": "Room name required"}), 400
all_rooms = regional_chat_rooms + topical_chat_rooms + public_chat_rooms
if room_name in all_rooms:
return jsonify({"error": "Room already exists"}), 400
public_chat_rooms.append(room_name)
from models.database import db_add_public_room
db_add_public_room(room_name)
2026-05-12 23:50:49 +00:00
return jsonify({"name": room_name})
active_only = request.args.get("activeOnly") == "true"
def build_room_data(room_list, active=False):
result = []
for room in room_list:
users = room_users.get(room, {})
if active and not users:
continue
result.append(
{
"name": room,
"users": len(users),
"type": "watchparty" if room in video_state else "chat",
}
)
return result
all_users = set()
for users in room_users.values():
all_users.update(users.keys())
return jsonify(
{
"regional": build_room_data(regional_chat_rooms, active_only),
"topical": build_room_data(topical_chat_rooms, active_only),
"public": build_room_data(public_chat_rooms, active_only),
"unique_users": len(all_users),
}
)