'Success', self::INVALID_FIELD => 'Invalid Field', self::MISSING_FIELD => 'Missing Field', self::INVALID_FORMAT => 'Invalid Format', self::DATA_NOT_FOUND => 'Data Not Found', self::DUPLICATE_REQUEST => 'Duplicate Request', self::ACCOUNT_ALREADY_EXISTS => 'Account Already Exists', self::ACCOUNT_NOT_FOUND => 'Account Not Found', self::INVALID_TOKEN => 'Invalid Token', self::UNAUTHORIZED => 'Unauthorized', self::SYSTEM_MALFUNCTION => 'System Malfunction', self::TIMEOUT => 'Timeout', self::SERVICE_UNAVAILABLE => 'Service Unavailable', self::GENERAL_ERROR => 'General Error', }; } /** * Mendapatkan deskripsi response berdasarkan kode * * @return string */ public function getDescription(): string { return match($this) { self::SUCCESS => 'Permintaan berhasil', self::INVALID_FIELD => 'Field tertentu tidak sesuai aturan', self::MISSING_FIELD => 'Field wajib tidak dikirim', self::INVALID_FORMAT => 'Format salah', self::DATA_NOT_FOUND => 'Data yang diminta tidak ditemukan', self::DUPLICATE_REQUEST => 'Request ID sama, sudah pernah diproses', self::ACCOUNT_ALREADY_EXISTS => 'Nomor rekening / username / email sudah terdaftar', self::ACCOUNT_NOT_FOUND => 'Nomor rekening / akun tidak ditemukan', self::INVALID_TOKEN => 'Token tidak valid', self::UNAUTHORIZED => 'Tidak punya akses', self::SYSTEM_MALFUNCTION => 'Gangguan teknis di server', self::TIMEOUT => 'Request timeout', self::SERVICE_UNAVAILABLE => 'Layanan tidak tersedia', self::GENERAL_ERROR => 'Kesalahan umum', }; } /** * Mendapatkan HTTP status code berdasarkan response code * * @return int */ public function getHttpStatus(): int { return match($this) { self::SUCCESS => 200, self::INVALID_FIELD, self::MISSING_FIELD, self::INVALID_FORMAT => 400, self::DATA_NOT_FOUND, self::ACCOUNT_NOT_FOUND => 404, self::DUPLICATE_REQUEST, self::ACCOUNT_ALREADY_EXISTS => 409, self::INVALID_TOKEN, self::UNAUTHORIZED => 401, self::SYSTEM_MALFUNCTION, self::GENERAL_ERROR => 500, self::TIMEOUT => 408, self::SERVICE_UNAVAILABLE => 503, }; } /** * Membuat response array standar * * @param mixed $data * @param string|null $message * @return array */ public function toResponse($data = null, ?string $message = null): array { $response = [ 'status' => $this->value == '00' ? true : false, 'response_code' => $this->value, 'response_message' => $this->getMessage() . ($message ? ' | ' . $message : ''), ]; 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; } }