X-Git-Url: https://apps.delaporte.us/gitweb/matrix-shop-bot.git/blobdiff_plain/19bec36c1b5f7bcf005ca9b842dd902a32675ce0..3466966ba8583c9f2e0cba3a2dfb6c6f803625e9:/matrix_shop_bot/db.py?ds=sidebyside diff --git a/matrix_shop_bot/db.py b/matrix_shop_bot/db.py index ea8a3a7..6f29260 100644 --- a/matrix_shop_bot/db.py +++ b/matrix_shop_bot/db.py @@ -6,6 +6,8 @@ from typing import List from sqlmodel import Field, Session, SQLModel, create_engine, select, text, Relationship +from sqlite3 import IntegrityError + MODULE='shop' DATE_FORMAT = '%Y-%m-%d' @@ -42,10 +44,6 @@ class Store(SQLModel, table=True): def __str__(self): return f'{self.name} (#{self.id})' - - - - # May get used later... #class PurchaseRecord(SQLModel, table=True): # id: int | None = Field(default=None, primary_key=True) @@ -83,13 +81,20 @@ class Data(): return pref.store_id def _add_with_name(self, cls, name): - id = -1 - with Session(self.engine) as session: - new = cls(name=name) - session.add(new) - session.commit() - id = new.id - return id + item_id = -1 + try: + with Session(self.engine) as session: + new = cls(name=name) + session.add(new) + session.commit() + item_id = new.id + except: + # duplicate add + # recover by returning the item_id + item = session.exec(select(Item).where(Item.name == name)).first() + item_id = item.id + + return item_id def add_store(self, name): store_id = self._add_with_name(Store, name) @@ -97,14 +102,17 @@ class Data(): return store_id def add_item(self, name): - item_id = self._add_with_name(Item, name) - store_id = self._get_pref_store_id() - self.assign_store(item_id, store_id) + names = name.split(',') + for name in names: + item_id = self._add_with_name(Item, name.strip()) + store_id = self._get_pref_store_id() + self.assign_store(item_id, store_id) return item_id def assign_last_store(self, item_id): - store_id = self._get_pref_store_id(store_id) - return self.assign_store(item_id, store_id) + store_id = self._get_pref_store_id() + self.assign_store(item_id, store_id) + return store_id def assign_store(self, item_id, store_id): self._set_pref_store_id(store_id) @@ -112,8 +120,11 @@ class Data(): with Session(self.engine) as session: store = session.exec(_get_with_id(Store, store_id)).first() item = session.exec(_get_with_id(Item, item_id)).first() - item.stores.append(store) - session.commit() + try: + item.stores.append(store) + session.commit() + except: + pass # Already assigned return ['Success'] def purchase_item(self, item_id):