From cee0f49f32962664872184a0cf3a143e1f6a6a0b Mon Sep 17 00:00:00 2001 From: behzad Date: Sat, 22 Jan 2022 21:30:15 +0400 Subject: [PATCH] fixing missed step --- app/Console/Kernel.php | 10 ++-- app/Events/Event.php | 2 + app/Events/ExampleEvent.php | 5 +- app/Exceptions/Handler.php | 6 +- app/Http/Controllers/Controller.php | 2 + app/Http/Controllers/OrderController.php | 48 +++++++++++++--- app/Http/Controllers/ProductController.php | 33 ++++++++++- app/Http/Middleware/Authenticate.php | 4 ++ app/Http/Middleware/ExampleMiddleware.php | 2 + app/Jobs/ExampleJob.php | 6 +- app/Jobs/Job.php | 2 + app/Listeners/ExampleListener.php | 6 +- app/Providers/AppServiceProvider.php | 3 +- app/Providers/AuthServiceProvider.php | 17 +++--- app/Providers/EventServiceProvider.php | 2 + app/Services/OrderService.php | 51 ++++++++++++++--- app/Services/ProductService.php | 56 +++++++++++++++---- app/Traits/ApiResponse.php | 25 ++++++++- app/Traits/RequestService.php | 20 +++++-- app/User.php | 8 ++- bootstrap/app.php | 6 +- composer.json | 9 +-- config/auth.php | 4 +- config/services.php | 3 +- database/factories/ModelFactory.php | 3 +- .../2022_01_22_164518_add_users_table.php | 36 ++++++++++++ database/seeds/DatabaseSeeder.php | 5 +- database/seeds/UserTableSeeder.php | 23 ++++++++ public/index.php | 2 + routes/web.php | 4 +- 30 files changed, 330 insertions(+), 73 deletions(-) create mode 100644 database/migrations/2022_01_22_164518_add_users_table.php create mode 100644 database/seeds/UserTableSeeder.php diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index ad6e311..0d8a594 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -1,5 +1,7 @@ getStatusCode(); $errorMessage = Response::$statusTexts[$errorCode]; @@ -99,6 +102,5 @@ class Handler extends ExceptionHandler return $this->errorResponse( "Unexpected error. Try later!", Response::HTTP_INTERNAL_SERVER_ERROR); - } } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 72350ce..1838462 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -1,5 +1,7 @@ orderService = $orderService; $this->productService = $productService; } + /** + * @return mixed + */ public function index() { return $this->successResponse($this->orderService->fetchOrders()); } + /** + * @param $order + * + * @return mixed + */ public function show($order) { return $this->successResponse($this->orderService->fetchOrder($order)); } + /** + * @param \Illuminate\Http\Request $request + * + * @return mixed + */ public function store(Request $request) { - $result = $this->productService->fetchProduct($request->product_id); -// dd($result); - return $this->successResponse($this->orderService->createOrder($request->all())); } + /** + * @param \Illuminate\Http\Request $request + * @param $order + * + * @return mixed + */ public function update(Request $request, $order) { return $this->successResponse($this->orderService->updateOrder($order, $request->all())); } + /** + * @param $order + * + * @return mixed + */ public function destroy($order) { return $this->successResponse($this->orderService->deleteOrder($order)); } - -} \ No newline at end of file +} diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index a7e1fe3..36381fe 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -1,5 +1,7 @@ productService = $productService; } + /** + * @return mixed + */ public function index() { return $this->successResponse($this->productService->fetchProducts()); } + /** + * @param $product + * + * @return mixed + */ public function show($product) { return $this->successResponse($this->productService->fetchProduct($product)); } + /** + * @param \Illuminate\Http\Request $request + * + * @return mixed + */ public function store(Request $request) { return $this->successResponse($this->productService->createProduct($request->all())); } + /** + * @param \Illuminate\Http\Request $request + * @param $product + * + * @return mixed + */ public function update(Request $request, $product) { return $this->successResponse($this->productService->updateProduct($product, $request->all())); } + /** + * @param $product + * + * @return mixed + */ public function destroy($product) { return $this->successResponse($this->productService->deleteProduct($product)); } -} \ No newline at end of file +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 361a11e..1fea457 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -1,10 +1,14 @@ app['auth']->viaRequest('api', function ($request) { + * if ($request->input('api_token')) { + * return User::where('api_token', $request->input('api_token'))->first(); + * } + * }); * * @return void */ @@ -31,12 +36,6 @@ class AuthServiceProvider extends ServiceProvider // should return either a User instance or null. You're free to obtain // the User instance via an API token or any other method necessary. -// $this->app['auth']->viaRequest('api', function ($request) { -// if ($request->input('api_token')) { -// return User::where('api_token', $request->input('api_token'))->first(); -// } -// }); - LumenPassport::routes($this->app->router); } } diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index a3d284f..0175c14 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -1,5 +1,7 @@ secret = config('services.orders.secret'); } - public function fetchOrders() + /** + * @return string + */ + public function fetchOrders() : string { return $this->request('GET', '/api/order'); } - public function fetchOrder($order) + /** + * @param $order + * + * @return string + */ + public function fetchOrder($order) : string { return $this->request('GET', "/api/order/{$order}"); } - public function createOrder($data) + /** + * @param $data + * + * @return string + */ + public function createOrder($data) : string { return $this->request('POST', '/api/order', $data); } - public function updateOrder($order, $data) + /** + * @param $order + * @param $data + * + * @return string + */ + public function updateOrder($order, $data) : string { return $this->request('PATCH', "/api/order/{$order}", $data); } - public function deleteOrder($order) + /** + * @param $order + * + * @return string + */ + public function deleteOrder($order) : string { return $this->request('DELETE', "/api/order/{$order}"); } -} \ No newline at end of file +} diff --git a/app/Services/ProductService.php b/app/Services/ProductService.php index 89be091..9e4e414 100644 --- a/app/Services/ProductService.php +++ b/app/Services/ProductService.php @@ -1,46 +1,82 @@ baseUri = config('services.products.base_uri'); $this->secret = config('services.products.secret'); } - - public function fetchProducts() + /** + * @return string + */ + public function fetchProducts() : string { return $this->request('GET', '/api/product'); } - public function fetchProduct($product) + /** + * @param $product + * + * @return string + */ + public function fetchProduct($product) : string { return $this->request('GET', "/api/product/{$product}"); } - public function createProduct($data) + /** + * @param $data + * + * @return string + */ + public function createProduct($data) : string { return $this->request('POST', '/api/product', $data); } - public function updateProduct($product, $data) + /** + * @param $product + * @param $data + * + * @return string + */ + public function updateProduct($product, $data) : string { return $this->request('PATCH', "/api/product/{$product}", $data); } - public function deleteProduct($product) + /** + * @param $product + * + * @return string + */ + public function deleteProduct($product) : string { return $this->request('DELETE', "/api/product/{$product}"); } - -} \ No newline at end of file +} diff --git a/app/Traits/ApiResponse.php b/app/Traits/ApiResponse.php index bc022ac..6a6028f 100644 --- a/app/Traits/ApiResponse.php +++ b/app/Traits/ApiResponse.php @@ -1,26 +1,45 @@ header('Content-Type', 'application/json'); } + /** + * @param $errorMessage + * @param $statusCode + * + * @return mixed + */ public function errorResponse($errorMessage, $statusCode) { return response()->json(['error' => $errorMessage, 'error_code' => $statusCode], $statusCode); } + /** + * @param $errorMessage + * @param $statusCode + * + * @return mixed + */ public function errorMessage($errorMessage, $statusCode) { return response($errorMessage, $statusCode)->header('Content-Type', 'application/json'); } -} \ No newline at end of file +} diff --git a/app/Traits/RequestService.php b/app/Traits/RequestService.php index 5177448..feaa03d 100644 --- a/app/Traits/RequestService.php +++ b/app/Traits/RequestService.php @@ -1,27 +1,39 @@ $this->baseUri ]); + if (isset($this->secret)) { $headers['Authorization'] = $this->secret; } + $response = $client->request($method, $requestUrl, [ 'form_params' => $formParams, 'headers' => $headers ] ); + return $response->getBody()->getContents(); } - -} \ No newline at end of file +} diff --git a/app/User.php b/app/User.php index 5bdef8b..0ce760e 100644 --- a/app/User.php +++ b/app/User.php @@ -1,5 +1,7 @@ load(); + (new Laravel\Lumen\Bootstrap\LoadEnvironmentVariables( + dirname(__DIR__) + ))->bootstrap(); } catch (Dotenv\Exception\InvalidPathException $e) { // } diff --git a/composer.json b/composer.json index bdbf798..72f7028 100644 --- a/composer.json +++ b/composer.json @@ -8,13 +8,14 @@ "php": ">=7.1.3", "dusterio/lumen-passport": "^0.2.15", "guzzlehttp/guzzle": "^6.5", - "laravel/lumen-framework": "5.7.*", - "vlucas/phpdotenv": "~2.2" + "laravel/lumen-framework": "5.8.*", + "lcobucci/jwt": "3.3.3", + "vlucas/phpdotenv": "^3.3" }, "require-dev": { "fzaninotto/faker": "~1.4", - "phpunit/phpunit": "~7.0", - "mockery/mockery": "~1.0" + "mockery/mockery": "~1.0", + "phpunit/phpunit": "~7.0" }, "autoload": { "classmap": [ diff --git a/config/auth.php b/config/auth.php index 3988d55..65cd3c2 100644 --- a/config/auth.php +++ b/config/auth.php @@ -1,5 +1,7 @@ [ 'guard' => 'api', @@ -19,4 +21,4 @@ return [ 'model' => \App\User::class ] ] -]; \ No newline at end of file +]; diff --git a/config/services.php b/config/services.php index 66a54e1..6ed3ef3 100644 --- a/config/services.php +++ b/config/services.php @@ -1,5 +1,6 @@ [ @@ -10,4 +11,4 @@ return [ 'base_uri' => env('ORDERS_SERVICE_BASE_URI'), 'secret' => env('ORDERS_SERVICE_SECRET'), ] -]; \ No newline at end of file +]; diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index 7833a68..7594576 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -1,5 +1,7 @@ bigIncrements('id'); + $table->string('name', 256); + $table->string('email', 256); + $table->string('password', 512); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() : void + { + Schema::dropIfExists('users'); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 23526c9..532d795 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -1,5 +1,7 @@ call('UsersTableSeeder'); + \Illuminate\Support\Facades\Artisan::call('passport:install'); + $this->call(UserTableSeeder::class); } } diff --git a/database/seeds/UserTableSeeder.php b/database/seeds/UserTableSeeder.php new file mode 100644 index 0000000..9d9fe72 --- /dev/null +++ b/database/seeds/UserTableSeeder.php @@ -0,0 +1,23 @@ + 'user1', + 'email' => 'user1@gmail.com', + 'password' => Hash::make('123456') + ]); + } +} diff --git a/public/index.php b/public/index.php index 04aa086..adecaf5 100644 --- a/public/index.php +++ b/public/index.php @@ -1,5 +1,7 @@ group(['prefix' => 'api', 'middleware' => ['client.credentials']], func $router->delete('/{order}', ['uses' => 'OrderController@destroy']); }); -}); \ No newline at end of file +});