import random import string from flask import Blueprint, jsonify, request from ..models import db from ..models.session import Session, Participant from ..services.session_recipes import add_recipe_batch, serialize_recipe from ..services.session_settings import get_match_mode, get_required_likes, get_voting_round bp = Blueprint("sessions", __name__) def generate_code(): return "".join(random.choices(string.ascii_uppercase + string.digits, k=6)) def serialize_session(session): return { "id": session.id, "code": session.code, "status": session.status, "currentRecipeIndex": session.current_recipe_index, "participants": [ {"id": p.id, "name": p.name, "isHost": p.is_host} for p in session.participants ], "recipes": [serialize_recipe(recipe) for recipe in session.recipes], "matchedRecipeId": session.matched_recipe_id, "requiredLikes": get_required_likes(session), "matchMode": get_match_mode(session), "votingRound": get_voting_round(session), } @bp.post("") def create_session(): data = request.get_json() or {} name = (data.get("name") or "Host").strip() code = generate_code() while Session.query.filter_by(code=code).first(): code = generate_code() session = Session(code=code) db.session.add(session) db.session.flush() host = Participant(session_id=session.id, name=name, is_host=True) db.session.add(host) add_recipe_batch(session) db.session.commit() return jsonify({"session": serialize_session(session), "participantId": host.id}) @bp.post("//join") def join_session(code): data = request.get_json() or {} name = (data.get("name") or "Gast").strip() session = Session.query.filter_by(code=code.upper()).first_or_404() if session.status != "waiting": return jsonify({"error": "Session wurde bereits gestartet."}), 409 participant = Participant(session_id=session.id, name=name, is_host=False) db.session.add(participant) db.session.commit() return jsonify({"session": serialize_session(session), "participantId": participant.id}) @bp.get("/") def get_session(code): session = Session.query.filter_by(code=code.upper()).first_or_404() return jsonify({"session": serialize_session(session)})