diff --git a/catalog_microservice/data/use_cases/product_update_stock.py b/catalog_microservice/data/use_cases/product_update_stock.py index 1b2f606..c26545c 100644 --- a/catalog_microservice/data/use_cases/product_update_stock.py +++ b/catalog_microservice/data/use_cases/product_update_stock.py @@ -26,6 +26,11 @@ def __validate_stock(self, stock): def __update_stock(self, product_id, stock): try: + product = self.product_repository.select_product(product_id) + + if product.stock - stock < 0: + raise ValueError("Stock cannot be negative for product with id {}".format(product_id)) + self.product_repository.update_stock(product_id, stock) except ProductNotFoundError as e: raise HttpNotFoundError(str(e)) diff --git a/catalog_microservice/infra/database/repositories/products_repository.py b/catalog_microservice/infra/database/repositories/products_repository.py index d03e8dc..efe6592 100644 --- a/catalog_microservice/infra/database/repositories/products_repository.py +++ b/catalog_microservice/infra/database/repositories/products_repository.py @@ -76,7 +76,7 @@ def update_stock(cls, product_id: str, stock: int): product = db_connection.session.query(ProductsEntity).filter(ProductsEntity.id == product_id).first() if not product: raise ProductNotFoundError(product_id=product_id) - product.stock = stock + product.stock = product.stock - stock db_connection.session.commit() except ProductNotFoundError as e: db_connection.session.rollback()