Files
popa_minecraft_launcher_api/app/api/marketplace.py

154 lines
5.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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(...)
):
"""Выставить предмет на продажу"""
from app.services.marketplace import MarketplaceService
return await MarketplaceService().add_item(username, slot_index, amount, price, server_ip)
@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
)