Add event log
This commit is contained in:
@@ -2,13 +2,14 @@ from typing import Optional
|
||||
from fastapi import FastAPI, Request, Form, Depends, HTTPException, status
|
||||
from fastapi.responses import RedirectResponse, HTMLResponse
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from sqlmodel import Session
|
||||
from sqlmodel import Session, select
|
||||
import uvicorn
|
||||
from pathlib import Path
|
||||
|
||||
from . import crud
|
||||
from .database import create_db_and_tables, get_session
|
||||
from .templates import templates, BASE_DIR
|
||||
from .models import GameEvent
|
||||
|
||||
app = FastAPI(title="Rats with Gats Remote Play")
|
||||
|
||||
@@ -74,15 +75,46 @@ def player_dashboard(request: Request, game_id: str, player_id: str, db: Session
|
||||
# --- HTMX Core Polling Route ---
|
||||
|
||||
@app.get("/game/{game_id}/player/{player_id}/phase-check")
|
||||
def phase_check_route(game_id: str, player_id: str, current: str, db: Session = Depends(get_session)):
|
||||
def phase_check_route(game_id: str, player_id: str, current: str, rank: Optional[int] = None, needs_name: Optional[bool] = None, hand_len: Optional[int] = None, db: Session = Depends(get_session)):
|
||||
game = crud.get_game(db, game_id)
|
||||
if not game:
|
||||
raise HTTPException(status_code=404, detail="Game not found")
|
||||
|
||||
player = crud.get_player(db, player_id)
|
||||
if not player:
|
||||
raise HTTPException(status_code=404, detail="Player not found")
|
||||
|
||||
state_changed = False
|
||||
if game.phase != current:
|
||||
# Phase changed! Trigger page reload on client via HTMX header
|
||||
state_changed = True
|
||||
elif rank is not None and player.rank != rank:
|
||||
state_changed = True
|
||||
elif needs_name is not None and player.needs_name != needs_name:
|
||||
state_changed = True
|
||||
elif hand_len is not None:
|
||||
import json
|
||||
current_hand = json.loads(player.hand_cards)
|
||||
if len(current_hand) != hand_len:
|
||||
state_changed = True
|
||||
|
||||
if state_changed:
|
||||
# Phase or state changed! Trigger page reload on client via HTMX header
|
||||
return HTMLResponse(status_code=200, headers={"HX-Trigger": "phase-changed"})
|
||||
return HTMLResponse(status_code=204) # No content, no reload
|
||||
|
||||
@app.get("/game/{game_id}/player/{player_id}/events", response_class=HTMLResponse)
|
||||
def get_events_snippet(request: Request, game_id: str, player_id: str, db: Session = Depends(get_session)):
|
||||
game = crud.get_game(db, game_id)
|
||||
if not game:
|
||||
raise HTTPException(status_code=404, detail="Game not found")
|
||||
|
||||
events = db.exec(select(GameEvent).where(GameEvent.game_id == game_id).order_by(GameEvent.timestamp.asc())).all()
|
||||
|
||||
return templates.TemplateResponse("event_log_snippet.html", {
|
||||
"request": request,
|
||||
"events": events
|
||||
})
|
||||
|
||||
# --- Register Modular Phase Routers ---
|
||||
|
||||
from .phase_view import router as phase_view_router
|
||||
|
||||
Reference in New Issue
Block a user