1
Fork 0
mirror of https://github.com/wlinator/luminara.git synced 2024-10-02 20:43:12 +00:00
Lumi/services/inventory_service.py
2024-06-21 21:58:42 +02:00

78 lines
2.4 KiB
Python

from loguru import logger
from db import database
from services import item_service
class Inventory:
def __init__(self, user_id):
self.user_id = user_id
def add_item(self, item: item_service.Item, quantity=1):
"""
Adds an item with a specific count (default 1) to the database, if there are
no records of this user having that item yet, it will just add a record with quantity=quantity.
:param item:
:param quantity:
:return:
"""
query = """
INSERT INTO inventory (user_id, item_id, quantity)
VALUES (%s, %s, %s)
ON DUPLICATE KEY UPDATE quantity = quantity + %s;
"""
database.execute_query(query, (self.user_id, item.id, abs(quantity), abs(quantity)))
def take_item(self, item: item_service.Item, quantity=1):
query = """
INSERT INTO inventory (user_id, item_id, quantity)
VALUES (%s, %s, 0)
ON DUPLICATE KEY UPDATE quantity = CASE
WHEN quantity - %s < 0 THEN 0
ELSE quantity - %s
END;
"""
database.execute_query(query, (self.user_id, item.id, self.user_id, item.id, abs(quantity)))
def get_inventory(self):
query = "SELECT item_id, quantity FROM inventory WHERE user_id = %s AND quantity > 0"
results = database.select_query(query, (self.user_id,))
items_dict = {}
for row in results:
item_id, quantity = row
item = item_service.Item(item_id)
items_dict[item] = quantity
return items_dict
def get_item_quantity(self, item: item_service.Item):
query = "SELECT COALESCE(quantity, 0) FROM inventory WHERE user_id = %s AND item_id = %s"
result = database.select_query_one(query, (self.user_id, item.id))
return result
def get_sell_data(self):
query = """
SELECT item.display_name
FROM inventory
JOIN ShopItem ON inventory.item_id = ShopItem.item_id
JOIN item ON inventory.item_id = item.id
WHERE inventory.user_id = %s AND inventory.quantity > 0 AND ShopItem.worth > 0
"""
try:
item_names = []
results = database.select_query(query, (self.user_id,))
for item in results:
item_names.append(item[0])
return item_names
except Exception as e:
logger.error(e)
return []