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
This commit is contained in:
85
app/models.py
Normal file
85
app/models.py
Normal file
@@ -0,0 +1,85 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user