fix(t243): allow deleting unreferenced procurement drafts
This commit is contained in:
@@ -642,7 +642,63 @@ func (store *Store) DeleteFreightOrder(
|
||||
return nil, repositoryFailure(err)
|
||||
}
|
||||
|
||||
var inUse int
|
||||
var hasPurchaseTask int
|
||||
err = tx.QueryRowContext(
|
||||
ctx,
|
||||
`SELECT EXISTS (
|
||||
SELECT 1
|
||||
FROM freight_order_items AS item
|
||||
JOIN procurement_requests AS request
|
||||
ON request.freight_order_item_id = item.id
|
||||
WHERE item.freight_order_id = ?
|
||||
AND request.purchase_task_id IS NOT NULL
|
||||
)`,
|
||||
storedOrderID,
|
||||
).Scan(&hasPurchaseTask)
|
||||
if err != nil {
|
||||
return nil, repositoryFailure(err)
|
||||
}
|
||||
if hasPurchaseTask != 0 {
|
||||
return nil, usecase.ErrFreightOrderHasPurchaseTask
|
||||
}
|
||||
|
||||
var hasReference int
|
||||
err = tx.QueryRowContext(
|
||||
ctx,
|
||||
`SELECT EXISTS (
|
||||
SELECT 1
|
||||
FROM freight_order_items AS item
|
||||
JOIN procurement_requests AS request
|
||||
ON request.freight_order_item_id = item.id
|
||||
WHERE item.freight_order_id = ?
|
||||
AND request.reference_asset_id IS NOT NULL
|
||||
)`,
|
||||
storedOrderID,
|
||||
).Scan(&hasReference)
|
||||
if err != nil {
|
||||
return nil, repositoryFailure(err)
|
||||
}
|
||||
if hasReference != 0 {
|
||||
return nil, usecase.ErrFreightOrderHasReference
|
||||
}
|
||||
|
||||
if _, err := tx.ExecContext(
|
||||
ctx,
|
||||
`DELETE FROM procurement_requests
|
||||
WHERE freight_order_item_id IN (
|
||||
SELECT id
|
||||
FROM freight_order_items
|
||||
WHERE freight_order_id = ?
|
||||
)
|
||||
AND reference_asset_id IS NULL
|
||||
AND purchase_task_id IS NULL
|
||||
AND status IN ('BLOCKED', 'NEEDS_IMAGE', 'SOURCE_CHANGED')`,
|
||||
storedOrderID,
|
||||
); err != nil {
|
||||
return nil, repositoryFailure(err)
|
||||
}
|
||||
|
||||
var remainingRequests int
|
||||
err = tx.QueryRowContext(
|
||||
ctx,
|
||||
`SELECT EXISTS (
|
||||
@@ -653,12 +709,12 @@ func (store *Store) DeleteFreightOrder(
|
||||
WHERE item.freight_order_id = ?
|
||||
)`,
|
||||
storedOrderID,
|
||||
).Scan(&inUse)
|
||||
).Scan(&remainingRequests)
|
||||
if err != nil {
|
||||
return nil, repositoryFailure(err)
|
||||
}
|
||||
if inUse != 0 {
|
||||
return nil, usecase.ErrFreightOrderInUse
|
||||
if remainingRequests != 0 {
|
||||
return nil, repositoryFailure(usecase.ErrRepositoryInvariant)
|
||||
}
|
||||
|
||||
rows, err := tx.QueryContext(
|
||||
|
||||
Reference in New Issue
Block a user