uuid = Str::uuid('al'); }); } /** * Log an API request * * @param ApiKey|null $apiKey * @param string $action * @param array|string $requestBody * @param array|string $responseBody * @param int $statusCode * @param string|null $idempotencyKey */ public static function log($apiKey, $action, $requestBody, $responseBody, $statusCode, $idempotencyKey = null) { $log = new static(); $log->restaurant_id = $apiKey ? $apiKey->restaurant_id : null; $log->api_key_id = $apiKey ? $apiKey->id : null; $log->action = $action; $log->status_code = $statusCode; $log->request_body = is_array($requestBody) ? json_encode($requestBody) : $requestBody; $log->response_body = is_array($responseBody) ? json_encode($responseBody) : $responseBody; $log->ip_address = self::getClientIp(); $log->idempotency_key = $idempotencyKey; $log->save(); return $log; } protected static function getClientIp() { $headers = ['HTTP_X_FORWARDED_FOR', 'HTTP_X_REAL_IP', 'REMOTE_ADDR']; foreach ($headers as $header) { if (!empty($_SERVER[$header])) { $ip = explode(',', $_SERVER[$header]); return trim($ip[0]); } } return '0.0.0.0'; } }