diff --git a/app/api/v1/admin/code_quality.py b/app/api/v1/admin/code_quality.py index f4b376c7..68345d19 100644 --- a/app/api/v1/admin/code_quality.py +++ b/app/api/v1/admin/code_quality.py @@ -142,6 +142,7 @@ async def trigger_scan( scan = code_quality_service.run_scan( db, triggered_by=f"manual:{current_user.username}" ) + db.commit() return ScanResponse( id=scan.id, @@ -338,6 +339,7 @@ async def assign_violation( due_date=request.due_date, priority=request.priority, ) + db.commit() return { "id": assignment.id, @@ -371,6 +373,7 @@ async def resolve_violation( resolved_by=current_user.id, resolution_note=request.resolution_note, ) + db.commit() return { "id": violation.id, @@ -402,6 +405,7 @@ async def ignore_violation( ignored_by=current_user.id, reason=request.reason, ) + db.commit() return { "id": violation.id, @@ -432,6 +436,7 @@ async def add_comment( user_id=current_user.id, comment=request.comment, ) + db.commit() return { "id": comment.id, diff --git a/app/api/v1/admin/content_pages.py b/app/api/v1/admin/content_pages.py index 49551a62..99e7a80f 100644 --- a/app/api/v1/admin/content_pages.py +++ b/app/api/v1/admin/content_pages.py @@ -149,6 +149,7 @@ def create_platform_page( display_order=page_data.display_order, created_by=current_user.id, ) + db.commit() return page.to_dict() @@ -211,6 +212,7 @@ def update_page( display_order=page_data.display_order, updated_by=current_user.id, ) + db.commit() return page.to_dict() @@ -222,3 +224,4 @@ def delete_page( ): """Delete a content page.""" content_page_service.delete_page_or_raise(db, page_id) + db.commit() diff --git a/app/api/v1/admin/marketplace.py b/app/api/v1/admin/marketplace.py index c85f0738..7391ee73 100644 --- a/app/api/v1/admin/marketplace.py +++ b/app/api/v1/admin/marketplace.py @@ -83,6 +83,7 @@ async def create_marketplace_import_job( vendor=vendor, user=current_admin, ) + db.commit() logger.info( f"Admin {current_admin.username} created import job {job.id} " diff --git a/app/api/v1/admin/settings.py b/app/api/v1/admin/settings.py index cc4ff324..c703abe2 100644 --- a/app/api/v1/admin/settings.py +++ b/app/api/v1/admin/settings.py @@ -113,6 +113,7 @@ def create_setting( "value_type": setting_data.value_type, }, ) + db.commit() return result @@ -140,6 +141,7 @@ def update_setting( target_id=key, details={"old_value": str(old_value), "new_value": update_data.value}, ) + db.commit() return result @@ -168,6 +170,7 @@ def upsert_setting( target_id=setting_data.key, details={"category": setting_data.category}, ) + db.commit() return result @@ -204,5 +207,6 @@ def delete_setting( target_id=key, details={}, ) + db.commit() return {"message": message} diff --git a/app/api/v1/admin/users.py b/app/api/v1/admin/users.py index 0ab33f6d..730249b8 100644 --- a/app/api/v1/admin/users.py +++ b/app/api/v1/admin/users.py @@ -83,6 +83,7 @@ def create_user( role=user_data.role, current_admin_id=current_admin.id, ) + db.commit() return UserDetailResponse( id=user.id, @@ -175,6 +176,7 @@ def update_user( role=update_data.get("role"), is_active=update_data.get("is_active"), ) + db.commit() return UserDetailResponse( id=user.id, @@ -206,6 +208,7 @@ def toggle_user_status( user_id=user_id, current_admin_id=current_admin.id, ) + db.commit() return UserStatusToggleResponse(message=message, is_active=user.is_active) @@ -222,5 +225,6 @@ def delete_user( user_id=user_id, current_admin_id=current_admin.id, ) + db.commit() return UserDeleteResponse(message=message) diff --git a/app/api/v1/admin/vendor_domains.py b/app/api/v1/admin/vendor_domains.py index 733cee87..797f54ae 100644 --- a/app/api/v1/admin/vendor_domains.py +++ b/app/api/v1/admin/vendor_domains.py @@ -68,6 +68,7 @@ def add_vendor_domain( domain = vendor_domain_service.add_domain( db=db, vendor_id=vendor_id, domain_data=domain_data ) + db.commit() return VendorDomainResponse( id=domain.id, @@ -186,6 +187,7 @@ def update_vendor_domain( domain = vendor_domain_service.update_domain( db=db, domain_id=domain_id, domain_update=domain_update ) + db.commit() return VendorDomainResponse( id=domain.id, @@ -224,6 +226,7 @@ def delete_vendor_domain( # Delete domain message = vendor_domain_service.delete_domain(db, domain_id) + db.commit() return DomainDeletionResponse( message=message, domain=domain_name, vendor_id=vendor_id @@ -259,6 +262,7 @@ def verify_domain_ownership( - 502: DNS query failed """ domain, message = vendor_domain_service.verify_domain(db, domain_id) + db.commit() return DomainVerificationResponse( message=message, diff --git a/app/api/v1/admin/vendor_themes.py b/app/api/v1/admin/vendor_themes.py index 677bff90..f4767cdb 100644 --- a/app/api/v1/admin/vendor_themes.py +++ b/app/api/v1/admin/vendor_themes.py @@ -136,6 +136,7 @@ async def update_vendor_theme( # Service handles all validation and raises appropriate exceptions # Global exception handler converts them to proper HTTP responses theme = vendor_theme_service.update_theme(db, vendor_code, theme_data) + db.commit() return VendorThemeResponse(**theme.to_dict()) @@ -185,6 +186,7 @@ async def apply_theme_preset( # Raises ThemePresetNotFoundException if preset doesn't exist # Global exception handler converts to HTTP 404 theme = vendor_theme_service.apply_theme_preset(db, vendor_code, preset_name) + db.commit() return ThemePresetResponse( message=f"Applied {preset_name} preset successfully", @@ -226,4 +228,5 @@ async def delete_vendor_theme( # Service handles deletion and raises exceptions if needed # Global exception handler converts them to proper HTTP responses result = vendor_theme_service.delete_theme(db, vendor_code) + db.commit() return ThemeDeleteResponse(message=result.get("message", "Theme deleted successfully")) diff --git a/app/api/v1/admin/vendors.py b/app/api/v1/admin/vendors.py index 87896a71..72aa8da7 100644 --- a/app/api/v1/admin/vendors.py +++ b/app/api/v1/admin/vendors.py @@ -50,6 +50,7 @@ def create_vendor( The vendor inherits owner and contact information from its parent company. """ vendor = admin_service.create_vendor(db=db, vendor_data=vendor_data) + db.commit() return VendorCreateResponse( # Vendor fields @@ -204,6 +205,7 @@ def update_vendor( """ vendor = vendor_service.get_vendor_by_identifier(db, vendor_identifier) vendor = admin_service.update_vendor(db, vendor.id, vendor_update) + db.commit() return _build_vendor_detail_response(vendor) @@ -303,4 +305,5 @@ def delete_vendor( vendor = vendor_service.get_vendor_by_identifier(db, vendor_identifier) message = admin_service.delete_vendor(db, vendor.id) + db.commit() return {"message": message} diff --git a/app/api/v1/shop/auth.py b/app/api/v1/shop/auth.py index b37a2007..9880e982 100644 --- a/app/api/v1/shop/auth.py +++ b/app/api/v1/shop/auth.py @@ -83,6 +83,7 @@ def register_customer( customer = customer_service.register_customer( db=db, vendor_id=vendor.id, customer_data=customer_data ) + db.commit() logger.info( f"New customer registered: {customer.email} for vendor {vendor.subdomain}", diff --git a/app/api/v1/shop/cart.py b/app/api/v1/shop/cart.py index 900e8080..215b1997 100644 --- a/app/api/v1/shop/cart.py +++ b/app/api/v1/shop/cart.py @@ -112,6 +112,7 @@ def add_to_cart( product_id=cart_data.product_id, quantity=cart_data.quantity, ) + db.commit() logger.info( f"[SHOP_API] add_to_cart result: {result}", @@ -165,6 +166,7 @@ def update_cart_item( product_id=product_id, quantity=cart_data.quantity, ) + db.commit() return CartOperationResponse(**result) @@ -201,6 +203,7 @@ def remove_from_cart( result = cart_service.remove_from_cart( db=db, vendor_id=vendor.id, session_id=session_id, product_id=product_id ) + db.commit() return CartOperationResponse(**result) @@ -230,5 +233,6 @@ def clear_cart( ) result = cart_service.clear_cart(db=db, vendor_id=vendor.id, session_id=session_id) + db.commit() return ClearCartResponse(**result) diff --git a/app/api/v1/shop/orders.py b/app/api/v1/shop/orders.py index 23044d8c..a0718c6b 100644 --- a/app/api/v1/shop/orders.py +++ b/app/api/v1/shop/orders.py @@ -68,6 +68,7 @@ def place_order( order = order_service.create_order( db=db, vendor_id=vendor.id, order_data=order_data ) + db.commit() logger.info( f"Order {order.order_number} placed for vendor {vendor.subdomain}, " diff --git a/app/api/v1/vendor/content_pages.py b/app/api/v1/vendor/content_pages.py index 9f0f5dd1..fff88f3f 100644 --- a/app/api/v1/vendor/content_pages.py +++ b/app/api/v1/vendor/content_pages.py @@ -191,6 +191,7 @@ def create_vendor_page( display_order=page_data.display_order, created_by=current_user.id, ) + db.commit() return page.to_dict() @@ -226,6 +227,7 @@ def update_vendor_page( display_order=page_data.display_order, updated_by=current_user.id, ) + db.commit() return page.to_dict() @@ -247,3 +249,4 @@ def delete_vendor_page( # Delete with ownership check in service layer content_page_service.delete_vendor_page(db, page_id, current_user.vendor_id) + db.commit() diff --git a/app/api/v1/vendor/inventory.py b/app/api/v1/vendor/inventory.py index 72947297..ba443fff 100644 --- a/app/api/v1/vendor/inventory.py +++ b/app/api/v1/vendor/inventory.py @@ -36,7 +36,9 @@ def set_inventory( db: Session = Depends(get_db), ): """Set exact inventory quantity (replaces existing).""" - return inventory_service.set_inventory(db, current_user.token_vendor_id, inventory) + result = inventory_service.set_inventory(db, current_user.token_vendor_id, inventory) + db.commit() + return result @router.post("/inventory/adjust", response_model=InventoryResponse) @@ -46,7 +48,9 @@ def adjust_inventory( db: Session = Depends(get_db), ): """Adjust inventory (positive to add, negative to remove).""" - return inventory_service.adjust_inventory(db, current_user.token_vendor_id, adjustment) + result = inventory_service.adjust_inventory(db, current_user.token_vendor_id, adjustment) + db.commit() + return result @router.post("/inventory/reserve", response_model=InventoryResponse) @@ -56,7 +60,9 @@ def reserve_inventory( db: Session = Depends(get_db), ): """Reserve inventory for an order.""" - return inventory_service.reserve_inventory(db, current_user.token_vendor_id, reservation) + result = inventory_service.reserve_inventory(db, current_user.token_vendor_id, reservation) + db.commit() + return result @router.post("/inventory/release", response_model=InventoryResponse) @@ -66,7 +72,9 @@ def release_reservation( db: Session = Depends(get_db), ): """Release reserved inventory (cancel order).""" - return inventory_service.release_reservation(db, current_user.token_vendor_id, reservation) + result = inventory_service.release_reservation(db, current_user.token_vendor_id, reservation) + db.commit() + return result @router.post("/inventory/fulfill", response_model=InventoryResponse) @@ -76,7 +84,9 @@ def fulfill_reservation( db: Session = Depends(get_db), ): """Fulfill reservation (complete order, remove from stock).""" - return inventory_service.fulfill_reservation(db, current_user.token_vendor_id, reservation) + result = inventory_service.fulfill_reservation(db, current_user.token_vendor_id, reservation) + db.commit() + return result @router.get("/inventory/product/{product_id}", response_model=ProductInventorySummary) @@ -119,9 +129,11 @@ def update_inventory( db: Session = Depends(get_db), ): """Update inventory entry.""" - return inventory_service.update_inventory( + result = inventory_service.update_inventory( db, current_user.token_vendor_id, inventory_id, inventory_update ) + db.commit() + return result @router.delete("/inventory/{inventory_id}", response_model=InventoryMessageResponse) @@ -132,4 +144,5 @@ def delete_inventory( ): """Delete inventory entry.""" inventory_service.delete_inventory(db, current_user.token_vendor_id, inventory_id) + db.commit() return InventoryMessageResponse(message="Inventory deleted successfully") diff --git a/app/api/v1/vendor/marketplace.py b/app/api/v1/vendor/marketplace.py index a46af68a..2116fb99 100644 --- a/app/api/v1/vendor/marketplace.py +++ b/app/api/v1/vendor/marketplace.py @@ -47,6 +47,7 @@ async def import_products_from_marketplace( import_job = marketplace_import_job_service.create_import_job( db, request, vendor, current_user ) + db.commit() # Process in background background_tasks.add_task( diff --git a/app/api/v1/vendor/orders.py b/app/api/v1/vendor/orders.py index 19dc2213..dc9f4dde 100644 --- a/app/api/v1/vendor/orders.py +++ b/app/api/v1/vendor/orders.py @@ -106,6 +106,7 @@ def update_order_status( order_id=order_id, order_update=order_update, ) + db.commit() logger.info( f"Order {order.order_number} status updated to {order.status} " diff --git a/app/api/v1/vendor/products.py b/app/api/v1/vendor/products.py index 1441884a..5a540dd0 100644 --- a/app/api/v1/vendor/products.py +++ b/app/api/v1/vendor/products.py @@ -92,6 +92,7 @@ def add_product_to_catalog( product = product_service.create_product( db=db, vendor_id=current_user.token_vendor_id, product_data=product_data ) + db.commit() logger.info( f"Product {product.id} added to catalog by user {current_user.username} " @@ -115,6 +116,7 @@ def update_product( product_id=product_id, product_update=product_data, ) + db.commit() logger.info( f"Product {product_id} updated by user {current_user.username} " @@ -134,6 +136,7 @@ def remove_product_from_catalog( product_service.delete_product( db=db, vendor_id=current_user.token_vendor_id, product_id=product_id ) + db.commit() logger.info( f"Product {product_id} removed from catalog by user {current_user.username} " @@ -161,6 +164,7 @@ def publish_from_marketplace( product = product_service.create_product( db=db, vendor_id=current_user.token_vendor_id, product_data=product_data ) + db.commit() logger.info( f"Marketplace product {marketplace_product_id} published to catalog " diff --git a/app/api/v1/vendor/team.py b/app/api/v1/vendor/team.py index a985756a..63685dbc 100644 --- a/app/api/v1/vendor/team.py +++ b/app/api/v1/vendor/team.py @@ -150,6 +150,7 @@ def invite_team_member( email=invitation.email, role_name="staff", ) + db.commit() logger.info( f"Invitation sent: {invitation.email} to {vendor.vendor_code} " @@ -189,6 +190,7 @@ def accept_invitation(acceptance: InvitationAccept, db: Session = Depends(get_db first_name=acceptance.first_name, last_name=acceptance.last_name, ) + db.commit() logger.info( f"Invitation accepted: {result['user'].email} " @@ -272,6 +274,7 @@ def update_team_member( new_role_id=update_data.role_id, is_active=update_data.is_active, ) + db.commit() logger.info( f"Team member updated: {user_id} in {vendor.vendor_code} " @@ -307,6 +310,7 @@ def remove_team_member( vendor = request.state.vendor vendor_team_service.remove_team_member(db=db, vendor=vendor, user_id=user_id) + db.commit() logger.info( f"Team member removed: {user_id} from {vendor.vendor_code} " @@ -344,6 +348,8 @@ def bulk_remove_team_members( failed_count += 1 errors.append({"user_id": user_id, "error": str(e)}) + db.commit() + logger.info( f"Bulk remove completed: {success_count} removed, {failed_count} failed " f"in {vendor.vendor_code}" diff --git a/app/services/admin_audit_service.py b/app/services/admin_audit_service.py index e6eeb4c6..8f9bf415 100644 --- a/app/services/admin_audit_service.py +++ b/app/services/admin_audit_service.py @@ -66,7 +66,7 @@ class AdminAuditService: ) db.add(audit_log) - db.commit() + db.flush() db.refresh(audit_log) logger.info( @@ -77,7 +77,6 @@ class AdminAuditService: return audit_log except Exception as e: - db.rollback() logger.error(f"Failed to log admin action: {str(e)}") # Don't raise exception - audit logging should not break operations return None diff --git a/app/services/admin_service.py b/app/services/admin_service.py index 38560586..68c31379 100644 --- a/app/services/admin_service.py +++ b/app/services/admin_service.py @@ -82,7 +82,7 @@ class AdminService: original_status = user.is_active user.is_active = not user.is_active user.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(user) status_action = "activated" if user.is_active else "deactivated" @@ -92,7 +92,6 @@ class AdminService: return user, message except Exception as e: - db.rollback() logger.error(f"Failed to toggle user {user_id} status: {str(e)}") raise UserStatusChangeException( user_id=user_id, @@ -185,7 +184,7 @@ class AdminService: is_active=True, ) db.add(user) - db.commit() + db.flush() db.refresh(user) logger.info(f"Admin {current_admin_id} created user {user.username}") @@ -266,7 +265,7 @@ class AdminService: user.is_active = is_active user.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(user) logger.info(f"Admin {current_admin_id} updated user {user.username}") @@ -305,7 +304,6 @@ class AdminService: username = user.username db.delete(user) - db.commit() logger.info(f"Admin {current_admin_id} deleted user {username}") return f"User {username} deleted successfully" @@ -405,7 +403,7 @@ class AdminService: # Create default roles for vendor self._create_default_roles(db, vendor.id) - db.commit() + db.flush() db.refresh(vendor) logger.info( @@ -415,10 +413,8 @@ class AdminService: return vendor except (VendorAlreadyExistsException, ValidationException): - db.rollback() raise except Exception as e: - db.rollback() logger.error(f"Failed to create vendor: {str(e)}") raise AdminOperationException( operation="create_vendor", @@ -499,7 +495,7 @@ class AdminService: if vendor.is_verified: vendor.verified_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(vendor) status_action = "verified" if vendor.is_verified else "unverified" @@ -509,7 +505,6 @@ class AdminService: return vendor, message except Exception as e: - db.rollback() logger.error(f"Failed to verify vendor {vendor_id}: {str(e)}") raise VendorVerificationException( vendor_id=vendor_id, @@ -525,7 +520,7 @@ class AdminService: original_status = vendor.is_active vendor.is_active = not vendor.is_active vendor.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(vendor) status_action = "activated" if vendor.is_active else "deactivated" @@ -535,7 +530,6 @@ class AdminService: return vendor, message except Exception as e: - db.rollback() logger.error(f"Failed to toggle vendor {vendor_id} status: {str(e)}") raise AdminOperationException( operation="toggle_vendor_status", @@ -560,13 +554,11 @@ class AdminService: # - Delete import jobs db.delete(vendor) - db.commit() logger.warning(f"Vendor {vendor_code} and all associated data deleted") return f"Vendor {vendor_code} successfully deleted" except Exception as e: - db.rollback() logger.error(f"Failed to delete vendor {vendor_id}: {str(e)}") raise AdminOperationException( operation="delete_vendor", reason="Database deletion failed" @@ -650,7 +642,7 @@ class AdminService: vendor.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(vendor) logger.info( @@ -660,10 +652,8 @@ class AdminService: return vendor except ValidationException: - db.rollback() raise except Exception as e: - db.rollback() logger.error(f"Failed to update vendor {vendor_id}: {str(e)}") raise AdminOperationException( operation="update_vendor", reason=f"Database update failed: {str(e)}" diff --git a/app/services/admin_settings_service.py b/app/services/admin_settings_service.py index 74b75b77..168fc4de 100644 --- a/app/services/admin_settings_service.py +++ b/app/services/admin_settings_service.py @@ -163,7 +163,7 @@ class AdminSettingsService: ) db.add(setting) - db.commit() + db.flush() db.refresh(setting) logger.info(f"Setting '{setting.key}' created by admin {admin_user_id}") @@ -171,10 +171,8 @@ class AdminSettingsService: return AdminSettingResponse.model_validate(setting) except ValidationException: - db.rollback() raise except Exception as e: - db.rollback() logger.error(f"Failed to create setting: {str(e)}") raise AdminOperationException( operation="create_setting", reason="Database operation failed" @@ -205,7 +203,7 @@ class AdminSettingsService: setting.last_modified_by_user_id = admin_user_id setting.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(setting) logger.info(f"Setting '{setting.key}' updated by admin {admin_user_id}") @@ -213,10 +211,8 @@ class AdminSettingsService: return AdminSettingResponse.model_validate(setting) except ValidationException: - db.rollback() raise except Exception as e: - db.rollback() logger.error(f"Failed to update setting {key}: {str(e)}") raise AdminOperationException( operation="update_setting", reason="Database operation failed" @@ -244,14 +240,12 @@ class AdminSettingsService: try: db.delete(setting) - db.commit() logger.warning(f"Setting '{key}' deleted by admin {admin_user_id}") return f"Setting '{key}' successfully deleted" except Exception as e: - db.rollback() logger.error(f"Failed to delete setting {key}: {str(e)}") raise AdminOperationException( operation="delete_setting", reason="Database operation failed" diff --git a/app/services/cart_service.py b/app/services/cart_service.py index 8d4bb4dc..5947fc52 100644 --- a/app/services/cart_service.py +++ b/app/services/cart_service.py @@ -206,7 +206,7 @@ class CartService: ) existing_item.quantity = new_quantity - db.commit() + db.flush() db.refresh(existing_item) logger.info( @@ -245,7 +245,7 @@ class CartService: price_at_add=current_price, ) db.add(cart_item) - db.commit() + db.flush() db.refresh(cart_item) logger.info( @@ -337,7 +337,7 @@ class CartService: # Update quantity cart_item.quantity = quantity - db.commit() + db.flush() db.refresh(cart_item) logger.info( @@ -392,7 +392,6 @@ class CartService: ) db.delete(cart_item) - db.commit() logger.info( "[CART_SERVICE] Removed item from cart", @@ -426,8 +425,6 @@ class CartService: .delete() ) - db.commit() - logger.info( "[CART_SERVICE] Cleared cart", extra={ diff --git a/app/services/code_quality_service.py b/app/services/code_quality_service.py index d25f24f0..d4b20460 100644 --- a/app/services/code_quality_service.py +++ b/app/services/code_quality_service.py @@ -117,7 +117,7 @@ class CodeQualityService: ) db.add(violation) - db.commit() + db.flush() db.refresh(scan) logger.info(f"Scan completed: {scan.total_violations} violations found") @@ -268,7 +268,7 @@ class CodeQualityService: priority=priority, ) db.add(assignment) - db.commit() + db.flush() logger.info(f"Violation {violation_id} assigned to user {user_id}") return assignment @@ -297,7 +297,7 @@ class CodeQualityService: violation.resolved_by = resolved_by violation.resolution_note = resolution_note - db.commit() + db.flush() logger.info(f"Violation {violation_id} resolved by user {resolved_by}") return violation @@ -325,7 +325,7 @@ class CodeQualityService: violation.resolved_by = ignored_by violation.resolution_note = f"Ignored: {reason}" - db.commit() + db.flush() logger.info(f"Violation {violation_id} ignored by user {ignored_by}") return violation @@ -348,7 +348,7 @@ class CodeQualityService: violation_id=violation_id, user_id=user_id, comment=comment ) db.add(comment_obj) - db.commit() + db.flush() logger.info(f"Comment added to violation {violation_id} by user {user_id}") return comment_obj diff --git a/app/services/content_page_service.py b/app/services/content_page_service.py index c639b885..0e1041d5 100644 --- a/app/services/content_page_service.py +++ b/app/services/content_page_service.py @@ -211,7 +211,7 @@ class ContentPageService: ) db.add(page) - db.commit() + db.flush() db.refresh(page) logger.info( @@ -288,7 +288,7 @@ class ContentPageService: if updated_by is not None: page.updated_by = updated_by - db.commit() + db.flush() db.refresh(page) logger.info(f"Updated content page: id={page_id}, slug={page.slug}") @@ -313,7 +313,6 @@ class ContentPageService: return False db.delete(page) - db.commit() logger.info(f"Deleted content page: id={page_id}, slug={page.slug}") return True diff --git a/app/services/customer_service.py b/app/services/customer_service.py index 9855fbef..013cf82c 100644 --- a/app/services/customer_service.py +++ b/app/services/customer_service.py @@ -108,7 +108,7 @@ class CustomerService: try: db.add(customer) - db.commit() + db.flush() db.refresh(customer) logger.info( @@ -120,7 +120,6 @@ class CustomerService: return customer except Exception as e: - db.rollback() logger.error(f"Error registering customer: {str(e)}") raise CustomerValidationException( message="Failed to register customer", details={"error": str(e)} @@ -310,7 +309,7 @@ class CustomerService: setattr(customer, field, value) try: - db.commit() + db.flush() db.refresh(customer) logger.info(f"Customer updated: {customer.email} (ID: {customer.id})") @@ -318,7 +317,6 @@ class CustomerService: return customer except Exception as e: - db.rollback() logger.error(f"Error updating customer: {str(e)}") raise CustomerValidationException( message="Failed to update customer", details={"error": str(e)} @@ -344,7 +342,7 @@ class CustomerService: customer = self.get_customer(db, vendor_id, customer_id) customer.is_active = False - db.commit() + db.flush() db.refresh(customer) logger.info(f"Customer deactivated: {customer.email} (ID: {customer.id})") @@ -369,8 +367,6 @@ class CustomerService: customer.total_spent += order_total customer.last_order_date = datetime.utcnow() - db.commit() - logger.debug(f"Updated stats for customer {customer.email}") def _generate_customer_number( diff --git a/app/services/inventory_service.py b/app/services/inventory_service.py index ae194b80..3816c299 100644 --- a/app/services/inventory_service.py +++ b/app/services/inventory_service.py @@ -62,7 +62,7 @@ class InventoryService: old_qty = existing.quantity existing.quantity = inventory_data.quantity existing.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(existing) logger.info( @@ -79,7 +79,7 @@ class InventoryService: gtin=product.marketplace_product.gtin, # Optional reference ) db.add(new_inventory) - db.commit() + db.flush() db.refresh(new_inventory) logger.info( @@ -143,7 +143,7 @@ class InventoryService: gtin=product.marketplace_product.gtin, ) db.add(new_inventory) - db.commit() + db.flush() db.refresh(new_inventory) logger.info( @@ -165,7 +165,7 @@ class InventoryService: existing.quantity = new_qty existing.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(existing) logger.info( @@ -227,7 +227,7 @@ class InventoryService: # Reserve inventory inventory.reserved_quantity += reserve_data.quantity inventory.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(inventory) logger.info( @@ -287,7 +287,7 @@ class InventoryService: inventory.reserved_quantity -= reserve_data.quantity inventory.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(inventory) logger.info( @@ -353,7 +353,7 @@ class InventoryService: 0, inventory.reserved_quantity - reserve_data.quantity ) inventory.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(inventory) logger.info( @@ -507,7 +507,7 @@ class InventoryService: inventory.location = self._validate_location(inventory_update.location) inventory.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(inventory) logger.info(f"Updated inventory {inventory_id}") @@ -535,7 +535,7 @@ class InventoryService: raise InventoryNotFoundException(f"Inventory {inventory_id} not found") db.delete(inventory) - db.commit() + db.flush() logger.info(f"Deleted inventory {inventory_id}") return True diff --git a/app/services/marketplace_import_job_service.py b/app/services/marketplace_import_job_service.py index 339cf894..58900bd6 100644 --- a/app/services/marketplace_import_job_service.py +++ b/app/services/marketplace_import_job_service.py @@ -53,7 +53,7 @@ class MarketplaceImportJobService: ) db.add(import_job) - db.commit() + db.flush() db.refresh(import_job) logger.info( @@ -65,7 +65,6 @@ class MarketplaceImportJobService: return import_job except Exception as e: - db.rollback() logger.error(f"Error creating import job: {str(e)}") raise ValidationException("Failed to create import job") diff --git a/app/services/marketplace_product_service.py b/app/services/marketplace_product_service.py index 3c96013a..bc5195d1 100644 --- a/app/services/marketplace_product_service.py +++ b/app/services/marketplace_product_service.py @@ -92,7 +92,7 @@ class MarketplaceProductService: db_product = MarketplaceProduct(**product_data.model_dump()) db.add(db_product) - db.commit() + db.flush() db.refresh(db_product) logger.info(f"Created product {db_product.marketplace_product_id}") @@ -102,10 +102,8 @@ class MarketplaceProductService: InvalidMarketplaceProductDataException, MarketplaceProductValidationException, ): - db.rollback() raise # Re-raise custom exceptions except IntegrityError as e: - db.rollback() logger.error(f"Database integrity error: {str(e)}") if "marketplace_product_id" in str(e).lower() or "unique" in str(e).lower(): raise MarketplaceProductAlreadyExistsException( @@ -115,7 +113,6 @@ class MarketplaceProductService: "Data integrity constraint violation" ) except Exception as e: - db.rollback() logger.error(f"Error creating product: {str(e)}") raise ValidationException("Failed to create product") @@ -271,7 +268,7 @@ class MarketplaceProductService: setattr(product, key, value) product.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(product) logger.info(f"Updated product {marketplace_product_id}") @@ -282,10 +279,8 @@ class MarketplaceProductService: InvalidMarketplaceProductDataException, MarketplaceProductValidationException, ): - db.rollback() raise # Re-raise custom exceptions except Exception as e: - db.rollback() logger.error(f"Error updating product {marketplace_product_id}: {str(e)}") raise ValidationException("Failed to update product") @@ -311,7 +306,6 @@ class MarketplaceProductService: db.query(Inventory).filter(Inventory.gtin == product.gtin).delete() db.delete(product) - db.commit() logger.info(f"Deleted product {marketplace_product_id}") return True @@ -319,7 +313,6 @@ class MarketplaceProductService: except MarketplaceProductNotFoundException: raise # Re-raise custom exceptions except Exception as e: - db.rollback() logger.error(f"Error deleting product {marketplace_product_id}: {str(e)}") raise ValidationException("Failed to delete product") diff --git a/app/services/order_service.py b/app/services/order_service.py index e55c2983..66bf9103 100644 --- a/app/services/order_service.py +++ b/app/services/order_service.py @@ -227,7 +227,7 @@ class OrderService: order_item = OrderItem(order_id=order.id, **item_data) db.add(order_item) - db.commit() + db.flush() db.refresh(order) logger.info( @@ -242,10 +242,8 @@ class OrderService: InsufficientInventoryException, CustomerNotFoundException, ): - db.rollback() raise except Exception as e: - db.rollback() logger.error(f"Error creating order: {str(e)}") raise ValidationException(f"Failed to create order: {str(e)}") @@ -354,7 +352,7 @@ class OrderService: order.internal_notes = order_update.internal_notes order.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(order) logger.info(f"Order {order.order_number} updated: status={order.status}") @@ -362,10 +360,8 @@ class OrderService: return order except OrderNotFoundException: - db.rollback() raise except Exception as e: - db.rollback() logger.error(f"Error updating order: {str(e)}") raise ValidationException(f"Failed to update order: {str(e)}") diff --git a/app/services/product_service.py b/app/services/product_service.py index b7eb6e1f..3769a4b7 100644 --- a/app/services/product_service.py +++ b/app/services/product_service.py @@ -126,17 +126,15 @@ class ProductService: ) db.add(product) - db.commit() + db.flush() db.refresh(product) logger.info(f"Added product {product.id} to vendor {vendor_id} catalog") return product except (ProductAlreadyExistsException, ValidationException): - db.rollback() raise except Exception as e: - db.rollback() logger.error(f"Error creating product: {str(e)}") raise ValidationException("Failed to create product") @@ -168,17 +166,15 @@ class ProductService: setattr(product, key, value) product.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(product) logger.info(f"Updated product {product_id} in vendor {vendor_id} catalog") return product except ProductNotFoundException: - db.rollback() raise except Exception as e: - db.rollback() logger.error(f"Error updating product: {str(e)}") raise ValidationException("Failed to update product") @@ -198,7 +194,6 @@ class ProductService: product = self.get_product(db, vendor_id, product_id) db.delete(product) - db.commit() logger.info(f"Deleted product {product_id} from vendor {vendor_id} catalog") return True @@ -206,7 +201,6 @@ class ProductService: except ProductNotFoundException: raise except Exception as e: - db.rollback() logger.error(f"Error deleting product: {str(e)}") raise ValidationException("Failed to delete product") diff --git a/app/services/team_service.py b/app/services/team_service.py index e850ab82..77582f41 100644 --- a/app/services/team_service.py +++ b/app/services/team_service.py @@ -135,7 +135,7 @@ class TeamService: vendor_user.is_active = update_data["is_active"] vendor_user.updated_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(vendor_user) return { @@ -144,7 +144,6 @@ class TeamService: } except Exception as e: - db.rollback() logger.error(f"Error updating team member: {str(e)}") raise ValidationException("Failed to update team member") @@ -178,13 +177,11 @@ class TeamService: # Soft delete vendor_user.is_active = False vendor_user.updated_at = datetime.now(UTC) - db.commit() logger.info(f"Removed user {user_id} from vendor {vendor_id}") return True except Exception as e: - db.rollback() logger.error(f"Error removing team member: {str(e)}") raise ValidationException("Failed to remove team member") diff --git a/app/services/vendor_domain_service.py b/app/services/vendor_domain_service.py index 0a539a25..05c6018f 100644 --- a/app/services/vendor_domain_service.py +++ b/app/services/vendor_domain_service.py @@ -113,7 +113,7 @@ class VendorDomainService: ) db.add(new_domain) - db.commit() + db.flush() db.refresh(new_domain) logger.info(f"Domain {normalized_domain} added to vendor {vendor_id}") @@ -126,10 +126,8 @@ class VendorDomainService: InvalidDomainFormatException, ReservedDomainException, ): - db.rollback() raise except Exception as e: - db.rollback() logger.error(f"Error adding domain: {str(e)}") raise ValidationException("Failed to add domain") @@ -223,17 +221,15 @@ class VendorDomainService: if domain_update.is_active is not None: domain.is_active = domain_update.is_active - db.commit() + db.flush() db.refresh(domain) logger.info(f"Domain {domain.domain} updated") return domain except (VendorDomainNotFoundException, DomainNotVerifiedException): - db.rollback() raise except Exception as e: - db.rollback() logger.error(f"Error updating domain: {str(e)}") raise ValidationException("Failed to update domain") @@ -257,16 +253,13 @@ class VendorDomainService: vendor_id = domain.vendor_id db.delete(domain) - db.commit() logger.info(f"Domain {domain_name} deleted from vendor {vendor_id}") return f"Domain {domain_name} deleted successfully" except VendorDomainNotFoundException: - db.rollback() raise except Exception as e: - db.rollback() logger.error(f"Error deleting domain: {str(e)}") raise ValidationException("Failed to delete domain") @@ -312,7 +305,7 @@ class VendorDomainService: # Verification successful domain.is_verified = True domain.verified_at = datetime.now(UTC) - db.commit() + db.flush() db.refresh(domain) logger.info(f"Domain {domain.domain} verified successfully") diff --git a/app/services/vendor_team_service.py b/app/services/vendor_team_service.py index 98a5cdc9..82bd311f 100644 --- a/app/services/vendor_team_service.py +++ b/app/services/vendor_team_service.py @@ -112,7 +112,7 @@ class VendorTeamService: ) existing_membership.invitation_sent_at = datetime.utcnow() existing_membership.invitation_accepted_at = None - db.commit() + db.flush() logger.info( f"Re-invited user {email} to vendor {vendor.vendor_code}" @@ -170,7 +170,7 @@ class VendorTeamService: is_active=False, # Will be activated on acceptance ) db.add(vendor_user) - db.commit() + db.flush() logger.info( f"Invited {email} to vendor {vendor.vendor_code} " @@ -190,7 +190,6 @@ class VendorTeamService: except (TeamMemberAlreadyExistsException, MaxTeamMembersReachedException): raise except Exception as e: - db.rollback() logger.error(f"Error inviting team member: {str(e)}") raise @@ -255,7 +254,7 @@ class VendorTeamService: vendor_user.invitation_accepted_at = datetime.utcnow() vendor_user.invitation_token = None # Clear token - db.commit() + db.flush() logger.info( f"User {user.email} accepted invitation to vendor {vendor.vendor_code}" @@ -273,7 +272,6 @@ class VendorTeamService: ): raise except Exception as e: - db.rollback() logger.error(f"Error accepting invitation: {str(e)}") raise @@ -315,7 +313,6 @@ class VendorTeamService: # Soft delete - just deactivate vendor_user.is_active = False - db.commit() logger.info(f"Removed user {user_id} from vendor {vendor.vendor_code}") return True @@ -323,7 +320,6 @@ class VendorTeamService: except (UserNotFoundException, CannotRemoveOwnerException): raise except Exception as e: - db.rollback() logger.error(f"Error removing team member: {str(e)}") raise @@ -374,7 +370,7 @@ class VendorTeamService: ) vendor_user.role_id = new_role.id - db.commit() + db.flush() logger.info( f"Updated role for user {user_id} in vendor {vendor.vendor_code} " @@ -386,7 +382,6 @@ class VendorTeamService: except (UserNotFoundException, CannotRemoveOwnerException): raise except Exception as e: - db.rollback() logger.error(f"Error updating member role: {str(e)}") raise diff --git a/app/services/vendor_theme_service.py b/app/services/vendor_theme_service.py index c08cd652..495706d1 100644 --- a/app/services/vendor_theme_service.py +++ b/app/services/vendor_theme_service.py @@ -194,8 +194,8 @@ class VendorThemeService: # Update theme fields self._apply_theme_updates(theme, theme_data) - # Commit changes - db.commit() + # Flush changes + db.flush() db.refresh(theme) self.logger.info(f"Theme updated successfully for vendor {vendor_code}") @@ -206,7 +206,6 @@ class VendorThemeService: raise except Exception as e: - db.rollback() self.logger.error(f"Failed to update theme for vendor {vendor_code}: {e}") raise ThemeOperationException( operation="update", vendor_code=vendor_code, reason=str(e) @@ -312,8 +311,8 @@ class VendorThemeService: # Apply preset using helper function apply_preset(theme, preset_name) - # Commit changes - db.commit() + # Flush changes + db.flush() db.refresh(theme) self.logger.info( @@ -326,7 +325,6 @@ class VendorThemeService: raise except Exception as e: - db.rollback() self.logger.error(f"Failed to apply preset to vendor {vendor_code}: {e}") raise ThemeOperationException( operation="apply_preset", vendor_code=vendor_code, reason=str(e) @@ -386,7 +384,6 @@ class VendorThemeService: # Delete theme db.delete(theme) - db.commit() self.logger.info(f"Theme deleted for vendor {vendor_code}") return { @@ -398,7 +395,6 @@ class VendorThemeService: raise except Exception as e: - db.rollback() self.logger.error(f"Failed to delete theme for vendor {vendor_code}: {e}") raise ThemeOperationException( operation="delete", vendor_code=vendor_code, reason=str(e)