init
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
import random
|
||||
import string
|
||||
from flask import Blueprint, jsonify, request
|
||||
from ..models import db
|
||||
from ..models.session import Session, Participant, Recipe
|
||||
from ..services.recipes import get_recipes
|
||||
|
||||
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": [
|
||||
{
|
||||
"id": r.id,
|
||||
"title": r.title,
|
||||
"url": r.url,
|
||||
"imageUrl": r.image_url,
|
||||
"meta": r.meta,
|
||||
"position": r.position,
|
||||
}
|
||||
for r in session.recipes
|
||||
],
|
||||
"matchedRecipeId": session.matched_recipe_id,
|
||||
}
|
||||
|
||||
|
||||
@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)
|
||||
|
||||
for index, recipe_data in enumerate(get_recipes()):
|
||||
db.session.add(Recipe(session_id=session.id, position=index, **recipe_data))
|
||||
|
||||
db.session.commit()
|
||||
return jsonify({"session": serialize_session(session), "participantId": host.id})
|
||||
|
||||
|
||||
@bp.post("/<code>/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("/<code>")
|
||||
def get_session(code):
|
||||
session = Session.query.filter_by(code=code.upper()).first_or_404()
|
||||
return jsonify({"session": serialize_session(session)})
|
||||
Reference in New Issue
Block a user