From: Edward Delaporte Date: Sun, 29 Mar 2026 16:04:14 +0000 (-0500) Subject: Add ability to remove stuff X-Git-Tag: 1.1.0~33 X-Git-Url: https://us-delaporte.pagekite.me/gitweb/matrix-shop-bot.git/commitdiff_plain/db78747293274faf1defe9a16d66baedfdef0aa3?hp=d0f8d69f2d4aa2a1af67baae391663d9bb72c729 Add ability to remove stuff --- diff --git a/matrix_shop_bot/bot.py b/matrix_shop_bot/bot.py index 8a25f53..0e898e6 100644 --- a/matrix_shop_bot/bot.py +++ b/matrix_shop_bot/bot.py @@ -30,8 +30,13 @@ async def do_shop(match): add - add an item to shop for add-store - add a store assign STORE_ID ITEM_ID - plan to shop for at store for item + buy - mark item as purchased + clear STORE_ID - clear all purchased items for STORE_ID from database + clear-all STORE_ID - clear **all** items for STORE_ID from database list STORE_ID - list all items assigned to store list-unsorted - list all items not assigned to any store + remove ITEM_ID - remove a shopping item from the datatbase + remove-store STORE_ID - remove a store from the datatbase (requires clearing the list first) setup - run one time database setup ''' @@ -49,6 +54,23 @@ async def do_shop(match): result = Data().add_store(new) return [f'Store added with id {result}'] + if match.command('assign'): + store_id = int(match.args()[1]) + item_id = int(match.args()[2]) + result = Data().assign_store(store_id, item_id) + return result + + if match.command('buy'): + item_id = ' '.join(match.args()[1:]) + Data().purchase_item(item_id) + + if match.command('clear'): + store_id = ' '.join(match.args()[1:]) + Data().clear_list(store_id) + + if match.command('clear-all'): + store_id = ' '.join(match.args()[1:]) + Data().clear_list(store_id, clear_all=True) if match.command('list'): items = Data().get_shopping_list(store_id) @@ -56,17 +78,25 @@ async def do_shop(match): results.append(str(item)) return results + if match.command('list-stores'): + items = Data().get_stores() + for item in items: + results.append(str(item)) + return results + if match.command('unsorted'): items = Data().list_unsorted() for item in items: results.append(str(item)) return results - if match.command('assign'): - store_id = int(match.args()[1]) - item_id = int(match.args()[2]) - result = Data().assign_store(store_id, item_id) - return result + if match.command('remove-item'): + item_id = ' '.join(match.args()[1:]) + Data().remove_item(item_id) + + if match.command('remove-store'): + store_id = ' '.join(match.args()[1:]) + Data().remove_store(store_id) return [do_shop.__doc__] diff --git a/matrix_shop_bot/db.py b/matrix_shop_bot/db.py index 0d1f590..6b7c7ab 100644 --- a/matrix_shop_bot/db.py +++ b/matrix_shop_bot/db.py @@ -136,6 +136,18 @@ class Data(): results.append(f' - [ ] {item}') return results + def remove_item(self, item_id): + with Session(self.engine) as session: + item = session.exec(_get_with_id(Item, item_id)).first() + session.delete(item) + session.commit() + + def remove_store(self, store_id): + with Session(self.engine) as session: + store = session.exec(_get_with_id(Store, store_id)).first() + session.delete(store) + session.commit() + def get_engine(self): return create_engine(f"sqlite:///{self.file}") diff --git a/matrix_shop_bot/tasks.py b/matrix_shop_bot/tasks.py index 1fbc3fb..a60a2a1 100644 --- a/matrix_shop_bot/tasks.py +++ b/matrix_shop_bot/tasks.py @@ -17,11 +17,27 @@ def add_store(c, name): result = Data().add_store(name) print(result) + +@task +def assign(c, store_id, item_id): + result = Data().assign_store(store_id, item_id) + print(result) + + @task def buy(c, item_id): result = Data().purchase_item(item_id) print(result) +@task +def clear_all(c, store_id): + Data().clear_list(store_id, clear_all=True) + +@task +def clear_list(c, store_id): + Data().clear_list(store_id) + + @task def list(c, store_id): items = Data().get_shopping_list(store_id) @@ -34,13 +50,6 @@ def list_stores(c): for item in items: print(item) -@task -def clear_list(c, store_id): - Data().clear_list(store_id) - -@task -def clear_all(c, store_id): - Data().clear_list(store_id, clear_all=True) @task def list_unsorted(c): @@ -48,9 +57,12 @@ def list_unsorted(c): for item in items: print(item) + @task -def assign(c, store_id, item_id): - result = Data().assign_store(store_id, item_id) - print(result) +def remove_item(c, item_id): + Data().remove_item(item_id) +@task +def remove_store(c, store_id): + Data().remove_store(store_id)