diff --git a/app.py b/app.py index 89c605f..5cc5aa9 100644 --- a/app.py +++ b/app.py @@ -271,6 +271,10 @@ def handle_add_product(barcode, location): barcode_ = None amount = 1.0 if product: + gdsinfo = grocy.get_userfields(EntityType.PRODUCTS,product.id).get('GDSInfo') + if gdsinfo: + product_info = json.loads(gdsinfo) + models.BarcodeDB.add_product(barcode, product_info) for product_barcode in product.product_barcodes: if product_barcode.barcode == barcode: barcode_ = product_barcode @@ -288,15 +292,16 @@ def handle_add_product(barcode, location): spiders.append(BarcodeSpider(x_rapidapi_key=X_RapidAPI_Key)) for spider in spiders: - good = spider.get_good(barcode) - if good: + product_info = spider.get_good(barcode) + if product_info: + models.BarcodeDB.add_product(barcode, product_info) break - if not good: + if not product_info: response_data = {"message": "Item not found"} return response_data, 400, None try: - added, good_name = add_product(good, location) + added, good_name = add_product(product_info, location) if added: response_data = {"message": "New item added successfully"} return response_data, 200, good_name diff --git a/models.py b/models.py index 3fb0d9a..11fcae3 100644 --- a/models.py +++ b/models.py @@ -16,6 +16,19 @@ class BarcodeDB(BaseModel): class Meta: table_name = 'barcode_db' + @classmethod + def add_product(cls, barcode, product_info): + # if product already exists, update product info + product_info = json.dumps(product_info) + try: + product = cls.get(cls.barcode == barcode) + if product.product_info != product_info: + product.product_info = product_info + product.save() + except cls.DoesNotExist: + # Add new product + cls.create(barcode=barcode, product_info=product_info) + class ScanLog(BaseModel): barcode = CharField() scan_at = DateTimeField(default=datetime.now)