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") recipes = db.relationship("Recipe", backref="session", cascade="all, delete-orphan", 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 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"), )