from datetime import datetime from . import db # ---- Referenz-/Nachschlagetabellen (feste Liste) ---- movie_genres = db.Table( "movie_genres", db.Column("movie_id", db.Integer, db.ForeignKey("movies.id"), primary_key=True), db.Column("genre_id", db.Integer, db.ForeignKey("genres.id"), primary_key=True), ) movie_platforms = db.Table( "movie_platforms", db.Column("movie_id", db.Integer, db.ForeignKey("movies.id"), primary_key=True), db.Column("platform_id", db.Integer, db.ForeignKey("platforms.id"), primary_key=True), ) class Genre(db.Model): __tablename__ = "genres" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(60), unique=True, nullable=False) class Platform(db.Model): __tablename__ = "platforms" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(60), unique=True, nullable=False) class Studio(db.Model): __tablename__ = "studios" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(60), unique=True, nullable=False) class Universe(db.Model): __tablename__ = "universes" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(60), unique=True, nullable=False) # ---- Haupttabelle ---- class Movie(db.Model): __tablename__ = "movies" id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(200), nullable=False, index=True) year = db.Column(db.Integer, nullable=False) fsk = db.Column(db.Integer, nullable=True) # 0, 6, 12, 16, 18 studio_id = db.Column(db.Integer, db.ForeignKey("studios.id"), nullable=True) director = db.Column(db.String(120), nullable=True) budget = db.Column(db.Integer, nullable=True) # in USD universe_id = db.Column(db.Integer, db.ForeignKey("universes.id"), nullable=True) studio = db.relationship("Studio") universe = db.relationship("Universe") genres = db.relationship("Genre", secondary=movie_genres, lazy="joined") platforms = db.relationship("Platform", secondary=movie_platforms, lazy="joined") # ---- Spieler & Runden ---- class Player(db.Model): __tablename__ = "players" id = db.Column(db.Integer, primary_key=True) nickname = db.Column(db.String(60), unique=True, nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow) class Session(db.Model): __tablename__ = "sessions" id = db.Column(db.Integer, primary_key=True) player_id = db.Column(db.Integer, db.ForeignKey("players.id"), nullable=False) mode = db.Column(db.String(20), nullable=False) # 'daily' | 'unlimited' target_movie_id = db.Column(db.Integer, db.ForeignKey("movies.id"), nullable=False) status = db.Column(db.String(20), nullable=False, default="in_progress") # won|lost|in_progress attempts_used = db.Column(db.Integer, nullable=False, default=0) won = db.Column(db.Boolean, nullable=True) # True won / False lost / None in-progress date = db.Column(db.Date, nullable=True) # nur fuer 'daily' created_at = db.Column(db.DateTime, default=datetime.utcnow) player = db.relationship("Player") target = db.relationship("Movie")