54 lines
2.3 KiB
Python
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)
|