Code organization and refactoring

This commit is contained in:
2026-01-26 16:13:29 -05:00
parent 9c3b4c8335
commit a64f9a3d74
23 changed files with 495 additions and 396 deletions

65
routers/assignments.py Normal file
View File

@@ -0,0 +1,65 @@
"""Group assignment management endpoints."""
from pathlib import Path
from fastapi import APIRouter, HTTPException
from models import AssignMemberRequest, RemoveAssignmentRequest
from services.server_state import STATE
from utils import sync_state_from_file
router = APIRouter(prefix="/api", tags=["assignments"])
@router.get("/assignments")
async def api_get_assignments():
"""
Return assignments snapshot:
{ "1": { "friendly": [...], "enemy": [...] }, "2": {...}, ... }
"""
snap = await STATE.get_assignments_snapshot()
return snap
@router.post("/assign_member")
async def api_assign_member(req: AssignMemberRequest):
group_id = req.group_id
kind = req.kind
member_id = req.member_id
# Validate group
if group_id not in STATE.groups:
raise HTTPException(status_code=400, detail="invalid group_id")
# Validate member exists in STATE (if not present, attempt to load from file)
if kind not in ("friendly", "enemy"):
raise HTTPException(status_code=400, detail="invalid kind")
coll = STATE.friendly if kind == "friendly" else STATE.enemy
if member_id not in coll:
# Try to load members from file into STATE and re-check
file_path = Path("data/friendly_members.json") if kind == "friendly" else Path("data/enemy_members.json")
await sync_state_from_file(file_path, kind)
if member_id not in coll:
raise HTTPException(status_code=404, detail="member not found")
await STATE.assign_member(member_id, kind, group_id)
return {"status": "ok", "group": group_id, "kind": kind, "member_id": member_id}
@router.post("/remove_member_assignment")
async def api_remove_member_assignment(req: RemoveAssignmentRequest):
member_id = req.member_id
await STATE.remove_member_assignment(member_id)
return {"status": "ok", "member_id": member_id}
@router.post("/clear_assignments")
async def api_clear_assignments():
await STATE.clear_all_assignments()
return {"status": "ok"}
@router.post("/reset_groups")
async def reset_groups():
# Clear all assignments in server state
await STATE.clear_all_assignments()
return {"success": True}