add websocket market

This commit is contained in:
aurinex
2025-12-22 11:11:26 +05:00
parent bfacff902f
commit 51e903e249
4 changed files with 110 additions and 1 deletions

View File

@ -4,6 +4,7 @@ from fastapi import HTTPException
from app.db.database import db
from app.services.coins import CoinsService
from app.services.server.command import CommandService
from app.realtime.marketplace_hub import marketplace_hub
# Коллекция для хранения товаров на торговой площадке
marketplace_collection = db.marketplace_items
@ -161,6 +162,15 @@ class MarketplaceService:
}
await marketplace_collection.insert_one(marketplace_item)
await marketplace_hub.broadcast(
marketplace_item["server_ip"],
{
"event": "market:item_listed",
"server_ip": marketplace_item["server_ip"],
"item": _serialize_mongodb_doc(marketplace_item),
}
)
# Обновляем операцию
await marketplace_operations.update_one(
@ -214,6 +224,16 @@ class MarketplaceService:
# 7. Удаляем предмет с торговой площадки
await marketplace_collection.delete_one({"id": item_id})
await marketplace_hub.broadcast(
item["server_ip"],
{
"event": "market:item_sold",
"server_ip": item["server_ip"],
"item_id": item_id,
"buyer": buyer_username,
}
)
return {
"status": "pending",
@ -250,6 +270,16 @@ class MarketplaceService:
# Удаляем предмет с торговой площадки
await marketplace_collection.delete_one({"id": item_id})
await marketplace_hub.broadcast(
item["server_ip"],
{
"event": "market:item_cancelled",
"server_ip": item["server_ip"],
"item_id": item_id,
"seller": username,
}
)
return {
"status": "pending",
@ -313,9 +343,20 @@ class MarketplaceService:
{"id": item_id},
{"$set": {"price": new_price}}
)
if result.modified_count == 0:
raise HTTPException(status_code=500, detail="Не удалось обновить цену предмета")
updated = await marketplace_collection.find_one({"id": item_id})
if updated:
await marketplace_hub.broadcast(
updated["server_ip"],
{
"event": "market:item_price_updated",
"server_ip": updated["server_ip"],
"item": _serialize_mongodb_doc(updated),
}
)
return {
"status": "success",