diff --git a/app/services/marketplace.py b/app/services/marketplace.py index ec9a608..81f1c1a 100644 --- a/app/services/marketplace.py +++ b/app/services/marketplace.py @@ -212,67 +212,67 @@ class MarketplaceService: "message": "Покупка в обработке. Предмет будет добавлен в ваш инвентарь." } -async def cancel_item_sale(self, username: str, item_id: str): - """Снять предмет с продажи""" - # Находим предмет - item = await marketplace_collection.find_one({"id": item_id}) - if not item: - raise HTTPException(status_code=404, detail="Предмет не найден") + async def cancel_item_sale(self, username: str, item_id: str): + """Снять предмет с продажи""" + # Находим предмет + item = await marketplace_collection.find_one({"id": item_id}) + if not item: + raise HTTPException(status_code=404, detail="Предмет не найден") + + # Проверяем, что пользователь является владельцем предмета + if item["seller_name"] != username: + raise HTTPException(status_code=403, detail="Вы не можете снять с продажи чужой предмет") - # Проверяем, что пользователь является владельцем предмета - if item["seller_name"] != username: - raise HTTPException(status_code=403, detail="Вы не можете снять с продажи чужой предмет") - - # Создаем операцию возврата предмета - operation_id = str(uuid.uuid4()) - - operation = { - "id": operation_id, - "type": "cancel_sale", - "player_name": username, - "item_id": item_id, - "item_data": item["item_data"], - "server_ip": item["server_ip"], - "status": "pending", - "created_at": datetime.utcnow() - } - - await marketplace_operations.insert_one(operation) - - # Удаляем предмет с торговой площадки - await marketplace_collection.delete_one({"id": item_id}) - - return { - "status": "pending", - "operation_id": operation_id, - "message": "Предмет снят с продажи и будет возвращен в ваш инвентарь" - } + # Создаем операцию возврата предмета + operation_id = str(uuid.uuid4()) + + operation = { + "id": operation_id, + "type": "cancel_sale", + "player_name": username, + "item_id": item_id, + "item_data": item["item_data"], + "server_ip": item["server_ip"], + "status": "pending", + "created_at": datetime.utcnow() + } + + await marketplace_operations.insert_one(operation) + + # Удаляем предмет с торговой площадки + await marketplace_collection.delete_one({"id": item_id}) + + return { + "status": "pending", + "operation_id": operation_id, + "message": "Предмет снят с продажи и будет возвращен в ваш инвентарь" + } -async def update_item_price(self, username: str, item_id: str, new_price: int): - """Обновить цену предмета на торговой площадке""" - # Находим предмет - item = await marketplace_collection.find_one({"id": item_id}) - if not item: - raise HTTPException(status_code=404, detail="Предмет не найден") + async def update_item_price(self, username: str, item_id: str, new_price: int): + """Обновить цену предмета на торговой площадке""" + # Находим предмет + item = await marketplace_collection.find_one({"id": item_id}) + if not item: + raise HTTPException(status_code=404, detail="Предмет не найден") + + # Проверяем, что пользователь является владельцем предмета + if item["seller_name"] != username: + raise HTTPException(status_code=403, detail="Вы не можете изменить цену чужого предмета") - # Проверяем, что пользователь является владельцем предмета - if item["seller_name"] != username: - raise HTTPException(status_code=403, detail="Вы не можете изменить цену чужого предмета") - - # Валидация новой цены - if new_price <= 0: - raise HTTPException(status_code=400, detail="Цена должна быть положительным числом") - - # Обновляем цену предмета - result = await marketplace_collection.update_one( - {"id": item_id}, - {"$set": {"price": new_price}} - ) - - if result.modified_count == 0: - raise HTTPException(status_code=500, detail="Не удалось обновить цену предмета") - - return { - "status": "success", - "message": f"Цена предмета обновлена на {new_price} монет" - } + # Валидация новой цены + if new_price <= 0: + raise HTTPException(status_code=400, detail="Цена должна быть положительным числом") + + # Обновляем цену предмета + result = await marketplace_collection.update_one( + {"id": item_id}, + {"$set": {"price": new_price}} + ) + + if result.modified_count == 0: + raise HTTPException(status_code=500, detail="Не удалось обновить цену предмета") + + return { + "status": "success", + "message": f"Цена предмета обновлена на {new_price} монет" + }