From 48e3241e8e940b6a522396882bbb735887897479 Mon Sep 17 00:00:00 2001 From: Leonardo Segala Date: Fri, 1 Aug 2025 22:32:44 +0200 Subject: [PATCH] Add room list & room creation endpoints --- backend/src/app.py | 62 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/backend/src/app.py b/backend/src/app.py index 5f2b1f6..69d7558 100644 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -1,6 +1,5 @@ import dotenv from flask import Flask, Response, jsonify, request - from flask_cors import CORS from flask_socketio import SocketIO, emit @@ -18,19 +17,7 @@ socketio = SocketIO(app) CORS(app) -ROOMS: dict[int, Room] = { - 1234: Room( - 1234, - (0.0, 1.0), - "Test Room", - None, - {"Rock", "Metal"}, - {}, - [], - [Song(mbid="test", title="", artist="<artist placeholder>", tags=["Metal"], image_id="img-id", youtube_id="yt-id")], - playing_idx=1, - ) -} # { room_id: room, ... } +ROOMS: dict[int, Room] = {} # { room_id: room, ... } def error(msg: str, status: int = 400) -> Response: @@ -83,11 +70,56 @@ def queue_next(): # room.renew_queue() emit("update_songs", {"songs": [1, 2, 3]}, broadcast=True, namespace="/") - return {"success": True, "ended": True, "index": room.playing_idx, "queue": []} + return {"success": True, "ended": True, "index": room.playing_idx, "queue": room.playing} return {"success": True, "ended": False, "index": room.playing_idx} +@app.post("/api/room/new") +def room_new(): + if (room_name := request.args.get("name")) is None: + return error("Missing room name") + + if (room_cords := request.args.get("coords")) is None: + return error("Missing room coords") + + if room_pin := request.args.get("pin"): + room_pin = int(room_pin) + else: + room_pin = None + + lat, lon = room_cords.split(",") + + room = Room( + id=max(ROOMS or [0]) + 1, # + coord=(float(lat), float(lon)), + name=room_name, + pin=room_pin, + tags=set([tag for tag in request.args.get("tags", "").split(",") if tag]), + songs={}, + history=[], + playing=[], + playing_idx=-1, + ) + + ROOMS[room.id] = room + + return {"success": True, "room_id": room.id} + + +@app.get("/api/room") +def room(): + return [ + { + "id": room.id, + "name": room.name, + "private": room.pin is not None, + "coords": room.coord, + } + for room in ROOMS.values() + ] + + init_db() if __name__ == "__main__": socketio.run(app, debug=True)