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)