86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
"""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")
|