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
86 lines
3.1 KiB
Python
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")
|