From adda3122f8fa125adac92d7f5b4d7ff3fae6ca56 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 28 Aug 2025 11:18:57 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(response):=20Restrukturisasi?= =?UTF-8?q?=20format=20response=20untuk=20validasi=20error=20dan=20respons?= =?UTF-8?q?e=20sukses?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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. --- app/Enums/ResponseCode.php | 26 ++++++++++++--------- app/Http/Requests/BalanceSummaryRequest.php | 9 ++++--- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/app/Enums/ResponseCode.php b/app/Enums/ResponseCode.php index 1d8393c..2531b43 100644 --- a/app/Enums/ResponseCode.php +++ b/app/Enums/ResponseCode.php @@ -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; } } diff --git a/app/Http/Requests/BalanceSummaryRequest.php b/app/Http/Requests/BalanceSummaryRequest.php index aacf2f2..d1629a8 100644 --- a/app/Http/Requests/BalanceSummaryRequest.php +++ b/app/Http/Requests/BalanceSummaryRequest.php @@ -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() ]); } -} \ No newline at end of file +}