from fastapi import APIRouter from app.services.server.command import CommandService from app.services.server.event import EventService from app.models.server.command import ServerCommand, InventoryRequest from datetime import datetime import uuid router = APIRouter( prefix="/api/server", tags=["Server Management"] ) @router.post("/events") async def receive_server_event(event_data: dict): # Обновляем активность сервера server_ip = event_data.get("server_ip") if server_ip: await update_server_activity(server_ip) return await EventService().process_event(event_data) @router.post("/commands") async def add_server_command(command_data: ServerCommand): # Обновляем last_activity для сервера await CommandService()._update_server_activity(command_data.server_ip) return await CommandService().add_command(command_data) @router.get("/commands") async def get_server_commands(server_ip: str): return await CommandService().get_commands(server_ip) @router.post("/inventory") async def request_player_inventory(inventory_request: InventoryRequest): """Создаёт запрос на получение инвентаря игрока""" return await CommandService().request_inventory(inventory_request) @router.get("/inventory/requests") async def get_inventory_requests(server_ip: str): """Получает список запросов инвентаря для сервера""" return await CommandService().get_inventory_requests(server_ip) @router.post("/inventory/submit") async def submit_inventory(inventory_data: dict): """Принимает данные инвентаря от сервера""" return await CommandService().submit_inventory(inventory_data) @router.get("/inventory/{request_id}") async def get_inventory_result(request_id: str): """Получает результаты запроса инвентаря""" return await CommandService().get_inventory_result(request_id) async def update_server_activity(server_ip): """Обновляет время последней активности сервера""" from app.db.database import db game_servers_collection = db.game_servers await game_servers_collection.update_one( {"ip": server_ip}, {"$set": {"last_activity": datetime.utcnow()}}, upsert=False )