feat: new endpoints for users and updated models

This commit is contained in:
2025-07-18 02:58:22 +05:00
parent 733977f56e
commit 2e59d03784
10 changed files with 351 additions and 1 deletions

View File

@ -0,0 +1,70 @@
from fastapi import HTTPException
from datetime import datetime
import json
from app.services.coins import CoinsService
from app.models.server.event import PlayerEvent, OnlinePlayersUpdate
class EventService:
def __init__(self):
self.coins_service = CoinsService()
async def process_event(self, event_data: dict):
try:
event_type = event_data.get("event_type")
server_ip = event_data.get("server_ip", "unknown")
if event_type == "player_join":
player_name = event_data["player_name"]
player_id = event_data["player_id"]
print(f"[{datetime.now()}] Игрок вошел: {player_name} (ID: {player_id}) "
f"IP сервера: {server_ip}")
elif event_type == "player_quit":
player_name = event_data["player_name"]
player_id = event_data["player_id"]
print(f"[{datetime.now()}] Игрок вышел: {player_name} (ID: {player_id}) "
f"IP сервера: {server_ip}")
elif event_type == "player_session":
player_name = event_data["player_name"]
player_id = event_data["player_id"]
duration = event_data["duration"]
# Обновляем монеты через выделенный сервис
await self.coins_service.update_player_coins(player_id, player_name, duration, server_ip)
print(f"[{datetime.now()}] Игрок {player_name} провел на сервере: {duration} секунд "
f"IP сервера: {server_ip}")
elif event_type == "online_players_update":
players = event_data["players"]
print(f"\n[{datetime.now()}] Текущие онлайн-игроки ({len(players)}): "
f"IP сервера: {server_ip}")
# Обрабатываем каждого игрока
for player in players:
player_id = player["player_id"]
player_name = player["player_name"]
online_time = player["online_time"]
# Обновляем монеты через выделенный сервис
await self.coins_service.update_player_coins(
player_id, player_name, online_time, server_ip
)
hours, remainder = divmod(online_time, 3600)
minutes, seconds = divmod(remainder, 60)
print(f" - {player_name} (ID: {player_id}) "
f"Онлайн: {hours}ч {minutes}м {seconds}с")
print()
else:
print(f"[{datetime.now()}] Неизвестное событие: {json.dumps(event_data, indent=2)}")
raise HTTPException(status_code=400, detail="Invalid event type")
return {"status": "success", "message": "Event processed"}
except Exception as e:
print(f"[{datetime.now()}] Ошибка обработки события: {str(e)}")
print(f"Полученные данные: {json.dumps(event_data, indent=2)}")
raise HTTPException(status_code=400, detail=str(e))