diff --git a/app/Console/Commands/GrpcServeCommand.php b/app/Console/Commands/GrpcServeCommand.php index 31c1b04..dcf4076 100644 --- a/app/Console/Commands/GrpcServeCommand.php +++ b/app/Console/Commands/GrpcServeCommand.php @@ -23,7 +23,7 @@ public function handle(): int $server->addHttp2Port("{$host}:{$port}"); // Register the User service - $server->handle(app(\App\Grpc\Services\UserServer::class)); + $server->handle(app(\App\Grpc\Services\UserGrpcService::class)); $this->info('gRPC User Service started successfully'); $this->info('Listening for requests...'); diff --git a/app/Grpc/BaseResponse.php b/app/Grpc/BaseResponse.php deleted file mode 100644 index 668c300..0000000 --- a/app/Grpc/BaseResponse.php +++ /dev/null @@ -1,29 +0,0 @@ - $this->code, - 'message' => $this->message, - 'data' => $this->data, - ]; - } - - protected function buildUserResponse($response, bool $success = true, string $message = '') - { - $response->setSuccess($success); - $response->setMessage($message); - return $response; - } -} diff --git a/app/Grpc/Controllers/AuthController.php b/app/Grpc/Controllers/AuthController.php new file mode 100644 index 0000000..9455781 --- /dev/null +++ b/app/Grpc/Controllers/AuthController.php @@ -0,0 +1,189 @@ +getRequestData($request); + $rules = new UserCreateRequest()->rules(); + $validator = Validator::make($userData, $rules); + if ($validator->fails()) { + return $this->createErrorResponse( + $response, + Response::HTTP_UNPROCESSABLE_ENTITY, + STATUS_INVALID_ARGUMENT, + $validator->errors(), + errorMsg: ['message' => 'Validation errors'] + ); + } + + // Pack response + $responseData = new Any(); + try { + $user = $this->userService->create($userData); + $userResource = new UserResource($user); + $responseData->setValue(json_encode([ + 'data' => $userResource + ])); + $response->setSuccess(true); + $response->setStatusCode(201); + $response->setData($responseData); + } catch (Exception $e) { + Log::error('User creation error', [ + 'error' => $e->getMessage(), + 'trace' => $e->getTrace() + ]); + throw $e; // Re-throw to be caught by the outer try-catch + } + + + return $response; + } + + public function login(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse + { + $data = $this->getRequestData($in); + if (empty($data)) { + Log::error('Login request data is empty'); + return $this->createErrorResponse( + $response, + Response::HTTP_BAD_REQUEST, + STATUS_INVALID_ARGUMENT, + 'Request data is empty' + ); + } + $rules = new UserReadRequest()->rules(); + $validator = Validator::make($data, $rules); + if ($validator->fails()) { + Log::error('User login validation error', [ + 'errors' => $validator->errors() + ]); + self::getContext()->setStatus([ + 'code' => STATUS_INVALID_ARGUMENT, + 'details' => $validator->errors() + ]); + $response->setStatusCode(Response::HTTP_BAD_REQUEST); + $response->setError(new ErrorInfo([ + 'message' => $validator->errors() + ])); + $response->setSuccess(false); + return $response; +// throw new Exception($validator->errors(), STATUS_INVALID_ARGUMENT); + } + + $user = $this->userService->login($data); + + if (!$user) { + self::getContext()->setStatus([ + 'code' => STATUS_UNAUTHENTICATED, + 'details' => 'Invalid credentials' + ]); + $response->setError(new ErrorInfo([ + 'message' => 'Invalid credentials' + ])); + $response->setStatusCode(Response::HTTP_UNAUTHORIZED); + $response->setSuccess(false); + return $response; +// throw new Exception ('Invalid credentials', STATUS_UNAUTHENTICATED); + } + + // Pack user data into Any + $userResource = new UserResource($user); + $anyData = new Any(); + $anyData->setValue(json_encode([ + 'message' => 'Login successful', + 'data' => $userResource + ])); + + $response->setSuccess(true); + $response->setStatusCode(200); + $response->setData($anyData); + + return $response; + } + + public function logout(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse + { + try { + $this->authMiddleware->revokeGrpcToken(BaseGrpcService::getContext()->clientMetadata()); + return $this->createResponse( + [], + $response, + Response::HTTP_NO_CONTENT, + ); + } catch (Exception $e) { + Log::error('Logout error', [ + 'error' => $e->getMessage(), + 'trace' => $e->getTrace() + ]); + return $this->createErrorResponse($response, Response::HTTP_UNAUTHORIZED, STATUS_UNAUTHENTICATED, $isLoggedOut['error'] ?? 'Unauthenticated'); + } + } + + + public function validateToken(FlexibleRequest $request, FlexibleResponse $response): FlexibleResponse + { + try { + $user = auth()->user(); + $user->withAccessToken(app(GrpcAuthMiddleware::class)->getToken(BaseGrpcService::getContext()->clientMetadata())); + + $user = $this->userService->validateToken($user); + if (is_null($user['data'])) { + return $this->createErrorResponse( + $response, + Response::HTTP_UNAUTHORIZED, + STATUS_INVALID_ARGUMENT, + $user['message'], + ); + } + return $this->createResponse([ + 'message' => $user['message'], + 'data' => $user['data'] + ], + $response + ); + } catch (Exception $e) { + Log::error('Token validation error', [ + 'error' => $e->getMessage(), + 'trace' => $e->getTrace() + ]); + + return $this->createErrorResponse( + $response, + Response::HTTP_UNAUTHORIZED, + STATUS_INVALID_ARGUMENT, + 'Token validation failed: ' . $e->getMessage() + ); + } + } + +} diff --git a/app/Grpc/Controllers/BaseGrpcService.php b/app/Grpc/Controllers/BaseGrpcService.php new file mode 100644 index 0000000..79661fe --- /dev/null +++ b/app/Grpc/Controllers/BaseGrpcService.php @@ -0,0 +1,75 @@ +getPayload()->getValue(); + return json_decode($jsonData, true); + } + + + /** + * @param array $data + * @param FlexibleResponse $response + */ + protected function createResponse(array $data, FlexibleResponse $response, $code = 200): FlexibleResponse + { + $responseData = new Any(); + $responseData->setValue(json_encode($data)); + $response->setData($responseData); + $response->setSuccess(true); + $response->setStatusCode($code); + return $response; + } + + /** + * Create error response + */ + public function createErrorResponse(FlexibleResponse $response, int $statusCode, $code, string $message, ?array $errorMsg = null): FlexibleResponse + { + BaseGrpcService::getContext()->setStatus([ + 'code' => $code, + 'details' => $message + ]); + $error = new ErrorInfo(); + $error->setCode($code); + $error->setMessage($message); + + if (!is_null($errorMsg)) { + $any = new Any(); + $any->setValue(json_encode($errorMsg)); + $response->setData($any); + } + + $response->setSuccess(false); + $response->setStatusCode($statusCode); + $response->setError($error); + + return $response; + } +} diff --git a/app/Grpc/Controllers/CartController.php b/app/Grpc/Controllers/CartController.php new file mode 100644 index 0000000..5534e9a --- /dev/null +++ b/app/Grpc/Controllers/CartController.php @@ -0,0 +1,169 @@ +getRequestData($in); + $rules = [ + 'item_id' => 'required|integer', + 'item_type' => 'required|string|in:products,offers', + 'quantity' => 'nullable|integer|min:1', + ]; + $validator = Validator::make($data, $rules); + if ($validator->fails()) { + Log::error('Add to cart validation error', [ + 'errors' => $validator->errors() + ]); + $this->createErrorResponse( + $response, + Response::HTTP_BAD_REQUEST, + STATUS_INVALID_ARGUMENT, + $validator->errors()->first() + ); + return $response; + } + request()->headers->set('Authorization', data_get(BaseGrpcService::getContext()->clientMetadata(), 'authorization') ?? ''); + $res = $this->shoppingCartGatewayService->add( + auth()->id(), + data_get($data, 'item_id'), + data_get($data, 'item_type'), + (int)data_get($data, 'quantity', 1) + ); + if (!$res) { + Log::error('Add to cart failed', [ + 'user_id' => auth()->id(), + 'item_id' => data_get($data, 'item_id'), + 'item_type' => data_get($data, 'item_type'), + ]); + $this->createErrorResponse( + $response, + Response::HTTP_NOT_FOUND, + STATUS_INVALID_ARGUMENT, + 'Item not found or could not be added to cart' + ); + return $response; + } + \Log::info('Item added to cart', [ + 'user_id' => auth()->id(), + 'item_id' => data_get($data, 'item_id'), + 'item_type' => data_get($data, 'item_type'), + 'quantity' => data_get($data, 'quantity', 1), + ]); + $message = ['message' => 'Item added to cart successfully']; + return $this->createResponse($message, $response); + } + + /** + * @throws BindingResolutionException + * @throws ConnectionException + */ + public function getCart(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse + { + $cart = $this->shoppingCartGatewayService->getCart(auth()->id()); + if (!$cart) { + Log::error('Get cart failed', [ + 'user_id' => auth()->id(), + ]); + return $this->createErrorResponse( + $response, + Response::HTTP_NOT_FOUND, + STATUS_INVALID_ARGUMENT, + 'Cart not found' + ); + } + + return $this->createResponse([ + 'message' => 'Cart retrieved successfully', + 'data' => $cart + ], + $response + ); + } + + public function removeFromCart(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse + { + $data = $this->getRequestData($in); + $rules = [ + 'item_id' => 'required|integer', + 'item_type' => 'required|string|in:products,offers', + ]; + $validator = Validator::make($data, $rules); + if ($validator->fails()) { + Log::error('Remove from cart validation error', [ + 'errors' => $validator->errors() + ]); + return $this->createErrorResponse( + $response, + Response::HTTP_BAD_REQUEST, + STATUS_INVALID_ARGUMENT, + $validator->errors()->first() + ); + } + try { + $this->cartCacheService->remove( + auth()->id(), + data_get($data, 'item_type'), + data_get($data, 'item_id'), + ); + return $this->createResponse(['message' => 'Item removed from cart successfully'], $response); + } catch (\Exception $e) { + Log::error('Remove from cart cache error', [ + 'user_id' => auth()->id(), + 'item_id' => data_get($data, 'item_id'), + 'item_type' => data_get($data, 'item_type'), + 'error' => $e->getMessage() + ]); + return $this->createErrorResponse( + $response, + Response::HTTP_NOT_FOUND, + STATUS_INVALID_ARGUMENT, + 'Item not found in cart' + ); + } + } + + public function clearCart(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse + { + try { + $this->cartCacheService->clear(auth()->id()); + return $this->createResponse(['message' => 'Cart cleared successfully'], $response); + } catch (\Exception $e) { + Log::error('Clear cart cache error', [ + 'user_id' => auth()->id(), + 'error' => $e->getMessage() + ]); + return $this->createErrorResponse( + $response, + Response::HTTP_INTERNAL_SERVER_ERROR, + STATUS_INVALID_ARGUMENT, + 'Failed to clear cart' + ); + } + } +} diff --git a/app/Grpc/Controllers/UserController.php b/app/Grpc/Controllers/UserController.php new file mode 100644 index 0000000..2f06186 --- /dev/null +++ b/app/Grpc/Controllers/UserController.php @@ -0,0 +1,157 @@ +getRequestData($request); + $validator = Validator::make($data, [ + 'id' => 'required|integer|min:1' + ]); + $validator->validate(); + if ($validator->fails()) { + $this->createErrorResponse( + $response, + Response::HTTP_BAD_REQUEST, + STATUS_INVALID_ARGUMENT, + $validator->errors() + ); + return $response; +// throw new Exception($validator->errors(), STATUS_INVALID_ARGUMENT); + } + $user = $this->userService->show($data['id']); + $user = $user['data']; + if (!$user) { + $this->createErrorResponse( + $response, + Response::HTTP_NOT_FOUND, + STATUS_NOT_FOUND, + 'User not found: ' . ($data['id'] ?? 'unknown') + ); + return $response; +// throw new Exception($message, STATUS_NOT_FOUND); + } + + $responseData = new Any(); + $resource = new UserResource($user); + $responseData->setValue(json_encode([ + 'data' => $resource + ])); + + $response->setSuccess(true); + $response->setStatusCode(200); + $response->setData($responseData); + + + return $response; + } + + /** + * List users with pagination + * @throws Exception + */ + public function listUsers(FlexibleRequest $request, FlexibleResponse $response): FlexibleResponse + { + try { + $users = $this->userService->index(); + $users = data_get($users, 'data'); + $responseData = new Any(); + $resourceCollection = UserResource::collection($users); + $responseData->setValue(json_encode([ + 'data' => $resourceCollection, +// 'pagination' => [ +// 'current_page' => $users->currentPage(), +// 'total_pages' => $users->lastPage(), +// 'total_items' => $users->total(), +// 'per_page' => $users->perPage() +// ] + ])); + + $response->setSuccess(true); + $response->setStatusCode(200); + \Log::info('User listing successful', [ + 'total_users' => count($users), + 'users' => $users + ]); + $response->setData($responseData); + } catch (Exception $e) { + Log::error('User listing error', [ + 'error' => $e->getMessage(), + 'trace' => $e->getTrace() + ]); + return $this->createErrorResponse($response, Response::HTTP_UNAUTHORIZED, STATUS_UNAUTHENTICATED, 'Failed to list users: ' . $e->getMessage()); +// throw new Exception('Failed to user-service: ' . $e->getMessage(), STATUS_INTERNAL); + } + return $response; + } + + /** + * @throws BindingResolutionException + * @throws ConnectionException + */ + public function getUserProfile(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse + { + $jsonData = $in->getPayload()->getValue(); + $data = json_decode($jsonData, true); + $this->authMiddleware->authenticateGrpcRequest(BaseGrpcService::getContext()->clientMetadata()); + $user = $this->userService->userProfile($data); + \Log::info('GetUserProfile called', [ + 'data' => $data, + 'user_id' => $data['id'] ?? null, + 'user' => $user + ]); + + if (!$user) { + $this->createErrorResponse( + $response, + Response::HTTP_NOT_FOUND, + STATUS_NOT_FOUND, + 'User not found' + ); + return $response; + } + + // Pack user data into Any + $anyData = new Any(); + $anyData->setValue(json_encode([ + 'data' => $user + ])); + + $response->setSuccess(true); + $response->setStatusCode(200); + $response->setData($anyData); + + return $response; + } + + +} diff --git a/app/Grpc/GPBMetadata/User/UserService.php b/app/Grpc/GPBMetadata/User/UserService.php deleted file mode 100644 index b54220e..0000000 --- a/app/Grpc/GPBMetadata/User/UserService.php +++ /dev/null @@ -1,24 +0,0 @@ -internalAddGeneratedFile(hex2bin( - "0ab0130a12757365725f736572766963652e70726f746f120475736572221c0a0e4765745573657252657175657374120a0a02696418012001280322500a114372656174655573657252657175657374120c0a046e616d65180120012809120d0a05656d61696c18022001280912100a0870617373776f7264180320012809120c0a04726f6c65180420012809224e0a115570646174655573657252657175657374120a0a026964180120012803120c0a046e616d65180220012809120d0a05656d61696c18032001280912100a0870617373776f7264180420012809221f0a1144656c6574655573657252657175657374120a0a02696418012001280322420a104c697374557365727352657175657374120c0a047061676518012001280512100a087065725f70616765180220012805120e0a0673656172636818032001280922360a1341757468656e74696361746552657175657374120d0a05656d61696c18012001280912100a0870617373776f726418022001280922240a125573657250726f66696c6552657175657374120e0a066669656c6473180220032809220f0a0d4c6f676f75745265717565737422250a1456616c6964617465546f6b656e52657175657374120d0a05746f6b656e18012001280922150a1352656672657368546f6b656e5265717565737422470a154368616e676550617373776f72645265717565737412180a1063757272656e745f70617373776f726418012001280912140a0c6e65775f70617373776f7264180220012809228f010a0455736572120a0a026964180120012803120c0a046e616d65180220012809120d0a05656d61696c180320012809120c0a04726f6c6518042001280912120a0a70686f746f5f7061746818052001280912140a0c6163636573735f746f6b656e18062001280912120a0a637265617465645f617418072001280912120a0a757064617465645f617418082001280922450a08436172744974656d120a0a026964180120012803120c0a047479706518022001280912100a087175616e74697479180320012805120d0a057072696365180420012801224a0a0c55736572526573706f6e736512180a047573657218012001280b320a2e757365722e55736572120f0a0773756363657373180220012808120f0a076d65737361676518032001280922360a1244656c65746555736572526573706f6e7365120f0a0773756363657373180120012808120f0a076d6573736167651802200128092288010a114c6973745573657273526573706f6e736512190a05757365727318012003280b320a2e757365722e55736572120d0a05746f74616c18022001280512140a0c63757272656e745f7061676518032001280512110a096c6173745f70616765180420012805120f0a0773756363657373180520012808120f0a076d6573736167651806200128092289010a1441757468656e746963617465526573706f6e736512180a047573657218012001280b320a2e757365722e55736572120d0a05746f6b656e18022001280912120a0a746f6b656e5f7479706518032001280912120a0a657870697265735f6174180420012809120f0a0773756363657373180520012808120f0a076d65737361676518062001280922a6010a135573657250726f66696c65526573706f6e7365120a0a026964180120012803120c0a046e616d65180220012809120d0a05656d61696c18032001280912120a0a70686f746f5f70617468180420012809120c0a04726f6c6518052001280912220a0a636172745f6974656d7318062003280b320e2e757365722e436172744974656d120f0a0773756363657373180720012808120f0a076d65737361676518082001280922320a0e4c6f676f7574526573706f6e7365120f0a0773756363657373180120012808120f0a076d65737361676518022001280922620a1556616c6964617465546f6b656e526573706f6e736512180a047573657218012001280b320a2e757365722e55736572120d0a0576616c6964180220012808120f0a0773756363657373180320012808120f0a076d657373616765180420012809226f0a1452656672657368546f6b656e526573706f6e7365120d0a05746f6b656e18012001280912120a0a746f6b656e5f7479706518022001280912120a0a657870697265735f6174180320012809120f0a0773756363657373180420012808120f0a076d657373616765180520012809223a0a164368616e676550617373776f7264526573706f6e7365120f0a0773756363657373180120012808120f0a076d65737361676518022001280932e0050a0b557365725365727669636512330a074765745573657212142e757365722e47657455736572526571756573741a122e757365722e55736572526573706f6e736512390a0a4372656174655573657212172e757365722e43726561746555736572526571756573741a122e757365722e55736572526573706f6e736512390a0a5570646174655573657212172e757365722e55706461746555736572526571756573741a122e757365722e55736572526573706f6e7365123f0a0a44656c6574655573657212172e757365722e44656c65746555736572526571756573741a182e757365722e44656c65746555736572526573706f6e7365123c0a094c697374557365727312162e757365722e4c6973745573657273526571756573741a172e757365722e4c6973745573657273526573706f6e736512490a1041757468656e7469636174655573657212192e757365722e41757468656e746963617465526571756573741a1a2e757365722e41757468656e746963617465526573706f6e736512450a0e4765745573657250726f66696c6512182e757365722e5573657250726f66696c65526571756573741a192e757365722e5573657250726f66696c65526573706f6e736512370a0a4c6f676f75745573657212132e757365722e4c6f676f7574526571756573741a142e757365722e4c6f676f7574526573706f6e736512480a0d56616c6964617465546f6b656e121a2e757365722e56616c6964617465546f6b656e526571756573741a1b2e757365722e56616c6964617465546f6b656e526573706f6e736512450a0c52656672657368546f6b656e12192e757365722e52656672657368546f6b656e526571756573741a1a2e757365722e52656672657368546f6b656e526573706f6e7365124b0a0e4368616e676550617373776f7264121b2e757365722e4368616e676550617373776f7264526571756573741a1c2e757365722e4368616e676550617373776f7264526573706f6e7365422cca020d4170705c477270635c55736572e202194170705c477270635c4750424d657461646174615c55736572620670726f746f33" - ), true); - - static::$is_initialized = true; - } -} - diff --git a/app/Grpc/GrpcRoute.php b/app/Grpc/GrpcRoute.php new file mode 100644 index 0000000..55d6f70 --- /dev/null +++ b/app/Grpc/GrpcRoute.php @@ -0,0 +1,11 @@ + $controller, + 'action' => $action + ]; + } + + public static function resolve(string $service, string $method): ?array + { + return self::$routes[$service][$method] ?? null; + } + + public static function getAllRoutes(): array + { + return self::$routes; + } + + public static function getAllServices(): array + { + return array_keys(self::$routes); + } +} diff --git a/app/Grpc/GrpcServiceRouter.php b/app/Grpc/GrpcServiceRouter.php new file mode 100644 index 0000000..3de8200 --- /dev/null +++ b/app/Grpc/GrpcServiceRouter.php @@ -0,0 +1,19 @@ +serviceName = $serviceName; + } + + public function method(string $methodName, string $controller, string $action): self + { + GrpcRouteRegistry::register($this->serviceName, $methodName, $controller, $action); + return $this; + } +} diff --git a/app/Grpc/HealthCheckRequest.php b/app/Grpc/HealthCheckRequest.php deleted file mode 100644 index 262db2c..0000000 --- a/app/Grpc/HealthCheckRequest.php +++ /dev/null @@ -1,58 +0,0 @@ -gateway.HealthCheckRequest - */ -class HealthCheckRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field string service = 1; - */ - protected $service = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $service - * } - */ - public function __construct($data = NULL) { - \App\Grpc\Gateway\Apigw::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field string service = 1; - * @return string - */ - public function getService() - { - return $this->service; - } - - /** - * Generated from protobuf field string service = 1; - * @param string $var - * @return $this - */ - public function setService($var) - { - GPBUtil::checkString($var, True); - $this->service = $var; - - return $this; - } - -} - diff --git a/app/Grpc/HealthCheckResponse.php b/app/Grpc/HealthCheckResponse.php deleted file mode 100644 index 74d33a8..0000000 --- a/app/Grpc/HealthCheckResponse.php +++ /dev/null @@ -1,58 +0,0 @@ -gateway.HealthCheckResponse - */ -class HealthCheckResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .gateway.HealthCheckResponse.ServingStatus status = 1; - */ - protected $status = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int $status - * } - */ - public function __construct($data = NULL) { - \App\Grpc\Gateway\Apigw::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .gateway.HealthCheckResponse.ServingStatus status = 1; - * @return int - */ - public function getStatus() - { - return $this->status; - } - - /** - * Generated from protobuf field .gateway.HealthCheckResponse.ServingStatus status = 1; - * @param int $var - * @return $this - */ - public function setStatus($var) - { - GPBUtil::checkEnum($var, \App\Grpc\HealthCheckResponse_ServingStatus::class); - $this->status = $var; - - return $this; - } - -} - diff --git a/app/Grpc/HealthCheckResponse/ServingStatus.php b/app/Grpc/HealthCheckResponse/ServingStatus.php deleted file mode 100644 index 1e1c32d..0000000 --- a/app/Grpc/HealthCheckResponse/ServingStatus.php +++ /dev/null @@ -1,56 +0,0 @@ -gateway.HealthCheckResponse.ServingStatus - */ -class ServingStatus -{ - /** - * Generated from protobuf enum UNKNOWN = 0; - */ - const UNKNOWN = 0; - /** - * Generated from protobuf enum SERVING = 1; - */ - const SERVING = 1; - /** - * Generated from protobuf enum NOT_SERVING = 2; - */ - const NOT_SERVING = 2; - - private static $valueToName = [ - self::UNKNOWN => 'UNKNOWN', - self::SERVING => 'SERVING', - self::NOT_SERVING => 'NOT_SERVING', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(ServingStatus::class, \App\Grpc\HealthCheckResponse_ServingStatus::class); - diff --git a/app/Grpc/HealthCheckResponse_ServingStatus.php b/app/Grpc/HealthCheckResponse_ServingStatus.php deleted file mode 100644 index 4e1274a..0000000 --- a/app/Grpc/HealthCheckResponse_ServingStatus.php +++ /dev/null @@ -1,16 +0,0 @@ -_simpleRequest('/gateway.HealthService/Check', - $argument, - ['\App\Grpc\HealthCheckResponse', 'decode'], - $metadata, $options); - } - -} diff --git a/app/Grpc/Middleware/GrpcAuthMiddleware.php b/app/Grpc/Middleware/GrpcAuthMiddleware.php index 036d756..ba43126 100644 --- a/app/Grpc/Middleware/GrpcAuthMiddleware.php +++ b/app/Grpc/Middleware/GrpcAuthMiddleware.php @@ -4,19 +4,21 @@ use App\Models\User; use Auth; +use Exception; use Laravel\Passport\Token; +use Log; class GrpcAuthMiddleware { /** - * @throws \Exception + * @throws Exception */ private function getTokenIdFromJWT($jwt) { $parts = explode('.', $jwt); if (count($parts) !== 3) { - throw new \Exception('Invalid JWT format'); + throw new Exception('Invalid JWT format'); } $payload = json_decode(base64_decode($parts[1]), true); @@ -43,7 +45,7 @@ public function getUserByAccessToken($tokenString) return $token->user; - } catch (\Exception $e) { + } catch (Exception $e) { return null; } } @@ -68,8 +70,8 @@ public function authenticateGrpcRequest($metadata): ?User return $user; - } catch (\Exception $e) { - \Log::error('gRPC Authentication error: ' . $e->getMessage()); + } catch (Exception $e) { + Log::error('gRPC Authentication error: ' . $e->getMessage()); return null; } } @@ -89,8 +91,8 @@ public function validateToken(string $token): array 'message' => 'Token is valid', 'data' => $user, ]; - } catch (\Exception $e) { - \Log::error('Token validation error: ' . $e->getMessage()); + } catch (Exception $e) { + Log::error('Token validation error: ' . $e->getMessage()); return [ 'message' => 'Token validation failed', 'data' => null, @@ -116,15 +118,25 @@ public function extractBearerToken($metadata): ?string } /** - * @throws \Exception + * @throws Exception */ public function revokeGrpcToken($clientMetadata): void { - $tokenString = $this->extractBearerToken($clientMetadata); - $tokenId = $this->getTokenIdFromJWT($tokenString); - $token = Token::find($tokenId); + $token = $this->getToken($clientMetadata); if ($token->revoked) - throw new \Exception('Token not found'); + throw new Exception('Token not found'); $token->revoke(); } + + /** + * @param $clientMetadata + * @return Token|Token[]|_IH_Token_C|null + * @throws Exception + */ + public function getToken($clientMetadata): _IH_Token_C|Token|array|null + { + $tokenString = $this->extractBearerToken($clientMetadata); + $tokenId = $this->getTokenIdFromJWT($tokenString); + return Token::find($tokenId); + } } diff --git a/app/Grpc/Services/BaseServer.php b/app/Grpc/Services/BaseServer.php index ad7ea4d..10c3ec0 100644 --- a/app/Grpc/Services/BaseServer.php +++ b/app/Grpc/Services/BaseServer.php @@ -81,39 +81,15 @@ public function HandleBytesRequest(BytesRequest $in): BytesResponse /** * Handle streaming (not implemented for this example) + * + * @todo Implement HandleStreamRequest functionality for bidirectional streaming. */ public function HandleStreamRequest(Iterator $in, ServerContext $context): Iterator { - foreach ($in as $request) { - yield $this->HandleRequest($request, $context); - } + throw new Exception('HandleStreamRequest is not implemented yet.'); } - /** - * Create error response - */ - public function createErrorResponse(FlexibleResponse $response, int $statusCode, $code, string $message, ?array $errorMsg = null): FlexibleResponse - { - UserServer::getContext()->setStatus([ - 'code' => $code, - 'details' => $message - ]); - $error = new ErrorInfo(); - $error->setCode($code); - $error->setMessage($message); - - if (!is_null($errorMsg)) { - $any = new Any(); - $any->setValue(json_encode($errorMsg)); - $response->setData($any); - } - - $response->setSuccess(false); - $response->setStatusCode($statusCode); - $response->setError($error); - return $response; - } /** * Create bytes error response @@ -162,19 +138,7 @@ private function processUserRequest(string $method, array $data): array } } - /** - * @param array $data - * @param FlexibleResponse $response - */ - protected function createResponse(array $data, FlexibleResponse $response, $code = 200): FlexibleResponse - { - $responseData = new Any(); - $responseData->setValue(json_encode($data)); - $response->setData($responseData); - $response->setSuccess(true); - $response->setStatusCode($code); - return $response; - } + /** * @param FlexibleRequest $in diff --git a/app/Grpc/Services/CartServer.php b/app/Grpc/Services/CartServer.php index 7ad1bd6..f104ecd 100644 --- a/app/Grpc/Services/CartServer.php +++ b/app/Grpc/Services/CartServer.php @@ -2,6 +2,7 @@ namespace App\Grpc\Services; +use App\Grpc\Controllers\BaseGrpcService; use App\Grpc\FlexibleRequest; use App\Grpc\FlexibleResponse; use App\Services\CartCacheService; @@ -36,153 +37,153 @@ function manageOperation(FlexibleRequest $in, FlexibleResponse $response): Flexi 'clearCart' => $this->clearCart($in, $response), }; } - - /** - * @throws \Exception - */ - private function addToCart(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse - { - $jsonData = $in->getPayload()->getValue(); - $data = json_decode($jsonData, true); - $rules = [ - 'item_id' => 'required|integer', - 'item_type' => 'required|string|in:products,offers', - 'quantity' => 'nullable|integer|min:1', - ]; - $validator = Validator::make($data, $rules); - if ($validator->fails()) { - Log::error('Add to cart validation error', [ - 'errors' => $validator->errors() - ]); - $this->createErrorResponse( - $response, - Response::HTTP_BAD_REQUEST, - STATUS_INVALID_ARGUMENT, - $validator->errors()->first() - ); - return $response; - } - request()->headers->set('Authorization', data_get(UserServer::getContext()->clientMetadata(), 'authorization') ?? ''); - $res = $this->shoppingCartGatewayService->add( - auth()->id(), - data_get($data, 'item_id'), - data_get($data, 'item_type'), - (int)data_get($data, 'quantity', 1) - ); - if (!$res) { - Log::error('Add to cart failed', [ - 'user_id' => auth()->id(), - 'item_id' => data_get($data, 'item_id'), - 'item_type' => data_get($data, 'item_type'), - ]); - $this->createErrorResponse( - $response, - Response::HTTP_NOT_FOUND, - STATUS_INVALID_ARGUMENT, - 'Item not found or could not be added to cart' - ); - return $response; - } - \Log::info('Item added to cart', [ - 'user_id' => auth()->id(), - 'item_id' => data_get($data, 'item_id'), - 'item_type' => data_get($data, 'item_type'), - 'quantity' => data_get($data, 'quantity', 1), - ]); - $message = ['message' => 'Item added to cart successfully']; - return $this->createResponse($message, $response); - } - - /** - * @throws BindingResolutionException - * @throws ConnectionException - */ - private function getCart(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse - { - $jsonData = $in->getPayload()->getValue(); - $data = json_decode($jsonData, true); - - $cart = $this->shoppingCartGatewayService->getCart(auth()->id()); - if (!$cart) { - Log::error('Get cart failed', [ - 'user_id' => auth()->id(), - ]); - return $this->createErrorResponse( - $response, - Response::HTTP_NOT_FOUND, - STATUS_INVALID_ARGUMENT, - 'Cart not found' - ); - } - - return $this->createResponse([ - 'message' => 'Cart retrieved successfully', - 'data' => $cart - ], - $response - ); - } - - private function removeFromCart(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse - { - $jsonData = $in->getPayload()->getValue(); - $data = json_decode($jsonData, true); - $rules = [ - 'item_id' => 'required|integer', - 'item_type' => 'required|string|in:products,offers', - ]; - $validator = Validator::make($data, $rules); - if ($validator->fails()) { - Log::error('Remove from cart validation error', [ - 'errors' => $validator->errors() - ]); - return $this->createErrorResponse( - $response, - Response::HTTP_BAD_REQUEST, - STATUS_INVALID_ARGUMENT, - $validator->errors()->first() - ); - } - try { - $this->cartCacheService->remove( - auth()->id(), - data_get($data, 'item_type'), - data_get($data, 'item_id'), - ); - return $this->createResponse(['message' => 'Item removed from cart successfully'], $response); - } catch (\Exception $e) { - Log::error('Remove from cart cache error', [ - 'user_id' => auth()->id(), - 'item_id' => data_get($data, 'item_id'), - 'item_type' => data_get($data, 'item_type'), - 'error' => $e->getMessage() - ]); - return $this->createErrorResponse( - $response, - Response::HTTP_NOT_FOUND, - STATUS_INVALID_ARGUMENT, - 'Item not found in cart' - ); - } - } - - private function clearCart(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse - { - try { - $this->cartCacheService->clear(auth()->id()); - return $this->createResponse(['message' => 'Cart cleared successfully'], $response); - } catch (\Exception $e) { - Log::error('Clear cart cache error', [ - 'user_id' => auth()->id(), - 'error' => $e->getMessage() - ]); - return $this->createErrorResponse( - $response, - Response::HTTP_INTERNAL_SERVER_ERROR, - STATUS_INVALID_ARGUMENT, - 'Failed to clear cart' - ); - } - } +// +// /** +// * @throws \Exception +// */ +// private function addToCart(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse +// { +// $jsonData = $in->getPayload()->getValue(); +// $data = json_decode($jsonData, true); +// $rules = [ +// 'item_id' => 'required|integer', +// 'item_type' => 'required|string|in:products,offers', +// 'quantity' => 'nullable|integer|min:1', +// ]; +// $validator = Validator::make($data, $rules); +// if ($validator->fails()) { +// Log::error('Add to cart validation error', [ +// 'errors' => $validator->errors() +// ]); +// $this->createErrorResponse( +// $response, +// Response::HTTP_BAD_REQUEST, +// STATUS_INVALID_ARGUMENT, +// $validator->errors()->first() +// ); +// return $response; +// } +// request()->headers->set('Authorization', data_get(BaseGrpcService::getContext()->clientMetadata(), 'authorization') ?? ''); +// $res = $this->shoppingCartGatewayService->add( +// auth()->id(), +// data_get($data, 'item_id'), +// data_get($data, 'item_type'), +// (int)data_get($data, 'quantity', 1) +// ); +// if (!$res) { +// Log::error('Add to cart failed', [ +// 'user_id' => auth()->id(), +// 'item_id' => data_get($data, 'item_id'), +// 'item_type' => data_get($data, 'item_type'), +// ]); +// $this->createErrorResponse( +// $response, +// Response::HTTP_NOT_FOUND, +// STATUS_INVALID_ARGUMENT, +// 'Item not found or could not be added to cart' +// ); +// return $response; +// } +// \Log::info('Item added to cart', [ +// 'user_id' => auth()->id(), +// 'item_id' => data_get($data, 'item_id'), +// 'item_type' => data_get($data, 'item_type'), +// 'quantity' => data_get($data, 'quantity', 1), +// ]); +// $message = ['message' => 'Item added to cart successfully']; +// return $this->createResponse($message, $response); +// } +// +// /** +// * @throws BindingResolutionException +// * @throws ConnectionException +// */ +// private function getCart(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse +// { +// $jsonData = $in->getPayload()->getValue(); +// $data = json_decode($jsonData, true); +// +// $cart = $this->shoppingCartGatewayService->getCart(auth()->id()); +// if (!$cart) { +// Log::error('Get cart failed', [ +// 'user_id' => auth()->id(), +// ]); +// return $this->createErrorResponse( +// $response, +// Response::HTTP_NOT_FOUND, +// STATUS_INVALID_ARGUMENT, +// 'Cart not found' +// ); +// } +// +// return $this->createResponse([ +// 'message' => 'Cart retrieved successfully', +// 'data' => $cart +// ], +// $response +// ); +// } +// +// private function removeFromCart(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse +// { +// $jsonData = $in->getPayload()->getValue(); +// $data = json_decode($jsonData, true); +// $rules = [ +// 'item_id' => 'required|integer', +// 'item_type' => 'required|string|in:products,offers', +// ]; +// $validator = Validator::make($data, $rules); +// if ($validator->fails()) { +// Log::error('Remove from cart validation error', [ +// 'errors' => $validator->errors() +// ]); +// return $this->createErrorResponse( +// $response, +// Response::HTTP_BAD_REQUEST, +// STATUS_INVALID_ARGUMENT, +// $validator->errors()->first() +// ); +// } +// try { +// $this->cartCacheService->remove( +// auth()->id(), +// data_get($data, 'item_type'), +// data_get($data, 'item_id'), +// ); +// return $this->createResponse(['message' => 'Item removed from cart successfully'], $response); +// } catch (\Exception $e) { +// Log::error('Remove from cart cache error', [ +// 'user_id' => auth()->id(), +// 'item_id' => data_get($data, 'item_id'), +// 'item_type' => data_get($data, 'item_type'), +// 'error' => $e->getMessage() +// ]); +// return $this->createErrorResponse( +// $response, +// Response::HTTP_NOT_FOUND, +// STATUS_INVALID_ARGUMENT, +// 'Item not found in cart' +// ); +// } +// } +// +// private function clearCart(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse +// { +// try { +// $this->cartCacheService->clear(auth()->id()); +// return $this->createResponse(['message' => 'Cart cleared successfully'], $response); +// } catch (\Exception $e) { +// Log::error('Clear cart cache error', [ +// 'user_id' => auth()->id(), +// 'error' => $e->getMessage() +// ]); +// return $this->createErrorResponse( +// $response, +// Response::HTTP_INTERNAL_SERVER_ERROR, +// STATUS_INVALID_ARGUMENT, +// 'Failed to clear cart' +// ); +// } +// } } diff --git a/app/Grpc/Services/GrpcService.php b/app/Grpc/Services/GrpcService.php new file mode 100644 index 0000000..58c47f9 --- /dev/null +++ b/app/Grpc/Services/GrpcService.php @@ -0,0 +1,55 @@ +setService($service); + $grpcRequest->setMethod($method); + $grpcRequest->setRequestId(uniqid()); + + // Pack request data as Any + $payload = new Any(); + $payload->setValue(json_encode($request->all())); + $grpcRequest->setPayload($payload); + + + // Call gRPC service + $grpcResponse = $this->gatewayService->HandleClientRequest($grpcRequest); + + // Convert back to HTTP response + if ($grpcResponse->getSuccess()) { + $data = json_decode($grpcResponse->getData()->getValue()) ?? $grpcResponse->getData()->getValue(); + return response()->json($data, $grpcResponse->getStatusCode()); + } else { + $error = $grpcResponse->getError()->getMessage(); + $data = $grpcResponse->getData() ? json_decode($grpcResponse->getData()->getValue()) : null; + if (data_get($data, 'message')) + $res['message'] = data_get($data, 'message'); + + $res['error'] = json_decode($error) ?? $error; + return response()->json($res, $grpcResponse->getStatusCode()); + } + } + + public function dispatchGrpcRequest(FlexibleRequest $request): FlexibleResponse + { + return $this->gatewayService->HandleClientRequest($request); + } +} diff --git a/app/Grpc/Services/UserGrpcService.php b/app/Grpc/Services/UserGrpcService.php new file mode 100644 index 0000000..9de9ef7 --- /dev/null +++ b/app/Grpc/Services/UserGrpcService.php @@ -0,0 +1,220 @@ +gw_service = config('services.microservices.gw_service_grpc'); + } + + /** + * Handle flexible protobuf requests + */ + public function HandleClientRequest(FlexibleRequest $in): FlexibleResponse + { + $response = new FlexibleResponse(); + $response->setRequestId($in->getRequestId()); + $response->setTimestamp($this->getCurrentTimestamp()); + + // try { + // to Get a gRPC client for the target service + $grpcClient = $this->getGrpcClient($in->getService()); + if (!$grpcClient) { + return $this->createErrorResponse($response, 404, 'SERVICE_NOT_FOUND', 'Service not found: ' . $in->getService()); + } + + // Forward the exact same FlexibleRequest to downstream service + // The downstream service implements the same flexible proto + $metadata = []; + if ($bearerToken = request()->bearerToken()) + $metadata['authorization'] = ['Bearer ' . $bearerToken]; + list($downstreamResponse, $status) = $grpcClient->HandleRequest($in, $metadata)->wait(); + if ($status->code === STATUS_OK) { + // Forward the response as-is + $response->setSuccess($downstreamResponse->getSuccess()); + $response->setStatusCode($downstreamResponse->getStatusCode()); + $response->setData($downstreamResponse->getData()); + + // Forward headers + foreach ($downstreamResponse->getHeaders() as $key => $value) { + $response->getHeaders()[$key] = $value; + } + + } else { + // dd($downstreamResponse->getError()); + if (is_null($downstreamResponse)) + return $this->createErrorResponse( + $response, + 500, + 'GRPC_ERROR', + 'Downstream service returned null response' + ); + return $this->createErrorResponse( + $response, + $downstreamResponse->getStatusCode(), + 'GRPC_ERROR', + $downstreamResponse->getError() ? $downstreamResponse->getError()->getMessage() : 'Unknown error', + data: $downstreamResponse->getData() + ); + } + + // } catch (Exception $e) { + + // Log::error('Gateway gRPC request failed', [ + // 'service' => $in->getService(), + // 'method' => $in->getMethod(), + // 'error' => $e->getMessage() + // ]); + + // return $this->createErrorResponse($response, 500, 'INTERNAL_ERROR', $e->getMessage()); + // } + + return $response; + } + + public function HandleRequest(FlexibleRequest $request, ServerContext $context): FlexibleResponse + { + try { + $this->authMiddleware->authenticateGrpcRequest($context->clientMetadata()); + BaseGrpcService::setContext($context); + // Extract service and method from the request + $serviceName = $request->getService(); + $methodName = $request->getMethod(); + + // Resolve the route + $route = GrpcRouteRegistry::resolve($serviceName, $methodName); + + if (!$route) { + throw new Exception("Route not found: {$serviceName}::{$methodName}"); + } + $response = new FlexibleResponse(); + $response->setRequestId($request->getRequestId()); + $response->setTimestamp($this->getCurrentTimestamp()); + + // Instantiate controller + $controllerClass = "App\\Grpc\\Controllers\\{$route['controller']}"; + $controller = app($controllerClass); + + // Call the action + return $controller->{$route['action']}($request, $response); + + } catch (Exception $e) { + Log::error("Failed to handle gRPC request", [$e->getMessage()]); + return new FlexibleResponse([ + 'status' => 'error', + 'code' => 500, + 'data' => json_encode(['message' => $e->getMessage()]) + ]); + } + } + + /** + * Get gRPC client for service + */ + private function getGrpcClient(string $service): ?GatewayServiceClient + { + try { + // Simplified options to avoid compatibility issues + $options = [ + 'credentials' => ChannelCredentials::createInsecure(), + 'timeout' => 30000000, // 30 seconds in microseconds + ]; + + $res = new GatewayServiceClient( + $this->gw_service, + $options + ); + + Log::info("Created gRPC client for service: {$service} at {$this->gw_service}"); + return $res; + } catch (Exception $e) { + Log::error("Failed to create gRPC client for service: {$service}", [ + 'address' => $this->gw_service, + 'error' => $e->getMessage() + ]); + return null; + } + } + + /** + * Create error response for FlexibleResponse + */ + private function createErrorResponse(FlexibleResponse $response, int $statusCode, string $code, string $message, ?Any $data = null): FlexibleResponse + { + $error = new ErrorInfo(); + $error->setCode($code); + $error->setMessage($message); + + $response->setData($data); + $response->setSuccess(false); + $response->setStatusCode($statusCode); + $response->setError($error); + + return $response; + } + + /** + * Create error response for BytesResponse + */ + private function createBytesErrorResponse(BytesResponse $response, int $statusCode, string $code, string $message): BytesResponse + { + $error = new ErrorInfo(); + $error->setCode($code); + $error->setMessage($message); + + $response->setSuccess(false); + $response->setStatusCode($statusCode); + $response->setError($error); + $response->setContentType('application/json'); + $response->setData(json_encode(['error' => $code, 'message' => $message])); + + return $response; + } + + /** + * Get current timestamp + */ + private function getCurrentTimestamp(): Timestamp + { + $timestamp = new Timestamp(); + $timestamp->fromDateTime(new DateTime()); + return $timestamp; + } + + public function getMethodDescriptors(): array + { + return [ + '/gateway.GatewayService/HandleRequest' => new MethodDescriptor( + $this, + 'HandleRequest', + FlexibleRequest::class, + MethodDescriptor::UNARY_CALL, + ), + ]; + } + +} diff --git a/app/Grpc/Services/UserServer.php b/app/Grpc/Services/UserServer.php index dd3d930..c8c44f7 100644 --- a/app/Grpc/Services/UserServer.php +++ b/app/Grpc/Services/UserServer.php @@ -76,8 +76,8 @@ function manageOperation(FlexibleRequest $in, FlexibleResponse $response): Flexi public function HandleRequest(FlexibleRequest $in, ServerContext $context): FlexibleResponse { - self::setContext($context); - $this->authMiddleware->authenticateGrpcRequest($context->clientMetadata()); +// self::setContext($context); +// $this->authMiddleware->authenticateGrpcRequest($context->clientMetadata()); $response = new FlexibleResponse(); $response->setRequestId($in->getRequestId()); $response->setTimestamp($this->getCurrentTimestamp()); @@ -144,157 +144,6 @@ private function createUser(FlexibleRequest $request, FlexibleResponse $response return $response; } - /** - * Get user by ID - * @throws Exception - */ - private function getUser(FlexibleRequest $request, FlexibleResponse $response): FlexibleResponse - { - $jsonData = $request->getPayload()->getValue(); - $data = json_decode($jsonData, true); - - $validator = Validator::make($data, [ - 'id' => 'required|integer|min:1' - ]); - $validator->validate(); - if ($validator->fails()) { - $this->createErrorResponse( - $response, - Response::HTTP_BAD_REQUEST, - STATUS_INVALID_ARGUMENT, - $validator->errors() - ); - return $response; -// throw new Exception($validator->errors(), STATUS_INVALID_ARGUMENT); - } - $user = $this->userService->show($data['id']); - $user = $user['data']; - if (!$user) { - $this->createErrorResponse( - $response, - Response::HTTP_NOT_FOUND, - STATUS_NOT_FOUND, - 'User not found: ' . ($data['id'] ?? 'unknown') - ); - return $response; -// throw new Exception($message, STATUS_NOT_FOUND); - } - - $responseData = new Any(); - $resource = new UserResource($user); - $responseData->setValue(json_encode([ - 'data' => $resource - ])); - - $response->setSuccess(true); - $response->setStatusCode(200); - $response->setData($responseData); - - - return $response; - } - - /** - * Update user - */ - private function updateUser(FlexibleRequest $request, FlexibleResponse $response): FlexibleResponse - { - $jsonData = $request->getPayload()->getValue(); - $data = json_decode($jsonData, true); - - $user = User::find($data['id'] ?? null); - - if (!$user) { - return $this->createErrorResponse($response, 404, 'USER_NOT_FOUND', 'User not found'); - } - - // Validate update data - $validator = Validator::make($data, [ - 'name' => 'sometimes|string|max:255', - 'email' => 'sometimes|email|unique:users,email,' . $user->id, - ]); - - if ($validator->fails()) { - return $this->createErrorResponse($response, 400, 'VALIDATION_ERROR', $validator->errors()->first()); - } - - $user->update(array_intersect_key($data, array_flip(['name', 'email']))); - - $responseData = new Any(); - $responseData->setValue(json_encode([ - 'data' => new UserResource($user) - ])); - - $response->setSuccess(true); - $response->setStatusCode(200); - $response->setData($responseData); - - return $response; - } - - /** - * Delete user - */ - private function deleteUser(FlexibleRequest $request, FlexibleResponse $response): FlexibleResponse - { - $jsonData = $request->getPayload()->getValue(); - $data = json_decode($jsonData, true); - - $user = User::find($data['id'] ?? null); - - if (!$user) { - return $this->createErrorResponse($response, 404, 'USER_NOT_FOUND', 'User not found'); - } - - $user->delete(); - - $response->setSuccess(true); - $response->setStatusCode(204); - - - return $response; - } - - /** - * List users with pagination - * @throws Exception - */ - private function listUsers(FlexibleRequest $request, FlexibleResponse $response): FlexibleResponse - { - $jsonData = $request->getPayload()->getValue(); - $filters = json_decode($jsonData, true) ?? []; - try { - $users = $this->userService->index(); - $users = data_get($users, 'data'); - $responseData = new Any(); - $resourceCollection = UserResource::collection($users); - $responseData->setValue(json_encode([ - 'data' => $resourceCollection, -// 'pagination' => [ -// 'current_page' => $users->currentPage(), -// 'total_pages' => $users->lastPage(), -// 'total_items' => $users->total(), -// 'per_page' => $users->perPage() -// ] - ])); - - $response->setSuccess(true); - $response->setStatusCode(200); - \Log::info('User listing successful', [ - 'total_users' => count($users), - 'users' => $users - ]); - $response->setData($responseData); - } catch (Exception $e) { - Log::error('User listing error', [ - 'error' => $e->getMessage(), - 'trace' => $e->getTrace() - ]); - return $this->createErrorResponse($response, Response::HTTP_UNAUTHORIZED, STATUS_UNAUTHENTICATED, 'Failed to list users: ' . $e->getMessage()); -// throw new Exception('Failed to user-service: ' . $e->getMessage(), STATUS_INTERNAL); - } - return $response; - } /** * @throws Exception @@ -353,62 +202,7 @@ private function login(FlexibleRequest $in, FlexibleResponse $response): Flexibl return $response; } - /** - * @throws BindingResolutionException - * @throws ConnectionException - */ - private function GetUserProfile(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse - { - $jsonData = $in->getPayload()->getValue(); - $data = json_decode($jsonData, true); - $this->authMiddleware->authenticateGrpcRequest(self::$context->clientMetadata()); - $user = $this->userService->userProfile($data); - \Log::info('GetUserProfile called', [ - 'data' => $data, - 'user_id' => $data['id'] ?? null, - 'user' => $user - ]); - - if (!$user) { - $this->createErrorResponse( - $response, - Response::HTTP_NOT_FOUND, - STATUS_NOT_FOUND, - 'User not found' - ); - return $response; - } - // Pack user data into Any - $anyData = new Any(); - $anyData->setValue(json_encode([ - 'data' => $user - ])); - $response->setSuccess(true); - $response->setStatusCode(200); - $response->setData($anyData); - - return $response; - } - - - private function logout(FlexibleRequest $in, FlexibleResponse $response): FlexibleResponse - { - try { - $this->authMiddleware->revokeGrpcToken(self::$context->clientMetadata()); - return $this->createResponse( - [], - $response, - Response::HTTP_NO_CONTENT, - ); - } catch (Exception $e) { - Log::error('Logout error', [ - 'error' => $e->getMessage(), - 'trace' => $e->getTrace() - ]); - return $this->createErrorResponse($response, Response::HTTP_UNAUTHORIZED, STATUS_UNAUTHENTICATED, $isLoggedOut['error'] ?? 'Unauthenticated'); - } - } } diff --git a/app/Grpc/User/AuthenticateRequest.php b/app/Grpc/User/AuthenticateRequest.php deleted file mode 100644 index 4b88e4d..0000000 --- a/app/Grpc/User/AuthenticateRequest.php +++ /dev/null @@ -1,85 +0,0 @@ -user.AuthenticateRequest - */ -class AuthenticateRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field string email = 1; - */ - protected $email = ''; - /** - * Generated from protobuf field string password = 2; - */ - protected $password = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $email - * @type string $password - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field string email = 1; - * @return string - */ - public function getEmail() - { - return $this->email; - } - - /** - * Generated from protobuf field string email = 1; - * @param string $var - * @return $this - */ - public function setEmail($var) - { - GPBUtil::checkString($var, True); - $this->email = $var; - - return $this; - } - - /** - * Generated from protobuf field string password = 2; - * @return string - */ - public function getPassword() - { - return $this->password; - } - - /** - * Generated from protobuf field string password = 2; - * @param string $var - * @return $this - */ - public function setPassword($var) - { - GPBUtil::checkString($var, True); - $this->password = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/AuthenticateResponse.php b/app/Grpc/User/AuthenticateResponse.php deleted file mode 100644 index ce25214..0000000 --- a/app/Grpc/User/AuthenticateResponse.php +++ /dev/null @@ -1,193 +0,0 @@ -user.AuthenticateResponse - */ -class AuthenticateResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .user.User user = 1; - */ - protected $user = null; - /** - * Generated from protobuf field string token = 2; - */ - protected $token = ''; - /** - * Generated from protobuf field string token_type = 3; - */ - protected $token_type = ''; - /** - * Generated from protobuf field string expires_at = 4; - */ - protected $expires_at = ''; - /** - * Generated from protobuf field bool success = 5; - */ - protected $success = false; - /** - * Generated from protobuf field string message = 6; - */ - protected $message = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \App\Grpc\User\User $user - * @type string $token - * @type string $token_type - * @type string $expires_at - * @type bool $success - * @type string $message - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .user.User user = 1; - * @return \App\Grpc\User\User - */ - public function getUser() - { - return $this->user; - } - - /** - * Generated from protobuf field .user.User user = 1; - * @param \App\Grpc\User\User $var - * @return $this - */ - public function setUser($var) - { - GPBUtil::checkMessage($var, \App\Grpc\User\User::class); - $this->user = $var; - - return $this; - } - - /** - * Generated from protobuf field string token = 2; - * @return string - */ - public function getToken() - { - return $this->token; - } - - /** - * Generated from protobuf field string token = 2; - * @param string $var - * @return $this - */ - public function setToken($var) - { - GPBUtil::checkString($var, True); - $this->token = $var; - - return $this; - } - - /** - * Generated from protobuf field string token_type = 3; - * @return string - */ - public function getTokenType() - { - return $this->token_type; - } - - /** - * Generated from protobuf field string token_type = 3; - * @param string $var - * @return $this - */ - public function setTokenType($var) - { - GPBUtil::checkString($var, True); - $this->token_type = $var; - - return $this; - } - - /** - * Generated from protobuf field string expires_at = 4; - * @return string - */ - public function getExpiresAt() - { - return $this->expires_at; - } - - /** - * Generated from protobuf field string expires_at = 4; - * @param string $var - * @return $this - */ - public function setExpiresAt($var) - { - GPBUtil::checkString($var, True); - $this->expires_at = $var; - - return $this; - } - - /** - * Generated from protobuf field bool success = 5; - * @return bool - */ - public function getSuccess() - { - return $this->success; - } - - /** - * Generated from protobuf field bool success = 5; - * @param bool $var - * @return $this - */ - public function setSuccess($var) - { - GPBUtil::checkBool($var); - $this->success = $var; - - return $this; - } - - /** - * Generated from protobuf field string message = 6; - * @return string - */ - public function getMessage() - { - return $this->message; - } - - /** - * Generated from protobuf field string message = 6; - * @param string $var - * @return $this - */ - public function setMessage($var) - { - GPBUtil::checkString($var, True); - $this->message = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/CartItem.php b/app/Grpc/User/CartItem.php deleted file mode 100644 index b954222..0000000 --- a/app/Grpc/User/CartItem.php +++ /dev/null @@ -1,139 +0,0 @@ -user.CartItem - */ -class CartItem extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field int64 id = 1; - */ - protected $id = 0; - /** - * Generated from protobuf field string type = 2; - */ - protected $type = ''; - /** - * Generated from protobuf field int32 quantity = 3; - */ - protected $quantity = 0; - /** - * Generated from protobuf field double price = 4; - */ - protected $price = 0.0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $id - * @type string $type - * @type int $quantity - * @type float $price - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field int64 id = 1; - * @return int|string - */ - public function getId() - { - return $this->id; - } - - /** - * Generated from protobuf field int64 id = 1; - * @param int|string $var - * @return $this - */ - public function setId($var) - { - GPBUtil::checkInt64($var); - $this->id = $var; - - return $this; - } - - /** - * Generated from protobuf field string type = 2; - * @return string - */ - public function getType() - { - return $this->type; - } - - /** - * Generated from protobuf field string type = 2; - * @param string $var - * @return $this - */ - public function setType($var) - { - GPBUtil::checkString($var, True); - $this->type = $var; - - return $this; - } - - /** - * Generated from protobuf field int32 quantity = 3; - * @return int - */ - public function getQuantity() - { - return $this->quantity; - } - - /** - * Generated from protobuf field int32 quantity = 3; - * @param int $var - * @return $this - */ - public function setQuantity($var) - { - GPBUtil::checkInt32($var); - $this->quantity = $var; - - return $this; - } - - /** - * Generated from protobuf field double price = 4; - * @return float - */ - public function getPrice() - { - return $this->price; - } - - /** - * Generated from protobuf field double price = 4; - * @param float $var - * @return $this - */ - public function setPrice($var) - { - GPBUtil::checkDouble($var); - $this->price = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/ChangePasswordRequest.php b/app/Grpc/User/ChangePasswordRequest.php deleted file mode 100644 index 9768234..0000000 --- a/app/Grpc/User/ChangePasswordRequest.php +++ /dev/null @@ -1,85 +0,0 @@ -user.ChangePasswordRequest - */ -class ChangePasswordRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field string current_password = 1; - */ - protected $current_password = ''; - /** - * Generated from protobuf field string new_password = 2; - */ - protected $new_password = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $current_password - * @type string $new_password - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field string current_password = 1; - * @return string - */ - public function getCurrentPassword() - { - return $this->current_password; - } - - /** - * Generated from protobuf field string current_password = 1; - * @param string $var - * @return $this - */ - public function setCurrentPassword($var) - { - GPBUtil::checkString($var, True); - $this->current_password = $var; - - return $this; - } - - /** - * Generated from protobuf field string new_password = 2; - * @return string - */ - public function getNewPassword() - { - return $this->new_password; - } - - /** - * Generated from protobuf field string new_password = 2; - * @param string $var - * @return $this - */ - public function setNewPassword($var) - { - GPBUtil::checkString($var, True); - $this->new_password = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/ChangePasswordResponse.php b/app/Grpc/User/ChangePasswordResponse.php deleted file mode 100644 index ce1ec24..0000000 --- a/app/Grpc/User/ChangePasswordResponse.php +++ /dev/null @@ -1,85 +0,0 @@ -user.ChangePasswordResponse - */ -class ChangePasswordResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field bool success = 1; - */ - protected $success = false; - /** - * Generated from protobuf field string message = 2; - */ - protected $message = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type bool $success - * @type string $message - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field bool success = 1; - * @return bool - */ - public function getSuccess() - { - return $this->success; - } - - /** - * Generated from protobuf field bool success = 1; - * @param bool $var - * @return $this - */ - public function setSuccess($var) - { - GPBUtil::checkBool($var); - $this->success = $var; - - return $this; - } - - /** - * Generated from protobuf field string message = 2; - * @return string - */ - public function getMessage() - { - return $this->message; - } - - /** - * Generated from protobuf field string message = 2; - * @param string $var - * @return $this - */ - public function setMessage($var) - { - GPBUtil::checkString($var, True); - $this->message = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/CreateUserRequest.php b/app/Grpc/User/CreateUserRequest.php deleted file mode 100644 index d229886..0000000 --- a/app/Grpc/User/CreateUserRequest.php +++ /dev/null @@ -1,139 +0,0 @@ -user.CreateUserRequest - */ -class CreateUserRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field string name = 1; - */ - protected $name = ''; - /** - * Generated from protobuf field string email = 2; - */ - protected $email = ''; - /** - * Generated from protobuf field string password = 3; - */ - protected $password = ''; - /** - * Generated from protobuf field string role = 4; - */ - protected $role = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * @type string $email - * @type string $password - * @type string $role - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field string name = 1; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Generated from protobuf field string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Generated from protobuf field string email = 2; - * @return string - */ - public function getEmail() - { - return $this->email; - } - - /** - * Generated from protobuf field string email = 2; - * @param string $var - * @return $this - */ - public function setEmail($var) - { - GPBUtil::checkString($var, True); - $this->email = $var; - - return $this; - } - - /** - * Generated from protobuf field string password = 3; - * @return string - */ - public function getPassword() - { - return $this->password; - } - - /** - * Generated from protobuf field string password = 3; - * @param string $var - * @return $this - */ - public function setPassword($var) - { - GPBUtil::checkString($var, True); - $this->password = $var; - - return $this; - } - - /** - * Generated from protobuf field string role = 4; - * @return string - */ - public function getRole() - { - return $this->role; - } - - /** - * Generated from protobuf field string role = 4; - * @param string $var - * @return $this - */ - public function setRole($var) - { - GPBUtil::checkString($var, True); - $this->role = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/DeleteUserRequest.php b/app/Grpc/User/DeleteUserRequest.php deleted file mode 100644 index c48203b..0000000 --- a/app/Grpc/User/DeleteUserRequest.php +++ /dev/null @@ -1,58 +0,0 @@ -user.DeleteUserRequest - */ -class DeleteUserRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field int64 id = 1; - */ - protected $id = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $id - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field int64 id = 1; - * @return int|string - */ - public function getId() - { - return $this->id; - } - - /** - * Generated from protobuf field int64 id = 1; - * @param int|string $var - * @return $this - */ - public function setId($var) - { - GPBUtil::checkInt64($var); - $this->id = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/DeleteUserResponse.php b/app/Grpc/User/DeleteUserResponse.php deleted file mode 100644 index 600e394..0000000 --- a/app/Grpc/User/DeleteUserResponse.php +++ /dev/null @@ -1,85 +0,0 @@ -user.DeleteUserResponse - */ -class DeleteUserResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field bool success = 1; - */ - protected $success = false; - /** - * Generated from protobuf field string message = 2; - */ - protected $message = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type bool $success - * @type string $message - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field bool success = 1; - * @return bool - */ - public function getSuccess() - { - return $this->success; - } - - /** - * Generated from protobuf field bool success = 1; - * @param bool $var - * @return $this - */ - public function setSuccess($var) - { - GPBUtil::checkBool($var); - $this->success = $var; - - return $this; - } - - /** - * Generated from protobuf field string message = 2; - * @return string - */ - public function getMessage() - { - return $this->message; - } - - /** - * Generated from protobuf field string message = 2; - * @param string $var - * @return $this - */ - public function setMessage($var) - { - GPBUtil::checkString($var, True); - $this->message = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/GetUserRequest.php b/app/Grpc/User/GetUserRequest.php deleted file mode 100644 index eae8edb..0000000 --- a/app/Grpc/User/GetUserRequest.php +++ /dev/null @@ -1,60 +0,0 @@ -user.GetUserRequest - */ -class GetUserRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field int64 id = 1; - */ - protected $id = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $id - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field int64 id = 1; - * @return int|string - */ - public function getId() - { - return $this->id; - } - - /** - * Generated from protobuf field int64 id = 1; - * @param int|string $var - * @return $this - */ - public function setId($var) - { - GPBUtil::checkInt64($var); - $this->id = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/ListUsersRequest.php b/app/Grpc/User/ListUsersRequest.php deleted file mode 100644 index 97d3d50..0000000 --- a/app/Grpc/User/ListUsersRequest.php +++ /dev/null @@ -1,112 +0,0 @@ -user.ListUsersRequest - */ -class ListUsersRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field int32 page = 1; - */ - protected $page = 0; - /** - * Generated from protobuf field int32 per_page = 2; - */ - protected $per_page = 0; - /** - * Generated from protobuf field string search = 3; - */ - protected $search = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int $page - * @type int $per_page - * @type string $search - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field int32 page = 1; - * @return int - */ - public function getPage() - { - return $this->page; - } - - /** - * Generated from protobuf field int32 page = 1; - * @param int $var - * @return $this - */ - public function setPage($var) - { - GPBUtil::checkInt32($var); - $this->page = $var; - - return $this; - } - - /** - * Generated from protobuf field int32 per_page = 2; - * @return int - */ - public function getPerPage() - { - return $this->per_page; - } - - /** - * Generated from protobuf field int32 per_page = 2; - * @param int $var - * @return $this - */ - public function setPerPage($var) - { - GPBUtil::checkInt32($var); - $this->per_page = $var; - - return $this; - } - - /** - * Generated from protobuf field string search = 3; - * @return string - */ - public function getSearch() - { - return $this->search; - } - - /** - * Generated from protobuf field string search = 3; - * @param string $var - * @return $this - */ - public function setSearch($var) - { - GPBUtil::checkString($var, True); - $this->search = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/ListUsersResponse.php b/app/Grpc/User/ListUsersResponse.php deleted file mode 100644 index ac84a51..0000000 --- a/app/Grpc/User/ListUsersResponse.php +++ /dev/null @@ -1,193 +0,0 @@ -user.ListUsersResponse - */ -class ListUsersResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field repeated .user.User users = 1; - */ - private $users; - /** - * Generated from protobuf field int32 total = 2; - */ - protected $total = 0; - /** - * Generated from protobuf field int32 current_page = 3; - */ - protected $current_page = 0; - /** - * Generated from protobuf field int32 last_page = 4; - */ - protected $last_page = 0; - /** - * Generated from protobuf field bool success = 5; - */ - protected $success = false; - /** - * Generated from protobuf field string message = 6; - */ - protected $message = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \App\Grpc\User\User[]|\Google\Protobuf\Internal\RepeatedField $users - * @type int $total - * @type int $current_page - * @type int $last_page - * @type bool $success - * @type string $message - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field repeated .user.User users = 1; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getUsers() - { - return $this->users; - } - - /** - * Generated from protobuf field repeated .user.User users = 1; - * @param \App\Grpc\User\User[]|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setUsers($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \App\Grpc\User\User::class); - $this->users = $arr; - - return $this; - } - - /** - * Generated from protobuf field int32 total = 2; - * @return int - */ - public function getTotal() - { - return $this->total; - } - - /** - * Generated from protobuf field int32 total = 2; - * @param int $var - * @return $this - */ - public function setTotal($var) - { - GPBUtil::checkInt32($var); - $this->total = $var; - - return $this; - } - - /** - * Generated from protobuf field int32 current_page = 3; - * @return int - */ - public function getCurrentPage() - { - return $this->current_page; - } - - /** - * Generated from protobuf field int32 current_page = 3; - * @param int $var - * @return $this - */ - public function setCurrentPage($var) - { - GPBUtil::checkInt32($var); - $this->current_page = $var; - - return $this; - } - - /** - * Generated from protobuf field int32 last_page = 4; - * @return int - */ - public function getLastPage() - { - return $this->last_page; - } - - /** - * Generated from protobuf field int32 last_page = 4; - * @param int $var - * @return $this - */ - public function setLastPage($var) - { - GPBUtil::checkInt32($var); - $this->last_page = $var; - - return $this; - } - - /** - * Generated from protobuf field bool success = 5; - * @return bool - */ - public function getSuccess() - { - return $this->success; - } - - /** - * Generated from protobuf field bool success = 5; - * @param bool $var - * @return $this - */ - public function setSuccess($var) - { - GPBUtil::checkBool($var); - $this->success = $var; - - return $this; - } - - /** - * Generated from protobuf field string message = 6; - * @return string - */ - public function getMessage() - { - return $this->message; - } - - /** - * Generated from protobuf field string message = 6; - * @param string $var - * @return $this - */ - public function setMessage($var) - { - GPBUtil::checkString($var, True); - $this->message = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/LogoutRequest.php b/app/Grpc/User/LogoutRequest.php deleted file mode 100644 index 9f612e2..0000000 --- a/app/Grpc/User/LogoutRequest.php +++ /dev/null @@ -1,31 +0,0 @@ -user.LogoutRequest - */ -class LogoutRequest extends \Google\Protobuf\Internal\Message -{ - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - -} - diff --git a/app/Grpc/User/LogoutResponse.php b/app/Grpc/User/LogoutResponse.php deleted file mode 100644 index 83b04b7..0000000 --- a/app/Grpc/User/LogoutResponse.php +++ /dev/null @@ -1,85 +0,0 @@ -user.LogoutResponse - */ -class LogoutResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field bool success = 1; - */ - protected $success = false; - /** - * Generated from protobuf field string message = 2; - */ - protected $message = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type bool $success - * @type string $message - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field bool success = 1; - * @return bool - */ - public function getSuccess() - { - return $this->success; - } - - /** - * Generated from protobuf field bool success = 1; - * @param bool $var - * @return $this - */ - public function setSuccess($var) - { - GPBUtil::checkBool($var); - $this->success = $var; - - return $this; - } - - /** - * Generated from protobuf field string message = 2; - * @return string - */ - public function getMessage() - { - return $this->message; - } - - /** - * Generated from protobuf field string message = 2; - * @param string $var - * @return $this - */ - public function setMessage($var) - { - GPBUtil::checkString($var, True); - $this->message = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/RefreshTokenRequest.php b/app/Grpc/User/RefreshTokenRequest.php deleted file mode 100644 index 1a470f9..0000000 --- a/app/Grpc/User/RefreshTokenRequest.php +++ /dev/null @@ -1,31 +0,0 @@ -user.RefreshTokenRequest - */ -class RefreshTokenRequest extends \Google\Protobuf\Internal\Message -{ - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - -} - diff --git a/app/Grpc/User/RefreshTokenResponse.php b/app/Grpc/User/RefreshTokenResponse.php deleted file mode 100644 index 8999b2b..0000000 --- a/app/Grpc/User/RefreshTokenResponse.php +++ /dev/null @@ -1,166 +0,0 @@ -user.RefreshTokenResponse - */ -class RefreshTokenResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field string token = 1; - */ - protected $token = ''; - /** - * Generated from protobuf field string token_type = 2; - */ - protected $token_type = ''; - /** - * Generated from protobuf field string expires_at = 3; - */ - protected $expires_at = ''; - /** - * Generated from protobuf field bool success = 4; - */ - protected $success = false; - /** - * Generated from protobuf field string message = 5; - */ - protected $message = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $token - * @type string $token_type - * @type string $expires_at - * @type bool $success - * @type string $message - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field string token = 1; - * @return string - */ - public function getToken() - { - return $this->token; - } - - /** - * Generated from protobuf field string token = 1; - * @param string $var - * @return $this - */ - public function setToken($var) - { - GPBUtil::checkString($var, True); - $this->token = $var; - - return $this; - } - - /** - * Generated from protobuf field string token_type = 2; - * @return string - */ - public function getTokenType() - { - return $this->token_type; - } - - /** - * Generated from protobuf field string token_type = 2; - * @param string $var - * @return $this - */ - public function setTokenType($var) - { - GPBUtil::checkString($var, True); - $this->token_type = $var; - - return $this; - } - - /** - * Generated from protobuf field string expires_at = 3; - * @return string - */ - public function getExpiresAt() - { - return $this->expires_at; - } - - /** - * Generated from protobuf field string expires_at = 3; - * @param string $var - * @return $this - */ - public function setExpiresAt($var) - { - GPBUtil::checkString($var, True); - $this->expires_at = $var; - - return $this; - } - - /** - * Generated from protobuf field bool success = 4; - * @return bool - */ - public function getSuccess() - { - return $this->success; - } - - /** - * Generated from protobuf field bool success = 4; - * @param bool $var - * @return $this - */ - public function setSuccess($var) - { - GPBUtil::checkBool($var); - $this->success = $var; - - return $this; - } - - /** - * Generated from protobuf field string message = 5; - * @return string - */ - public function getMessage() - { - return $this->message; - } - - /** - * Generated from protobuf field string message = 5; - * @param string $var - * @return $this - */ - public function setMessage($var) - { - GPBUtil::checkString($var, True); - $this->message = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/UpdateUserRequest.php b/app/Grpc/User/UpdateUserRequest.php deleted file mode 100644 index 8363942..0000000 --- a/app/Grpc/User/UpdateUserRequest.php +++ /dev/null @@ -1,139 +0,0 @@ -user.UpdateUserRequest - */ -class UpdateUserRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field int64 id = 1; - */ - protected $id = 0; - /** - * Generated from protobuf field string name = 2; - */ - protected $name = ''; - /** - * Generated from protobuf field string email = 3; - */ - protected $email = ''; - /** - * Generated from protobuf field string password = 4; - */ - protected $password = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $id - * @type string $name - * @type string $email - * @type string $password - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field int64 id = 1; - * @return int|string - */ - public function getId() - { - return $this->id; - } - - /** - * Generated from protobuf field int64 id = 1; - * @param int|string $var - * @return $this - */ - public function setId($var) - { - GPBUtil::checkInt64($var); - $this->id = $var; - - return $this; - } - - /** - * Generated from protobuf field string name = 2; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Generated from protobuf field string name = 2; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Generated from protobuf field string email = 3; - * @return string - */ - public function getEmail() - { - return $this->email; - } - - /** - * Generated from protobuf field string email = 3; - * @param string $var - * @return $this - */ - public function setEmail($var) - { - GPBUtil::checkString($var, True); - $this->email = $var; - - return $this; - } - - /** - * Generated from protobuf field string password = 4; - * @return string - */ - public function getPassword() - { - return $this->password; - } - - /** - * Generated from protobuf field string password = 4; - * @param string $var - * @return $this - */ - public function setPassword($var) - { - GPBUtil::checkString($var, True); - $this->password = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/User.php b/app/Grpc/User/User.php deleted file mode 100644 index e66ff64..0000000 --- a/app/Grpc/User/User.php +++ /dev/null @@ -1,249 +0,0 @@ -user.User - */ -class User extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field int64 id = 1; - */ - protected $id = 0; - /** - * Generated from protobuf field string name = 2; - */ - protected $name = ''; - /** - * Generated from protobuf field string email = 3; - */ - protected $email = ''; - /** - * Generated from protobuf field string role = 4; - */ - protected $role = ''; - /** - * Generated from protobuf field string photo_path = 5; - */ - protected $photo_path = ''; - /** - * Generated from protobuf field string access_token = 6; - */ - protected $access_token = ''; - /** - * Generated from protobuf field string created_at = 7; - */ - protected $created_at = ''; - /** - * Generated from protobuf field string updated_at = 8; - */ - protected $updated_at = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $id - * @type string $name - * @type string $email - * @type string $role - * @type string $photo_path - * @type string $access_token - * @type string $created_at - * @type string $updated_at - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field int64 id = 1; - * @return int|string - */ - public function getId() - { - return $this->id; - } - - /** - * Generated from protobuf field int64 id = 1; - * @param int|string $var - * @return $this - */ - public function setId($var) - { - GPBUtil::checkInt64($var); - $this->id = $var; - - return $this; - } - - /** - * Generated from protobuf field string name = 2; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Generated from protobuf field string name = 2; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Generated from protobuf field string email = 3; - * @return string - */ - public function getEmail() - { - return $this->email; - } - - /** - * Generated from protobuf field string email = 3; - * @param string $var - * @return $this - */ - public function setEmail($var) - { - GPBUtil::checkString($var, True); - $this->email = $var; - - return $this; - } - - /** - * Generated from protobuf field string role = 4; - * @return string - */ - public function getRole() - { - return $this->role; - } - - /** - * Generated from protobuf field string role = 4; - * @param string $var - * @return $this - */ - public function setRole($var) - { - GPBUtil::checkString($var, True); - $this->role = $var; - - return $this; - } - - /** - * Generated from protobuf field string photo_path = 5; - * @return string - */ - public function getPhotoPath() - { - return $this->photo_path; - } - - /** - * Generated from protobuf field string photo_path = 5; - * @param string $var - * @return $this - */ - public function setPhotoPath($var) - { - GPBUtil::checkString($var, True); - $this->photo_path = $var; - - return $this; - } - - /** - * Generated from protobuf field string access_token = 6; - * @return string - */ - public function getAccessToken() - { - return $this->access_token; - } - - /** - * Generated from protobuf field string access_token = 6; - * @param string $var - * @return $this - */ - public function setAccessToken($var) - { - GPBUtil::checkString($var, True); - $this->access_token = $var; - - return $this; - } - - /** - * Generated from protobuf field string created_at = 7; - * @return string - */ - public function getCreatedAt() - { - return $this->created_at; - } - - /** - * Generated from protobuf field string created_at = 7; - * @param string $var - * @return $this - */ - public function setCreatedAt($var) - { - GPBUtil::checkString($var, True); - $this->created_at = $var; - - return $this; - } - - /** - * Generated from protobuf field string updated_at = 8; - * @return string - */ - public function getUpdatedAt() - { - return $this->updated_at; - } - - /** - * Generated from protobuf field string updated_at = 8; - * @param string $var - * @return $this - */ - public function setUpdatedAt($var) - { - GPBUtil::checkString($var, True); - $this->updated_at = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/UserProfileRequest.php b/app/Grpc/User/UserProfileRequest.php deleted file mode 100644 index 8677915..0000000 --- a/app/Grpc/User/UserProfileRequest.php +++ /dev/null @@ -1,58 +0,0 @@ -user.UserProfileRequest - */ -class UserProfileRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field repeated string fields = 2; - */ - private $fields; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string[]|\Google\Protobuf\Internal\RepeatedField $fields - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field repeated string fields = 2; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getFields() - { - return $this->fields; - } - - /** - * Generated from protobuf field repeated string fields = 2; - * @param string[]|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setFields($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); - $this->fields = $arr; - - return $this; - } - -} - diff --git a/app/Grpc/User/UserProfileResponse.php b/app/Grpc/User/UserProfileResponse.php deleted file mode 100644 index d574745..0000000 --- a/app/Grpc/User/UserProfileResponse.php +++ /dev/null @@ -1,247 +0,0 @@ -user.UserProfileResponse - */ -class UserProfileResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field int64 id = 1; - */ - protected $id = 0; - /** - * Generated from protobuf field string name = 2; - */ - protected $name = ''; - /** - * Generated from protobuf field string email = 3; - */ - protected $email = ''; - /** - * Generated from protobuf field string photo_path = 4; - */ - protected $photo_path = ''; - /** - * Generated from protobuf field string role = 5; - */ - protected $role = ''; - /** - * Generated from protobuf field repeated .user.CartItem cart_items = 6; - */ - private $cart_items; - /** - * Generated from protobuf field bool success = 7; - */ - protected $success = false; - /** - * Generated from protobuf field string message = 8; - */ - protected $message = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $id - * @type string $name - * @type string $email - * @type string $photo_path - * @type string $role - * @type \App\Grpc\User\CartItem[]|\Google\Protobuf\Internal\RepeatedField $cart_items - * @type bool $success - * @type string $message - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field int64 id = 1; - * @return int|string - */ - public function getId() - { - return $this->id; - } - - /** - * Generated from protobuf field int64 id = 1; - * @param int|string $var - * @return $this - */ - public function setId($var) - { - GPBUtil::checkInt64($var); - $this->id = $var; - - return $this; - } - - /** - * Generated from protobuf field string name = 2; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Generated from protobuf field string name = 2; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Generated from protobuf field string email = 3; - * @return string - */ - public function getEmail() - { - return $this->email; - } - - /** - * Generated from protobuf field string email = 3; - * @param string $var - * @return $this - */ - public function setEmail($var) - { - GPBUtil::checkString($var, True); - $this->email = $var; - - return $this; - } - - /** - * Generated from protobuf field string photo_path = 4; - * @return string - */ - public function getPhotoPath() - { - return $this->photo_path; - } - - /** - * Generated from protobuf field string photo_path = 4; - * @param string $var - * @return $this - */ - public function setPhotoPath($var) - { - GPBUtil::checkString($var, True); - $this->photo_path = $var; - - return $this; - } - - /** - * Generated from protobuf field string role = 5; - * @return string - */ - public function getRole() - { - return $this->role; - } - - /** - * Generated from protobuf field string role = 5; - * @param string $var - * @return $this - */ - public function setRole($var) - { - GPBUtil::checkString($var, True); - $this->role = $var; - - return $this; - } - - /** - * Generated from protobuf field repeated .user.CartItem cart_items = 6; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getCartItems() - { - return $this->cart_items; - } - - /** - * Generated from protobuf field repeated .user.CartItem cart_items = 6; - * @param \App\Grpc\User\CartItem[]|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setCartItems($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \App\Grpc\User\CartItem::class); - $this->cart_items = $arr; - - return $this; - } - - /** - * Generated from protobuf field bool success = 7; - * @return bool - */ - public function getSuccess() - { - return $this->success; - } - - /** - * Generated from protobuf field bool success = 7; - * @param bool $var - * @return $this - */ - public function setSuccess($var) - { - GPBUtil::checkBool($var); - $this->success = $var; - - return $this; - } - - /** - * Generated from protobuf field string message = 8; - * @return string - */ - public function getMessage() - { - return $this->message; - } - - /** - * Generated from protobuf field string message = 8; - * @param string $var - * @return $this - */ - public function setMessage($var) - { - GPBUtil::checkString($var, True); - $this->message = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/UserResponse.php b/app/Grpc/User/UserResponse.php deleted file mode 100644 index b7ad7d2..0000000 --- a/app/Grpc/User/UserResponse.php +++ /dev/null @@ -1,114 +0,0 @@ -user.UserResponse - */ -class UserResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .user.User user = 1; - */ - protected $user = null; - /** - * Generated from protobuf field bool success = 2; - */ - protected $success = false; - /** - * Generated from protobuf field string message = 3; - */ - protected $message = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \App\Grpc\User\User $user - * @type bool $success - * @type string $message - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .user.User user = 1; - * @return \App\Grpc\User\User - */ - public function getUser() - { - return $this->user; - } - - /** - * Generated from protobuf field .user.User user = 1; - * @param \App\Grpc\User\User $var - * @return $this - */ - public function setUser($var) - { - GPBUtil::checkMessage($var, \App\Grpc\User\User::class); - $this->user = $var; - - return $this; - } - - /** - * Generated from protobuf field bool success = 2; - * @return bool - */ - public function getSuccess() - { - return $this->success; - } - - /** - * Generated from protobuf field bool success = 2; - * @param bool $var - * @return $this - */ - public function setSuccess($var) - { - GPBUtil::checkBool($var); - $this->success = $var; - - return $this; - } - - /** - * Generated from protobuf field string message = 3; - * @return string - */ - public function getMessage() - { - return $this->message; - } - - /** - * Generated from protobuf field string message = 3; - * @param string $var - * @return $this - */ - public function setMessage($var) - { - GPBUtil::checkString($var, True); - $this->message = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/UserServiceClient.php b/app/Grpc/User/UserServiceClient.php deleted file mode 100644 index cca9b6c..0000000 --- a/app/Grpc/User/UserServiceClient.php +++ /dev/null @@ -1,175 +0,0 @@ -_simpleRequest('/user.UserService/GetUser', - $argument, - ['\App\Grpc\User\UserResponse', 'decode'], - $metadata, $options); - } - - /** - * @param \App\Grpc\User\CreateUserRequest $argument input argument - * @param array $metadata metadata - * @param array $options call options - * @return \App\Grpc\User\UserResponse - */ - public function CreateUser(\App\Grpc\User\CreateUserRequest $argument, - $metadata = [], $options = []) { - return $this->_simpleRequest('/user.UserService/CreateUser', - $argument, - ['\App\Grpc\User\UserResponse', 'decode'], - $metadata, $options); - } - - /** - * @param \App\Grpc\User\UpdateUserRequest $argument input argument - * @param array $metadata metadata - * @param array $options call options - * @return \App\Grpc\User\UserResponse - */ - public function UpdateUser(\App\Grpc\User\UpdateUserRequest $argument, - $metadata = [], $options = []) { - return $this->_simpleRequest('/user.UserService/UpdateUser', - $argument, - ['\App\Grpc\User\UserResponse', 'decode'], - $metadata, $options); - } - - /** - * @param \App\Grpc\User\DeleteUserRequest $argument input argument - * @param array $metadata metadata - * @param array $options call options - * @return \App\Grpc\User\DeleteUserResponse - */ - public function DeleteUser(\App\Grpc\User\DeleteUserRequest $argument, - $metadata = [], $options = []) { - return $this->_simpleRequest('/user.UserService/DeleteUser', - $argument, - ['\App\Grpc\User\DeleteUserResponse', 'decode'], - $metadata, $options); - } - - /** - * @param \App\Grpc\User\ListUsersRequest $argument input argument - * @param array $metadata metadata - * @param array $options call options - * @return \App\Grpc\User\ListUsersResponse - */ - public function ListUsers(\App\Grpc\User\ListUsersRequest $argument, - $metadata = [], $options = []) { - return $this->_simpleRequest('/user.UserService/ListUsers', - $argument, - ['\App\Grpc\User\ListUsersResponse', 'decode'], - $metadata, $options); - } - - /** - * @param \App\Grpc\User\AuthenticateRequest $argument input argument - * @param array $metadata metadata - * @param array $options call options - * @return \App\Grpc\User\AuthenticateResponse - */ - public function AuthenticateUser(\App\Grpc\User\AuthenticateRequest $argument, - $metadata = [], $options = []) { - return $this->_simpleRequest('/user.UserService/AuthenticateUser', - $argument, - ['\App\Grpc\User\AuthenticateResponse', 'decode'], - $metadata, $options); - } - - /** - * @param \App\Grpc\User\UserProfileRequest $argument input argument - * @param array $metadata metadata - * @param array $options call options - * @return \App\Grpc\User\UserProfileResponse - */ - public function GetUserProfile(\App\Grpc\User\UserProfileRequest $argument, - $metadata = [], $options = []) { - return $this->_simpleRequest('/user.UserService/GetUserProfile', - $argument, - ['\App\Grpc\User\UserProfileResponse', 'decode'], - $metadata, $options); - } - - /** - * @param \App\Grpc\User\LogoutRequest $argument input argument - * @param array $metadata metadata - * @param array $options call options - * @return \App\Grpc\User\LogoutResponse - */ - public function LogoutUser(\App\Grpc\User\LogoutRequest $argument, - $metadata = [], $options = []) { - return $this->_simpleRequest('/user.UserService/LogoutUser', - $argument, - ['\App\Grpc\User\LogoutResponse', 'decode'], - $metadata, $options); - } - - /** - * @param \App\Grpc\User\ValidateTokenRequest $argument input argument - * @param array $metadata metadata - * @param array $options call options - * @return \App\Grpc\User\ValidateTokenResponse - */ - public function ValidateToken(\App\Grpc\User\ValidateTokenRequest $argument, - $metadata = [], $options = []) { - return $this->_simpleRequest('/user.UserService/ValidateToken', - $argument, - ['\App\Grpc\User\ValidateTokenResponse', 'decode'], - $metadata, $options); - } - - /** - * @param \App\Grpc\User\RefreshTokenRequest $argument input argument - * @param array $metadata metadata - * @param array $options call options - * @return \App\Grpc\User\RefreshTokenResponse - */ - public function RefreshToken(\App\Grpc\User\RefreshTokenRequest $argument, - $metadata = [], $options = []) { - return $this->_simpleRequest('/user.UserService/RefreshToken', - $argument, - ['\App\Grpc\User\RefreshTokenResponse', 'decode'], - $metadata, $options); - } - - /** - * @param \App\Grpc\User\ChangePasswordRequest $argument input argument - * @param array $metadata metadata - * @param array $options call options - * @return \App\Grpc\User\ChangePasswordResponse - */ - public function ChangePassword(\App\Grpc\User\ChangePasswordRequest $argument, - $metadata = [], $options = []) { - return $this->_simpleRequest('/user.UserService/ChangePassword', - $argument, - ['\App\Grpc\User\ChangePasswordResponse', 'decode'], - $metadata, $options); - } - -} diff --git a/app/Grpc/User/ValidateTokenRequest.php b/app/Grpc/User/ValidateTokenRequest.php deleted file mode 100644 index cc819bf..0000000 --- a/app/Grpc/User/ValidateTokenRequest.php +++ /dev/null @@ -1,58 +0,0 @@ -user.ValidateTokenRequest - */ -class ValidateTokenRequest extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field string token = 1; - */ - protected $token = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $token - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field string token = 1; - * @return string - */ - public function getToken() - { - return $this->token; - } - - /** - * Generated from protobuf field string token = 1; - * @param string $var - * @return $this - */ - public function setToken($var) - { - GPBUtil::checkString($var, True); - $this->token = $var; - - return $this; - } - -} - diff --git a/app/Grpc/User/ValidateTokenResponse.php b/app/Grpc/User/ValidateTokenResponse.php deleted file mode 100644 index cf2bddd..0000000 --- a/app/Grpc/User/ValidateTokenResponse.php +++ /dev/null @@ -1,139 +0,0 @@ -user.ValidateTokenResponse - */ -class ValidateTokenResponse extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field .user.User user = 1; - */ - protected $user = null; - /** - * Generated from protobuf field bool valid = 2; - */ - protected $valid = false; - /** - * Generated from protobuf field bool success = 3; - */ - protected $success = false; - /** - * Generated from protobuf field string message = 4; - */ - protected $message = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type \App\Grpc\User\User $user - * @type bool $valid - * @type bool $success - * @type string $message - * } - */ - public function __construct($data = NULL) { - \App\Grpc\GPBMetadata\User\UserService::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field .user.User user = 1; - * @return \App\Grpc\User\User - */ - public function getUser() - { - return $this->user; - } - - /** - * Generated from protobuf field .user.User user = 1; - * @param \App\Grpc\User\User $var - * @return $this - */ - public function setUser($var) - { - GPBUtil::checkMessage($var, \App\Grpc\User\User::class); - $this->user = $var; - - return $this; - } - - /** - * Generated from protobuf field bool valid = 2; - * @return bool - */ - public function getValid() - { - return $this->valid; - } - - /** - * Generated from protobuf field bool valid = 2; - * @param bool $var - * @return $this - */ - public function setValid($var) - { - GPBUtil::checkBool($var); - $this->valid = $var; - - return $this; - } - - /** - * Generated from protobuf field bool success = 3; - * @return bool - */ - public function getSuccess() - { - return $this->success; - } - - /** - * Generated from protobuf field bool success = 3; - * @param bool $var - * @return $this - */ - public function setSuccess($var) - { - GPBUtil::checkBool($var); - $this->success = $var; - - return $this; - } - - /** - * Generated from protobuf field string message = 4; - * @return string - */ - public function getMessage() - { - return $this->message; - } - - /** - * Generated from protobuf field string message = 4; - * @param string $var - * @return $this - */ - public function setMessage($var) - { - GPBUtil::checkString($var, True); - $this->message = $var; - - return $this; - } - -} - diff --git a/app/Handler/OfferHandler.php b/app/Handler/OfferHandler.php index 1062717..b6aa8c2 100644 --- a/app/Handler/OfferHandler.php +++ b/app/Handler/OfferHandler.php @@ -12,6 +12,6 @@ class OfferHandler implements ItemHandlerInterface */ public function getItem($itemId) { - return new ApiGatewayRepository()->getOffer($itemId); + return app(ApiGatewayRepository::class)->getOffer($itemId); } } diff --git a/app/Handler/ProductHandler.php b/app/Handler/ProductHandler.php index 8f576ff..208e1e2 100644 --- a/app/Handler/ProductHandler.php +++ b/app/Handler/ProductHandler.php @@ -12,6 +12,6 @@ class ProductHandler implements ItemHandlerInterface */ public function getItem($itemId) { - return new ApiGatewayRepository()->getProduct($itemId); + return app(ApiGatewayRepository::class)->getProduct($itemId); } } diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php index d06ae49..89cef64 100644 --- a/app/Http/Resources/UserResource.php +++ b/app/Http/Resources/UserResource.php @@ -21,7 +21,7 @@ public function toArray(Request $request): array 'email' => data_get($this, 'email'), 'photo_url' => $this->when(data_get($this, 'photo_path'), ApiGateway::storageUri() . data_get($this, 'photo_path')), 'token' => $this->whenNotNull(data_get($this, 'accessToken')), - 'token_expires_at' => $this->whenNotNull(data_get($this, 'accessToken')), + 'token_expires_at' => $this->whenNotNull(data_get($this, 'tokenExpiresAt')), 'role_name' => data_get($this, 'role'), ]); } diff --git a/app/Providers/GrpcServiceProvider.php b/app/Providers/GrpcServiceProvider.php new file mode 100644 index 0000000..521b147 --- /dev/null +++ b/app/Providers/GrpcServiceProvider.php @@ -0,0 +1,20 @@ +loadGrpcRoutes(); + } + + protected function loadGrpcRoutes(): void + { + if (file_exists(base_path('routes/grpc.php'))) { + require base_path('routes/grpc.php'); + } + } +} diff --git a/app/Repositories/ApiGatewayRepository.php b/app/Repositories/ApiGatewayRepository.php index daf18de..917b302 100644 --- a/app/Repositories/ApiGatewayRepository.php +++ b/app/Repositories/ApiGatewayRepository.php @@ -3,6 +3,7 @@ namespace App\Repositories; use App\External_Apis\Apis\ApiGateway; +use App\Grpc\Services\GrpcService; use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Http\Client\ConnectionException; use Illuminate\Support\Facades\Http; @@ -13,7 +14,9 @@ class ApiGatewayRepository private string $productApi; private string $offerApi; - public function __construct() + public function __construct( + private GrpcService $grpcService, + ) { $this->productApi = ApiGateway::getService('product_uri'); $this->offerApi = ApiGateway::getService('offer_uri'); @@ -25,9 +28,15 @@ public function __construct() */ public function getProduct(int $productId) { - $response = http::withToken(request()->bearerToken())->get($this->productApi . $productId); - if ($response->successful()) - return $response->json('data'); +// $response = http::withToken(request()->bearerToken())->get($this->productApi . $productId); + request()->merge(['id' => $productId]); + $response = $this->grpcService->proxyRequest( + request(), + 'ProductService', + 'getProduct', + ); + if ($response->getStatusCode() === 200) + return data_get($response->getData(true), 'data'); return null; } diff --git a/bootstrap/providers.php b/bootstrap/providers.php index cdebb55..98aace7 100644 --- a/bootstrap/providers.php +++ b/bootstrap/providers.php @@ -2,5 +2,6 @@ return [ App\Providers\AppServiceProvider::class, - Bschmitt\Amqp\AmqpServiceProvider::class + App\Providers\GrpcServiceProvider::class, + Bschmitt\Amqp\AmqpServiceProvider::class, ]; diff --git a/config/grpc.php b/config/grpc.php deleted file mode 100644 index 409c1d8..0000000 --- a/config/grpc.php +++ /dev/null @@ -1,16 +0,0 @@ - [ - 'user' => [ - 'host' => env('USER_SERVICE_GRPC_HOST', 'localhost:50051'), - ], - // Add other services here as you create them - ], - - 'server' => [ - 'port' => env('GRPC_SERVER_PORT', 50051), - 'host' => env('GRPC_SERVER_HOST', '0.0.0.0'), - ], -]; diff --git a/config/services.php b/config/services.php index d46b321..0e86987 100644 --- a/config/services.php +++ b/config/services.php @@ -42,6 +42,7 @@ ], 'microservices' => [ + 'gw_service_grpc' => env('GW_SERVICE_GRPC', 'api-gw:50051'), 'gw_url' => env('GW_URL'), 'product_uri' => env('PRODUCT_URI'), 'offer_uri' => env('OFFER_URI'), diff --git a/docker-compose.yml b/docker-compose.yml index 7e2fd18..1102ec2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ services: user: build: context: . - image: ommrgazar315/user-service:2.0_grpc + image: ommrgazar315/user-service:2.5_grpc restart: unless-stopped working_dir: /var/www volumes: @@ -30,6 +30,10 @@ services: - AMQP_VHOST=/ - GRPC_SERVER_PORT=9501 - GRPC_SERVER_HOST=0.0.0.0 + - GW_SERVICE_GRPC=api-gw:50051 + - GW_URL=http://api-gw/ + - PRODUCT_URI=api/products/ + - OFFER_URI=api/offers/ # command: > # sh -c "php-fpm" user_db: diff --git a/routes/grpc.php b/routes/grpc.php new file mode 100644 index 0000000..2c5b2c7 --- /dev/null +++ b/routes/grpc.php @@ -0,0 +1,22 @@ +method('GetUser', 'UserController', 'getUser') + ->method('ListUsers', 'UserController', 'listUsers') + ->method('GetUserProfile', 'UserController', 'getUserProfile'); + +GrpcRoute::service('Auth') + ->method('Login', 'AuthController', 'login') + ->method('SignUp', 'AuthController', 'signup') + ->method('Logout', 'AuthController', 'logout') + ->method('ValidateToken', 'AuthController', 'validateToken'); + +// Cart Service Routes +GrpcRoute::service('Cart') + ->method('GetCart', 'CartController', 'getCart') + ->method('AddToCart', 'CartController', 'addToCart') + ->method('RemoveFromCart', 'CartController', 'removeFromCart') + ->method('ClearCart', 'CartController', 'clearCart');