add websocket market
This commit is contained in:
@ -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",
|
||||
|
||||
Reference in New Issue
Block a user