from sqlmodel import Field, Session, SQLModel, create_engine, select, text, Relationship
+from sqlite3 import IntegrityError
+
MODULE='shop'
DATE_FORMAT = '%Y-%m-%d'
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)
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):
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):