Files
rezept_finder/backend/app/models/session.py
T
2026-06-09 23:10:17 +02:00

71 lines
2.8 KiB
Python

from datetime import datetime
from . import db
class Session(db.Model):
__tablename__ = "sessions"
id = db.Column(db.Integer, primary_key=True)
code = db.Column(db.String(6), unique=True, nullable=False, index=True)
status = db.Column(db.String(20), nullable=False, default="waiting")
current_recipe_index = db.Column(db.Integer, nullable=False, default=0)
matched_recipe_id = db.Column(db.Integer, db.ForeignKey("recipes.id"), nullable=True)
created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
participants = db.relationship("Participant", backref="session", cascade="all, delete-orphan")
settings = db.relationship("SessionSettings", backref="session", cascade="all, delete-orphan", uselist=False)
recipes = db.relationship(
"Recipe",
backref="session",
cascade="all, delete-orphan",
foreign_keys="Recipe.session_id",
order_by="Recipe.position",
)
class Participant(db.Model):
__tablename__ = "participants"
id = db.Column(db.Integer, primary_key=True)
session_id = db.Column(db.Integer, db.ForeignKey("sessions.id"), nullable=False)
name = db.Column(db.String(80), nullable=False)
is_host = db.Column(db.Boolean, nullable=False, default=False)
created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
class SessionSettings(db.Model):
__tablename__ = "session_settings"
id = db.Column(db.Integer, primary_key=True)
session_id = db.Column(db.Integer, db.ForeignKey("sessions.id"), nullable=False, unique=True)
required_likes = db.Column(db.Integer, nullable=False, default=2)
match_mode = db.Column(db.String(20), nullable=False, default="first_match")
voting_round = db.Column(db.Integer, nullable=False, default=1)
class Recipe(db.Model):
__tablename__ = "recipes"
id = db.Column(db.Integer, primary_key=True)
session_id = db.Column(db.Integer, db.ForeignKey("sessions.id"), nullable=False)
position = db.Column(db.Integer, nullable=False)
title = db.Column(db.String(255), nullable=False)
url = db.Column(db.Text, nullable=False)
image_url = db.Column(db.Text, nullable=True)
meta = db.Column(db.String(255), nullable=True)
class Vote(db.Model):
__tablename__ = "votes"
id = db.Column(db.Integer, primary_key=True)
session_id = db.Column(db.Integer, db.ForeignKey("sessions.id"), nullable=False)
participant_id = db.Column(db.Integer, db.ForeignKey("participants.id"), nullable=False)
recipe_id = db.Column(db.Integer, db.ForeignKey("recipes.id"), nullable=False)
vote = db.Column(db.String(3), nullable=False) # yes/no
created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
__table_args__ = (
db.UniqueConstraint("participant_id", "recipe_id", name="uq_participant_recipe_vote"),
)