"""Discord ID to Torn ID mapping management endpoints.""" import json from pathlib import Path from fastapi import APIRouter, HTTPException from typing import Optional from models import DiscordMappingRequest from services.bot_assignment import BotAssignmentManager router = APIRouter(prefix="/api", tags=["discord_mappings"]) # Global reference to assignment manager (set by main.py) assignment_manager: Optional[BotAssignmentManager] = None def set_assignment_manager(manager: BotAssignmentManager): """Set the global assignment manager reference.""" global assignment_manager assignment_manager = manager @router.get("/discord_mappings") async def get_discord_mappings(): """Get all Torn ID to Discord ID mappings""" path = Path("data/discord_mapping.json") if not path.exists(): return {"mappings": {}} with open(path, "r", encoding="utf-8") as f: data = json.load(f) return {"mappings": data.get("mappings", {})} @router.post("/discord_mapping") async def add_discord_mapping(req: DiscordMappingRequest): """Add or update a Torn ID to Discord ID mapping""" path = Path("data/discord_mapping.json") # Load existing mappings if path.exists(): with open(path, "r", encoding="utf-8") as f: data = json.load(f) else: data = {"comment": "Map Torn player IDs to Discord user IDs", "mappings": {}} # Update mapping data["mappings"][str(req.torn_id)] = str(req.discord_id) # Save back with open(path, "w", encoding="utf-8") as f: json.dump(data, f, indent=2) # Reload in assignment manager if assignment_manager: assignment_manager.load_discord_mapping() return {"status": "ok", "torn_id": req.torn_id, "discord_id": req.discord_id} @router.delete("/discord_mapping/{torn_id}") async def remove_discord_mapping(torn_id: int): """Remove a Discord mapping""" path = Path("data/discord_mapping.json") if not path.exists(): raise HTTPException(status_code=404, detail="No mappings found") with open(path, "r", encoding="utf-8") as f: data = json.load(f) # Remove mapping if str(torn_id) in data.get("mappings", {}): del data["mappings"][str(torn_id)] # Save back with open(path, "w", encoding="utf-8") as f: json.dump(data, f, indent=2) # Reload in assignment manager if assignment_manager: assignment_manager.load_discord_mapping() return {"status": "ok", "torn_id": torn_id} else: raise HTTPException(status_code=404, detail="Mapping not found")