Files
filmdle/app/models.py
SimolZimol 526b0353e7 new file: .env.example
new file:   .gitignore
	new file:   Dockerfile
	new file:   README.md
	new file:   app.py
	new file:   app/__init__.py
	new file:   app/game.py
	new file:   app/models.py
	new file:   app/routes.py
	new file:   app/seed.py
	new file:   data/movies.json
	new file:   docker-compose.yml
	new file:   requirements.txt
	new file:   static/css/style.css
	new file:   static/js/game.js
	new file:   static/js/player.js
	new file:   templates/index.html
2026-08-07 20:48:08 +02:00

86 lines
3.1 KiB
Python

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")