Spaces:
Paused
Paused
PupaClic commited on
Commit ·
28b4202
1
Parent(s): 229973a
feat(bidders): implement deletion of all barrier sizes associated with a bidder
Browse files- app/controllers/bidders.py +20 -27
- app/services/barrier_size_service.py +50 -0
app/controllers/bidders.py
CHANGED
|
@@ -469,42 +469,35 @@ def update_barrier_size_with_association(
|
|
| 469 |
)
|
| 470 |
|
| 471 |
|
|
|
|
| 472 |
@router.delete(
|
| 473 |
-
"/barrier-sizes/{
|
| 474 |
status_code=status.HTTP_204_NO_CONTENT,
|
| 475 |
-
summary="Delete
|
| 476 |
-
response_description="
|
| 477 |
)
|
| 478 |
-
def
|
| 479 |
-
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 480 |
try:
|
| 481 |
-
logger.info(f"Deleting barrier
|
| 482 |
-
|
| 483 |
-
# Check if barrier size exists first
|
| 484 |
-
from app.db.repositories.barrier_size_repo import get_barrier_size
|
| 485 |
-
barrier_size = get_barrier_size(db, id)
|
| 486 |
-
if not barrier_size:
|
| 487 |
-
raise HTTPException(status_code=404, detail=f"Barrier size {id} not found")
|
| 488 |
|
| 489 |
-
|
| 490 |
-
success = barrier_size_service.delete(db, id)
|
| 491 |
-
if not success:
|
| 492 |
-
raise HTTPException(
|
| 493 |
-
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
| 494 |
-
detail=f"Failed to delete barrier size {id}"
|
| 495 |
-
)
|
| 496 |
-
|
| 497 |
-
logger.info(f"Successfully deleted barrier size {id}")
|
| 498 |
return None
|
| 499 |
-
except HTTPException:
|
| 500 |
-
raise
|
| 501 |
except Exception as e:
|
| 502 |
-
logger.error(f"Error deleting barrier
|
| 503 |
-
import traceback
|
| 504 |
-
traceback.print_exc() # Print full traceback for debugging
|
| 505 |
raise HTTPException(
|
| 506 |
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
| 507 |
-
detail=
|
| 508 |
)
|
| 509 |
|
| 510 |
@router.delete(
|
|
|
|
| 469 |
)
|
| 470 |
|
| 471 |
|
| 472 |
+
|
| 473 |
@router.delete(
|
| 474 |
+
"/barrier-sizes/by-bidder/{bidder_id}",
|
| 475 |
status_code=status.HTTP_204_NO_CONTENT,
|
| 476 |
+
summary="Delete all barrier sizes associated with a bidder",
|
| 477 |
+
response_description="All barrier sizes and associations for the bidder deleted successfully"
|
| 478 |
)
|
| 479 |
+
def delete_barrier_sizes_by_bidder(bidder_id: int, db: Session = Depends(get_db)):
|
| 480 |
+
"""
|
| 481 |
+
Delete all barrier sizes associated with a specific bidder.
|
| 482 |
+
|
| 483 |
+
This implements the two-step SQL logic:
|
| 484 |
+
1. DELETE FROM BarrierSizes WHERE Id IN (SELECT BarrierSizeId FROM BiddersBarrierSizes WHERE BidderId = {bidder_id})
|
| 485 |
+
2. DELETE FROM BiddersBarrierSizes WHERE BidderId = {bidder_id}
|
| 486 |
+
|
| 487 |
+
Parameters:
|
| 488 |
+
- bidder_id: The bidder ID to delete all barrier sizes for
|
| 489 |
+
"""
|
| 490 |
try:
|
| 491 |
+
logger.info(f"Deleting all barrier sizes for bidder {bidder_id}")
|
| 492 |
+
result = barrier_size_service.delete_all_by_bidder(db, bidder_id)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 493 |
|
| 494 |
+
logger.info(f"Successfully deleted barrier sizes for bidder {bidder_id}: {result}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 495 |
return None
|
|
|
|
|
|
|
| 496 |
except Exception as e:
|
| 497 |
+
logger.error(f"Error deleting barrier sizes for bidder {bidder_id}: {e}")
|
|
|
|
|
|
|
| 498 |
raise HTTPException(
|
| 499 |
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
| 500 |
+
detail="Failed to delete barrier sizes for bidder"
|
| 501 |
)
|
| 502 |
|
| 503 |
@router.delete(
|
app/services/barrier_size_service.py
CHANGED
|
@@ -144,6 +144,56 @@ def delete_by_bidder_and_barrier_id(db: Session, bidder_id: int, barrier_size_id
|
|
| 144 |
db.rollback()
|
| 145 |
raise
|
| 146 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
def create_barrier_with_association(
|
| 148 |
db: Session,
|
| 149 |
height: Optional[float] = None,
|
|
|
|
| 144 |
db.rollback()
|
| 145 |
raise
|
| 146 |
|
| 147 |
+
def delete_all_by_bidder(db: Session, bidder_id: int):
|
| 148 |
+
"""
|
| 149 |
+
Delete all barrier sizes associated with a specific bidder.
|
| 150 |
+
|
| 151 |
+
Implements the two-step SQL logic:
|
| 152 |
+
1. DELETE FROM BarrierSizes WHERE Id IN (SELECT BarrierSizeId FROM BiddersBarrierSizes WHERE BidderId = {bidder_id})
|
| 153 |
+
2. DELETE FROM BiddersBarrierSizes WHERE BidderId = {bidder_id}
|
| 154 |
+
|
| 155 |
+
Args:
|
| 156 |
+
db: Database session
|
| 157 |
+
bidder_id: The bidder ID
|
| 158 |
+
|
| 159 |
+
Returns:
|
| 160 |
+
dict: Status of deletion operations
|
| 161 |
+
"""
|
| 162 |
+
try:
|
| 163 |
+
bidders_barrier_repo = BiddersBarrierSizesRepository(db)
|
| 164 |
+
|
| 165 |
+
# Step 1: Get all barrier size IDs associated with this bidder
|
| 166 |
+
associations = bidders_barrier_repo.get_by_bidder_id(bidder_id)
|
| 167 |
+
barrier_size_ids = [assoc.BarrierSizeId for assoc in associations]
|
| 168 |
+
|
| 169 |
+
logger.info(f"Found {len(barrier_size_ids)} barrier sizes for bidder {bidder_id}: {barrier_size_ids}")
|
| 170 |
+
|
| 171 |
+
# Step 2: Delete all barrier sizes that are associated with this bidder
|
| 172 |
+
barrier_sizes_deleted = 0
|
| 173 |
+
for barrier_size_id in barrier_size_ids:
|
| 174 |
+
success = delete_barrier_size(db, barrier_size_id)
|
| 175 |
+
if success:
|
| 176 |
+
barrier_sizes_deleted += 1
|
| 177 |
+
|
| 178 |
+
# Step 3: Delete all associations for this bidder
|
| 179 |
+
associations_deleted = bidders_barrier_repo.delete_by_bidder_id(bidder_id)
|
| 180 |
+
|
| 181 |
+
result = {
|
| 182 |
+
"bidder_id": bidder_id,
|
| 183 |
+
"barrier_sizes_deleted": barrier_sizes_deleted,
|
| 184 |
+
"barrier_size_ids": barrier_size_ids,
|
| 185 |
+
"associations_deleted": associations_deleted,
|
| 186 |
+
"message": f"Deleted {barrier_sizes_deleted} barrier sizes and {associations_deleted} associations for bidder {bidder_id}"
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
logger.info(f"Delete all by bidder operation completed: {result}")
|
| 190 |
+
return result
|
| 191 |
+
|
| 192 |
+
except Exception as e:
|
| 193 |
+
logger.error(f"Error deleting all barrier sizes for bidder {bidder_id}: {e}")
|
| 194 |
+
db.rollback()
|
| 195 |
+
raise
|
| 196 |
+
|
| 197 |
def create_barrier_with_association(
|
| 198 |
db: Session,
|
| 199 |
height: Optional[float] = None,
|