diff --git a/backend/database.js b/backend/database.js index e9ada3c..65ab04a 100644 --- a/backend/database.js +++ b/backend/database.js @@ -2119,7 +2119,6 @@ const DownloadTrafficReservationDB = { return db.prepare(` UPDATE user_download_traffic_reservations SET status = 'expired', - remaining_bytes = 0, finalized_at = datetime('now', 'localtime'), updated_at = datetime('now', 'localtime') WHERE status = 'pending' @@ -2135,12 +2134,15 @@ const DownloadTrafficReservationDB = { } const pendingRows = db.prepare(` - SELECT id, remaining_bytes + SELECT id, remaining_bytes, status FROM user_download_traffic_reservations WHERE user_id = ? - AND status = 'pending' + AND status IN ('pending', 'expired') AND remaining_bytes > 0 - ORDER BY created_at ASC, id ASC + ORDER BY + CASE WHEN status = 'pending' THEN 0 ELSE 1 END, + created_at ASC, + id ASC `).all(uid); let consumed = 0; @@ -2154,7 +2156,7 @@ const DownloadTrafficReservationDB = { const useBytes = Math.min(remaining, rowRemaining); const nextRemaining = rowRemaining - useBytes; - const nextStatus = nextRemaining <= 0 ? 'confirmed' : 'pending'; + const nextStatus = nextRemaining <= 0 ? 'confirmed' : row.status; db.prepare(` UPDATE user_download_traffic_reservations @@ -2326,7 +2328,10 @@ const DownloadTrafficReservationDB = { : 0; return db.prepare(` DELETE FROM user_download_traffic_reservations - WHERE status IN ('confirmed', 'expired', 'cancelled') + WHERE ( + status IN ('confirmed', 'cancelled') + OR (status = 'expired' AND COALESCE(remaining_bytes, 0) <= 0) + ) AND updated_at < datetime('now', 'localtime', '-' || ? || ' days') `).run(days); }