add new enpoints to marketplace
This commit is contained in:
@ -80,3 +80,75 @@ async def update_item_price(
|
|||||||
"""Обновить цену предмета на торговой площадке"""
|
"""Обновить цену предмета на торговой площадке"""
|
||||||
from app.services.marketplace import MarketplaceService
|
from app.services.marketplace import MarketplaceService
|
||||||
return await MarketplaceService().update_item_price(username, item_id, new_price)
|
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
|
||||||
|
)
|
||||||
@ -248,6 +248,42 @@ class MarketplaceService:
|
|||||||
"message": "Предмет снят с продажи и будет возвращен в ваш инвентарь"
|
"message": "Предмет снят с продажи и будет возвращен в ваш инвентарь"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async def list_items_by_seller(
|
||||||
|
self,
|
||||||
|
username: str,
|
||||||
|
server_ip: str = None,
|
||||||
|
page: int = 1,
|
||||||
|
limit: int = 20
|
||||||
|
):
|
||||||
|
"""Получить товары, выставленные конкретным продавцом"""
|
||||||
|
query = {
|
||||||
|
"seller_name": username
|
||||||
|
}
|
||||||
|
|
||||||
|
if server_ip:
|
||||||
|
query["server_ip"] = server_ip
|
||||||
|
|
||||||
|
total = await marketplace_collection.count_documents(query)
|
||||||
|
|
||||||
|
items_cursor = (
|
||||||
|
marketplace_collection
|
||||||
|
.find(query)
|
||||||
|
.sort("created_at", -1)
|
||||||
|
.skip((page - 1) * limit)
|
||||||
|
.limit(limit)
|
||||||
|
)
|
||||||
|
|
||||||
|
items = await items_cursor.to_list(limit)
|
||||||
|
|
||||||
|
serialized_items = [_serialize_mongodb_doc(item) for item in items]
|
||||||
|
|
||||||
|
return {
|
||||||
|
"items": serialized_items,
|
||||||
|
"total": total,
|
||||||
|
"page": page,
|
||||||
|
"pages": (total + limit - 1) // limit
|
||||||
|
}
|
||||||
|
|
||||||
async def update_item_price(self, username: str, item_id: str, new_price: int):
|
async def update_item_price(self, username: str, item_id: str, new_price: int):
|
||||||
"""Обновить цену предмета на торговой площадке"""
|
"""Обновить цену предмета на торговой площадке"""
|
||||||
# Находим предмет
|
# Находим предмет
|
||||||
@ -276,3 +312,44 @@ class MarketplaceService:
|
|||||||
"status": "success",
|
"status": "success",
|
||||||
"message": f"Цена предмета обновлена на {new_price} монет"
|
"message": f"Цена предмета обновлена на {new_price} монет"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async def list_operations(
|
||||||
|
self,
|
||||||
|
server_ip: str = None,
|
||||||
|
player_name: str = None,
|
||||||
|
status: str = None,
|
||||||
|
op_type: str = None,
|
||||||
|
page: int = 1,
|
||||||
|
limit: int = 20
|
||||||
|
):
|
||||||
|
"""Получить операции маркетплейса (все или по игроку)"""
|
||||||
|
query = {}
|
||||||
|
|
||||||
|
if server_ip:
|
||||||
|
query["server_ip"] = server_ip
|
||||||
|
if player_name:
|
||||||
|
query["player_name"] = player_name
|
||||||
|
if status:
|
||||||
|
query["status"] = status
|
||||||
|
if op_type:
|
||||||
|
query["type"] = op_type
|
||||||
|
|
||||||
|
total = await marketplace_operations.count_documents(query)
|
||||||
|
|
||||||
|
cursor = (
|
||||||
|
marketplace_operations
|
||||||
|
.find(query)
|
||||||
|
.sort("created_at", -1)
|
||||||
|
.skip((page - 1) * limit)
|
||||||
|
.limit(limit)
|
||||||
|
)
|
||||||
|
|
||||||
|
ops = await cursor.to_list(limit)
|
||||||
|
serialized_ops = _serialize_mongodb_doc(ops)
|
||||||
|
|
||||||
|
return {
|
||||||
|
"operations": serialized_ops,
|
||||||
|
"total": total,
|
||||||
|
"page": page,
|
||||||
|
"pages": (total + limit - 1) // limit
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user