Code organization and refactoring
This commit is contained in:
85
routers/discord_mappings.py
Normal file
85
routers/discord_mappings.py
Normal file
@@ -0,0 +1,85 @@
|
||||
"""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")
|
||||
Reference in New Issue
Block a user