1
Fork 0
mirror of https://github.com/wlinator/luminara.git synced 2024-10-03 00:23:13 +00:00
Lumi/services/inventory_service.py

78 lines
2.4 KiB
Python
Raw Normal View History

2024-06-21 19:58:42 +00:00
from loguru import logger
2023-07-11 16:07:05 +00:00
from db import database
2024-06-20 10:34:03 +00:00
from services import item_service
class Inventory:
def __init__(self, user_id):
self.user_id = user_id
2024-06-20 10:34:03 +00:00
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;
"""
2024-07-17 11:47:26 +00:00
database.execute_query(
query,
(self.user_id, item.id, abs(quantity), abs(quantity)),
)
2024-06-20 10:34:03 +00:00
def take_item(self, item: item_service.Item, quantity=1):
2023-07-11 16:49:20 +00:00
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;
"""
2023-07-11 16:49:20 +00:00
2024-07-17 11:47:26 +00:00
database.execute_query(
query,
(self.user_id, item.id, self.user_id, item.id, abs(quantity)),
)
2023-07-11 16:49:20 +00:00
def get_inventory(self):
2023-10-23 12:49:46 +00:00
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
2024-06-20 10:34:03 +00:00
item = item_service.Item(item_id)
items_dict[item] = quantity
return items_dict
2024-06-20 10:34:03 +00:00
def get_item_quantity(self, item: item_service.Item):
2023-10-23 12:49:46 +00:00
query = "SELECT COALESCE(quantity, 0) FROM inventory WHERE user_id = %s AND item_id = %s"
2024-08-14 10:37:48 +00:00
return database.select_query_one(query, (self.user_id, item.id))
2023-07-11 16:07:05 +00:00
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
2023-10-23 12:49:46 +00:00
WHERE inventory.user_id = %s AND inventory.quantity > 0 AND ShopItem.worth > 0
2023-07-11 16:07:05 +00:00
"""
try:
results = database.select_query(query, (self.user_id,))
2024-08-14 10:37:48 +00:00
return [item[0] for item in results]
2023-07-11 16:07:05 +00:00
except Exception as e:
2024-06-21 19:58:42 +00:00
logger.error(e)
2023-07-11 16:07:05 +00:00
return []