From 74cb1477bb921a2378ea22a552b71a48c11e0931 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Fri, 20 Jul 2018 16:34:32 +0200 Subject: Better API (integrated oauth completely) --- api/Users/Console/AddUserCommand.php | 59 +++++++++++++++++ api/Users/Controllers/UserController.php | 57 +++++++++++++++++ api/Users/Events/UserWasCreated.php | 16 +++++ api/Users/Events/UserWasDeleted.php | 16 +++++ api/Users/Events/UserWasUpdated.php | 16 +++++ api/Users/Exceptions/UserNotFoundException.php | 13 ++++ api/Users/Models/User.php | 30 +++++++++ api/Users/Repositories/UserRepository.php | 35 ++++++++++ api/Users/Requests/CreateUserRequest.php | 30 +++++++++ api/Users/Services/UserService.php | 88 ++++++++++++++++++++++++++ api/Users/UserServiceProvider.php | 23 +++++++ api/Users/routes.php | 7 ++ 12 files changed, 390 insertions(+) create mode 100644 api/Users/Console/AddUserCommand.php create mode 100644 api/Users/Controllers/UserController.php create mode 100644 api/Users/Events/UserWasCreated.php create mode 100644 api/Users/Events/UserWasDeleted.php create mode 100644 api/Users/Events/UserWasUpdated.php create mode 100644 api/Users/Exceptions/UserNotFoundException.php create mode 100644 api/Users/Models/User.php create mode 100644 api/Users/Repositories/UserRepository.php create mode 100644 api/Users/Requests/CreateUserRequest.php create mode 100644 api/Users/Services/UserService.php create mode 100644 api/Users/UserServiceProvider.php create mode 100644 api/Users/routes.php (limited to 'api/Users') diff --git a/api/Users/Console/AddUserCommand.php b/api/Users/Console/AddUserCommand.php new file mode 100644 index 0000000..021d5aa --- /dev/null +++ b/api/Users/Console/AddUserCommand.php @@ -0,0 +1,59 @@ +userRepository = $userRepository; + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $user = $this->userRepository->create([ + 'name' => $this->argument('name'), + 'email' => $this->argument('email'), + 'password' => $this->argument('password') + ]); + + $this->info(sprintf('A user was created with ID %s', $user->id)); + } +} \ No newline at end of file diff --git a/api/Users/Controllers/UserController.php b/api/Users/Controllers/UserController.php new file mode 100644 index 0000000..5178dcb --- /dev/null +++ b/api/Users/Controllers/UserController.php @@ -0,0 +1,57 @@ +userService = $userService; + } + + public function getAll() + { + $resourceOptions = $this->parseResourceOptions(); + + $data = $this->userService->getAll($resourceOptions); + $parsedData = $this->parseData($data, $resourceOptions, 'users'); + + return $this->response($parsedData); + } + + public function getById($userId) + { + $resourceOptions = $this->parseResourceOptions(); + + $data = $this->userService->getById($userId, $resourceOptions); + $parsedData = $this->parseData($data, $resourceOptions, 'user'); + + return $this->response($parsedData); + } + + public function create(CreateUserRequest $request) + { + $data = $request->get('user', []); + + return $this->response($this->userService->create($data), 201); + } + + public function update($userId, Request $request) + { + $data = $request->get('user', []); + + return $this->response($this->userService->update($userId, $data)); + } + + public function delete($userId) + { + return $this->response($this->userService->delete($userId)); + } +} diff --git a/api/Users/Events/UserWasCreated.php b/api/Users/Events/UserWasCreated.php new file mode 100644 index 0000000..3975ad3 --- /dev/null +++ b/api/Users/Events/UserWasCreated.php @@ -0,0 +1,16 @@ +user = $user; + } +} diff --git a/api/Users/Events/UserWasDeleted.php b/api/Users/Events/UserWasDeleted.php new file mode 100644 index 0000000..bfd7cff --- /dev/null +++ b/api/Users/Events/UserWasDeleted.php @@ -0,0 +1,16 @@ +user = $user; + } +} diff --git a/api/Users/Events/UserWasUpdated.php b/api/Users/Events/UserWasUpdated.php new file mode 100644 index 0000000..02658d1 --- /dev/null +++ b/api/Users/Events/UserWasUpdated.php @@ -0,0 +1,16 @@ +user = $user; + } +} diff --git a/api/Users/Exceptions/UserNotFoundException.php b/api/Users/Exceptions/UserNotFoundException.php new file mode 100644 index 0000000..13fb40e --- /dev/null +++ b/api/Users/Exceptions/UserNotFoundException.php @@ -0,0 +1,13 @@ +getModel(); + + $data['password'] = password_hash($data['password'], PASSWORD_BCRYPT); + + $user->fill($data); + $user->save(); + + return $user; + } + + public function update(User $user, array $data) + { + $user->fill($data); + + $user->save(); + + return $user; + } +} diff --git a/api/Users/Requests/CreateUserRequest.php b/api/Users/Requests/CreateUserRequest.php new file mode 100644 index 0000000..c168eb2 --- /dev/null +++ b/api/Users/Requests/CreateUserRequest.php @@ -0,0 +1,30 @@ + 'array|required', + 'user.email' => 'required|email', + 'user.name' => 'required|string', + 'user.password' => 'required|string|min:8' + ]; + } + + public function attributes() + { + return [ + 'user.email' => 'the user\'s email' + ]; + } +} diff --git a/api/Users/Services/UserService.php b/api/Users/Services/UserService.php new file mode 100644 index 0000000..923acd0 --- /dev/null +++ b/api/Users/Services/UserService.php @@ -0,0 +1,88 @@ +auth = $auth; + $this->database = $database; + $this->dispatcher = $dispatcher; + $this->userRepository = $userRepository; + } + + public function getAll($options = []) + { + return $this->userRepository->get($options); + } + + public function getById($userId, array $options = []) + { + $user = $this->getRequestedUser($userId); + + return $user; + } + + public function create($data) + { + $user = $this->userRepository->create($data); + + $this->dispatcher->fire(new UserWasCreated($user)); + + return $user; + } + + public function update($userId, array $data) + { + $user = $this->getRequestedUser($userId); + + $this->userRepository->update($user, $data); + + $this->dispatcher->fire(new UserWasUpdated($user)); + + return $user; + } + + public function delete($userId) + { + $user = $this->getRequestedUser($userId); + + $this->userRepository->delete($userId); + + $this->dispatcher->fire(new UserWasDeleted($user)); + } + + private function getRequestedUser($userId) + { + $user = $this->userRepository->getById($userId); + + if (is_null($user)) { + throw new UserNotFoundException(); + } + + return $user; + } +} diff --git a/api/Users/UserServiceProvider.php b/api/Users/UserServiceProvider.php new file mode 100644 index 0000000..af59a79 --- /dev/null +++ b/api/Users/UserServiceProvider.php @@ -0,0 +1,23 @@ + [ + // listeners for when a user is created + ], + UserWasDeleted::class => [ + // listeners for when a user is deleted + ], + UserWasUpdated::class => [ + // listeners for when a user is updated + ] + ]; +} diff --git a/api/Users/routes.php b/api/Users/routes.php new file mode 100644 index 0000000..f24f0c0 --- /dev/null +++ b/api/Users/routes.php @@ -0,0 +1,7 @@ +get('/users', 'UserController@getAll'); +$router->get('/users/{id}', 'UserController@getById'); +$router->post('/users', 'UserController@create'); +$router->put('/users/{id}', 'UserController@update'); +$router->delete('/users/{id}', 'UserController@delete'); -- cgit v1.2.3