feat(response): Restrukturisasi format response untuk validasi error dan response sukses

- Menambahkan logika baru di `ResponseCode` untuk memisahkan struktur response sukses dan error.
- Field `errors` sekarang berada di root level untuk response validasi error.
- Meta response error lebih ringkas, hanya menyertakan `generated_at` dan `request_id`.
- Pesan error menampilkan seluruh daftar error, bukan hanya error pertama.
- Konsistensi format response memudahkan integrasi dengan frontend.
- Field `account_number` dan `period` dihapus dari meta pada response error.
- Memberikan request_id otomatis pada setiap response untuk keperluan tracking.
- Semua endpoint yang menggunakan ResponseCode enum otomatis mengikuti format baru.
This commit is contained in:
Daeng Deni Mardaeni
2025-08-28 11:18:57 +07:00
parent e53b522f77
commit adda3122f8
2 changed files with 19 additions and 16 deletions

View File

@@ -118,20 +118,24 @@
*/
public function toResponse($data = null, ?string $message = null): array
{
return [
$response = [
'status' => $this->value == '00' ? true : false,
'response_code' => $this->value,
'response_message' => $message ?? $this->getMessage(),
'response_description' => $this->getDescription(),
'data' => $data,
'meta' => [
'account_number' => $data['account_number'] ?? null,
'period' => [
'start_date' => $data['period']['start_date'] ?? null,
'end_date' => $data['period']['end_date'] ?? null,
],
'generated_at' => now()->toDateTimeString(),
'request_id' => request()->header('X-Request-ID', uniqid('req_'))
],
];
if (isset($data['errors'])) {
$response['errors'] = $data['errors'];
} else {
$response['data'] = $data;
}
$response['meta'] = [
'generated_at' => now()->toDateTimeString(),
'request_id' => request()->header('X-Request-ID', uniqid('req_'))
];
return $response;
}
}

View File

@@ -81,13 +81,12 @@ class BalanceSummaryRequest extends FormRequest
protected function failedValidation($validator)
{
$errors = $validator->errors();
$firstError = $errors->first();
throw new \Illuminate\Http\Exceptions\HttpResponseException(
response()->json(
\Modules\Webstatement\Enums\ResponseCode::INVALID_FIELD->toResponse(
null,
$firstError
['errors' => $errors->all()],
'Field tertentu tidak sesuai aturan'
),
\Modules\Webstatement\Enums\ResponseCode::INVALID_FIELD->getHttpStatus()
)
@@ -107,4 +106,4 @@ class BalanceSummaryRequest extends FormRequest
'user_agent' => $this->userAgent()
]);
}
}
}