155 lines
5.6 KiB
Python
155 lines
5.6 KiB
Python
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
|
||
) |