Code organization and refactoring
This commit is contained in:
65
routers/assignments.py
Normal file
65
routers/assignments.py
Normal 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}
|
||||
Reference in New Issue
Block a user