from fastapi import APIRouter, Query, Body from typing import Optional from app.models.marketplace import BuyItemRequest router = APIRouter( prefix="/api/marketplace", tags=["Marketplace"] ) @router.get("/items") async def get_marketplace_items( server_ip: Optional[str] = None, page: int = Query(1, ge=1), limit: int = Query(20, ge=1, le=100) ): """Получить список предметов на торговой площадке""" from app.services.marketplace import MarketplaceService return await MarketplaceService().list_items(server_ip, page, limit) @router.get("/items/{item_id}") async def get_marketplace_item(item_id: str): """Получить информацию о конкретном предмете""" from app.services.marketplace import MarketplaceService return await MarketplaceService().get_item(item_id) @router.post("/items/sell") async def sell_item( username: str = Body(...), slot_index: int = Body(...), amount: int = Body(...), price: int = Body(...), server_ip: str = Body(...), description: Optional[str] = None, ): """Выставить предмет на продажу""" from app.services.marketplace import MarketplaceService return await MarketplaceService().add_item(username, slot_index, amount, price, server_ip, description) @router.post("/items/buy/{item_id}") async def buy_item( item_id: str, request: BuyItemRequest ): """Купить предмет""" from app.services.marketplace import MarketplaceService return await MarketplaceService().buy_item(request.username, item_id) @router.get("/operations") async def get_marketplace_operations(server_ip: str): """Получить список операций для выполнения на сервере""" from app.services.marketplace import MarketplaceService return await MarketplaceService().get_pending_operations(server_ip) @router.post("/operations/confirm") async def confirm_marketplace_operation(data: dict): """Подтвердить выполнение операции""" from app.services.marketplace import MarketplaceService return await MarketplaceService().confirm_operation(data["operation_id"], data.get("status"), data.get("error")) @router.post("/items/details") async def submit_item_details(data: dict): """Получить подробные данные о предмете""" from app.services.marketplace import MarketplaceService return await MarketplaceService().update_item_details(data["operation_id"], data["item_data"]) @router.delete("/items/{item_id}") async def cancel_item_sale( item_id: str, username: str = Query(...) ): """Снять предмет с продажи""" from app.services.marketplace import MarketplaceService return await MarketplaceService().cancel_item_sale(username, item_id) @router.put("/items/{item_id}/price") async def update_item_price( item_id: str, new_price: int = Body(..., gt=0), username: str = Body(...) ): """Обновить цену предмета на торговой площадке""" from app.services.marketplace import MarketplaceService return await MarketplaceService().update_item_price(username, item_id, new_price) @router.get("/items/by-seller/{username}") async def get_items_by_seller( username: str, server_ip: Optional[str] = None, page: int = Query(1, ge=1), limit: int = Query(20, ge=1, le=100) ): """Получить все товары, выставленные конкретным игроком""" from app.services.marketplace import MarketplaceService return await MarketplaceService().list_items_by_seller( username=username, server_ip=server_ip, page=page, limit=limit ) @router.get("/items/me") async def get_my_items( username: str = Query(...), server_ip: Optional[str] = None, page: int = Query(1, ge=1), limit: int = Query(20, ge=1, le=100) ): """Получить мои лоты на торговой площадке""" from app.services.marketplace import MarketplaceService return await MarketplaceService().list_items_by_seller( username=username, server_ip=server_ip, page=page, limit=limit ) @router.get("/operations/all") async def get_all_marketplace_operations( server_ip: Optional[str] = None, player_name: Optional[str] = None, status: Optional[str] = None, op_type: Optional[str] = None, page: int = Query(1, ge=1), limit: int = Query(20, ge=1, le=100), ): """Получить все операции маркетплейса (опционально: по игроку/статусу/типу)""" from app.services.marketplace import MarketplaceService return await MarketplaceService().list_operations( server_ip=server_ip, player_name=player_name, status=status, op_type=op_type, page=page, limit=limit ) @router.get("/operations/by-player/{username}") async def get_operations_by_player( username: str, server_ip: Optional[str] = None, status: Optional[str] = None, op_type: Optional[str] = None, page: int = Query(1, ge=1), limit: int = Query(20, ge=1, le=100), ): """Получить операции маркетплейса конкретного игрока""" from app.services.marketplace import MarketplaceService return await MarketplaceService().list_operations( server_ip=server_ip, player_name=username, status=status, op_type=op_type, page=page, limit=limit )