Files
treasure_hunt_flask/models.py
2025-08-27 16:54:36 +02:00

54 lines
2.3 KiB
Python

from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
db = SQLAlchemy()
class Player(db.Model):
id = db.Column(db.Integer, primary_key=True)
matrix_id = db.Column(db.String(255), unique=True, nullable=False)
current_step = db.Column(db.Integer, default=1)
# Track per-player flow state and hint indices
stage = db.Column(db.String(50), nullable=True) # e.g. 'intro_needed','awaiting_code','awaiting_answer'
location_hint_index = db.Column(db.Integer, default=0)
question_hint_index = db.Column(db.Integer, default=0)
last_sent_step = db.Column(db.Integer, nullable=True)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
# Step model matching the CSV columns expected by the application:
# step, pre_text, location, location_enigma, location_hint, code,
# question, question_hint, answer, comments, success_text
class Step(db.Model):
id = db.Column(db.Integer, primary_key=True)
step = db.Column(db.Integer, unique=True, nullable=False)
pre_text = db.Column(db.Text) # pre_texttexte to show at start of each steps
location = db.Column(db.String(255)) # location (for game master)
location_enigma = db.Column(db.Text)
location_hint = db.Column(db.String(255)) # location_hint
code = db.Column(db.String(50), nullable=False)
question = db.Column(db.Text) # question
question_hint = db.Column(db.Text) # question_hint
answer = db.Column(db.Text) # answer
comments = db.Column(db.Text) # comments
success_text = db.Column(db.Text) # success_text
# Display/media fields
image_path = db.Column(db.String(255))
audio_path = db.Column(db.String(255))
class MessageLog(db.Model):
id = db.Column(db.Integer, primary_key=True)
player_id = db.Column(db.Integer, db.ForeignKey('player.id'))
sender = db.Column(db.String(50)) # mag, lia, admin
content = db.Column(db.Text)
timestamp = db.Column(db.DateTime, default=datetime.utcnow)
class GameSession(db.Model):
id = db.Column(db.Integer, primary_key=True)
room_id = db.Column(db.String(255), unique=True, nullable=False)
player_matrix_id = db.Column(db.String(255), nullable=False) # seul ce matrix_id peut discuter avec l'IA
started_at = db.Column(db.DateTime, default=datetime.utcnow)