Return insufficient_wallet when Transfer billing fails for zero balance.
Deploy Ladill Transfer / deploy (push) Successful in 29s
Deploy Ladill Transfer / deploy (push) Successful in 29s
Expose a stable error_code on chunked upload finalize so webmail can prompt wallet top-up instead of a generic upload failure. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
|
|||||||
use App\Services\Identity\MailboxUserResolver;
|
use App\Services\Identity\MailboxUserResolver;
|
||||||
use App\Services\Transfer\TransferService;
|
use App\Services\Transfer\TransferService;
|
||||||
use App\Services\Upload\ChunkedUploadService;
|
use App\Services\Upload\ChunkedUploadService;
|
||||||
|
use App\Support\TransferWalletErrors;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
@@ -128,7 +129,12 @@ class ChunkedUploadController extends Controller
|
|||||||
'retention_days' => $retentionDays,
|
'retention_days' => $retentionDays,
|
||||||
], [$uploadedFile]);
|
], [$uploadedFile]);
|
||||||
} catch (RuntimeException $e) {
|
} catch (RuntimeException $e) {
|
||||||
return response()->json(['message' => $e->getMessage()], 422);
|
$payload = ['message' => $e->getMessage()];
|
||||||
|
if (TransferWalletErrors::isInsufficientBalance($e)) {
|
||||||
|
$payload['error_code'] = TransferWalletErrors::CODE_INSUFFICIENT_WALLET;
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json($payload, 422);
|
||||||
} finally {
|
} finally {
|
||||||
$this->uploads->cleanup($validated['upload_id']);
|
$this->uploads->cleanup($validated['upload_id']);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Support;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
class TransferWalletErrors
|
||||||
|
{
|
||||||
|
public const CODE_INSUFFICIENT_WALLET = 'insufficient_wallet';
|
||||||
|
|
||||||
|
public static function isInsufficientBalance(RuntimeException $e): bool
|
||||||
|
{
|
||||||
|
$message = strtolower($e->getMessage());
|
||||||
|
|
||||||
|
return str_contains($message, 'insufficient wallet')
|
||||||
|
|| str_contains($message, 'top up');
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user