Commit 17870f75 authored by Viral Solani's avatar Viral Solani

Refactor User API

parent f277a631
...@@ -2,11 +2,13 @@ ...@@ -2,11 +2,13 @@
namespace App\Http\Controllers\Api\V1; namespace App\Http\Controllers\Api\V1;
use App\Http\Resources\UserResource; use Validator;
use Illuminate\Http\Request;
use App\Models\Access\User\User; use App\Models\Access\User\User;
use App\Http\Resources\UserResource;
use App\Events\Backend\Access\User\UserCreated;
use App\Events\Backend\Access\User\UserUpdated;
use App\Repositories\Backend\Access\User\UserRepository; use App\Repositories\Backend\Access\User\UserRepository;
use Illuminate\Http\Request;
use Validator;
class UsersController extends APIController class UsersController extends APIController
{ {
...@@ -25,7 +27,9 @@ class UsersController extends APIController ...@@ -25,7 +27,9 @@ class UsersController extends APIController
/** /**
* Return the users. * Return the users.
* *
* @return \Illuminate\Http\Response * @param Request $request
*
* @return \Illuminate\Http\JsonResponse
*/ */
public function index(Request $request) public function index(Request $request)
{ {
...@@ -41,89 +45,120 @@ class UsersController extends APIController ...@@ -41,89 +45,120 @@ class UsersController extends APIController
* *
* @param User $user * @param User $user
* *
* @return \Illuminate\Http\Response * @return \Illuminate\Http\JsonResponse
*/ */
public function show(User $user) public function show(User $user)
{ {
$data = new UserResource($user); return new UserResource($user);
$history['history'] = history()->renderEntity('User', $user->id);
$maindata = $data->toArray($user);
$maindata = array_merge($maindata, $history);
return $maindata;
} }
/** /**
* Return the specified resource. * Create User
* *
* @param Request * @param Request $request
* *
* @return \Illuminate\Http\Response * @return \Illuminate\Http\JsonResponse
*/ */
public function deactivatedUserList(Request $request) public function store(Request $request)
{ {
$limit = $request->get('paginate') ? $request->get('paginate') : 25; $validation = $this->validateUser($request);
return UserResource::collection( if ($validation->fails()) {
$this->repository->getForDataTable(0, false)->paginate($limit) return $this->throwValidation($validation->messages()->first());
); }
$this->repository->create($request);
event(new UserCreated($user));
return new UserResource(User::orderBy('created_at', 'desc')->first());
} }
/** /**
* Return the specified resource. * Update User
* *
* @param Request $request
* @param User $user * @param User $user
* *
* @return \Illuminate\Http\Response * @return \Illuminate\Http\JsonResponse
*/
public function deleteUserList(Request $request)
{
$limit = $request->get('paginate') ? $request->get('paginate') : 25;
return UserResource::collection(
$this->repository->getForDataTable(0, true)->paginate($limit)
);
}
/**
* Update the specified resource in storage.
*/ */
public function update(Request $request, User $user) public function update(Request $request, User $user)
{ {
$validation = $this->validatingRequest($request, 'edit', $user->id); $validation = $this->validateUser($request, 'edit', $user->id);
if ($validation->fails()) { if ($validation->fails()) {
return $this->throwValidation($validation->messages()->first()); return $this->throwValidation($validation->messages()->first());
} }
$this->repository->update($user, $request); $updatedUser = $this->repository->update($user, $request);
$user = User::findOrfail($user->id); event(new UserUpdated($user));
return new UserResource($user); return new UserResource($updatedUser);
} }
/** /**
* Store the specified resource in storage. * Delete User
*
* @param User $user
* @param Request $request
*
* @return mixed
*/ */
public function store(Request $request) public function destroy(User $user, Request $request)
{ {
$validation = $this->validatingRequest($request); $this->repository->delete($user);
if ($validation->fails()) { return $this->respond([
return $this->throwValidation($validation->messages()->first()); 'message' => trans('alerts.backend.users.deleted'),
} ]);
$this->repository->create($request); }
return new UserResource(User::orderBy('created_at', 'desc')->first()); /**
* Return the deactivate users
*
* @param Request
*
* @return \Illuminate\Http\JsonResponse
*/
public function deactivatedUserList(Request $request)
{
$limit = $request->get('paginate') ? $request->get('paginate') : 25;
return UserResource::collection(
$this->repository->getForDataTable(0, false)->paginate($limit)
);
}
/**
* Return the deleted users.
*
* @param User $user
*
* @return \Illuminate\Http\JsonResponse
*/
public function deleteUserList(Request $request)
{
$limit = $request->get('paginate') ? $request->get('paginate') : 25;
return UserResource::collection(
$this->repository->getForDataTable(0, true)->paginate($limit)
);
} }
/** /**
* Validation function to validate user input. * validateUser User
*
* @param $request
* @param $action
* @param $id
*
* @return \Illuminate\Http\JsonResponse
*/ */
public function validatingRequest(Request $request, $string = '', $id = 0) public function validateUser(Request $request, $action = '', $id = 0)
{ {
$password = ($string == 'edit') ? '' : 'required|min:6|confirmed'; $password = ($action == 'edit') ? '' : 'required|min:6|confirmed';
$validation = Validator::make($request->all(), [ $validation = Validator::make($request->all(), [
'first_name' => 'required|max:255', 'first_name' => 'required|max:255',
'last_name' => 'required|max:255', 'last_name' => 'required|max:255',
...@@ -135,19 +170,4 @@ class UsersController extends APIController ...@@ -135,19 +170,4 @@ class UsersController extends APIController
return $validation; return $validation;
} }
/**
* Api to delete the resource.
*
* @param Role $role
* @param DeleteRoleRequest $request
*
* @return mixed
*/
public function destroy(User $user, Request $request)
{
$this->repository->delete($user);
return ['message' => 'success'];
}
} }
...@@ -144,7 +144,7 @@ class UserRepository extends BaseRepository ...@@ -144,7 +144,7 @@ class UserRepository extends BaseRepository
if ($user->update($data)) { if ($user->update($data)) {
$user->status = isset($data['status']) ? 1 : 0; $user->status = isset($data['status']) ? 1 : 0;
$user->confirmed = isset($data['confirmed']) ? 1 : 0; $user->confirmed = isset($data['confirmed']) ? 1 : 0;
$user->save(); $updatedUser = tap($user)->save();
$this->checkUserRolesCount($roles); $this->checkUserRolesCount($roles);
$this->flushRoles($roles, $user); $this->flushRoles($roles, $user);
...@@ -152,7 +152,7 @@ class UserRepository extends BaseRepository ...@@ -152,7 +152,7 @@ class UserRepository extends BaseRepository
$this->flushPermissions($permissions, $user); $this->flushPermissions($permissions, $user);
event(new UserUpdated($user)); event(new UserUpdated($user));
return true; return $updatedUser;
} }
throw new GeneralException(trans('exceptions.backend.access.users.update_error')); throw new GeneralException(trans('exceptions.backend.access.users.update_error'));
......
...@@ -2091,16 +2091,16 @@ ...@@ -2091,16 +2091,16 @@
}, },
{ {
"name": "nesbot/carbon", "name": "nesbot/carbon",
"version": "1.24.1", "version": "1.24.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/briannesbitt/Carbon.git", "url": "https://github.com/briannesbitt/Carbon.git",
"reference": "ef12cbd8ba5ce624f0a6a95e0850c4cc13e71e41" "reference": "bba6c6e410c6b4317e37a9474aeaa753808c3875"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ef12cbd8ba5ce624f0a6a95e0850c4cc13e71e41", "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bba6c6e410c6b4317e37a9474aeaa753808c3875",
"reference": "ef12cbd8ba5ce624f0a6a95e0850c4cc13e71e41", "reference": "bba6c6e410c6b4317e37a9474aeaa753808c3875",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
...@@ -2140,7 +2140,7 @@ ...@@ -2140,7 +2140,7 @@
"datetime", "datetime",
"time" "time"
], ],
"time": "2018-03-09T15:49:34+00:00" "time": "2018-03-10T10:10:14+00:00"
}, },
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
......
...@@ -28,12 +28,13 @@ Route::group(['namespace' => 'Api\V1', 'prefix' => 'v1', 'as' => 'v1.'], functio ...@@ -28,12 +28,13 @@ Route::group(['namespace' => 'Api\V1', 'prefix' => 'v1', 'as' => 'v1.'], functio
// Route::post('password/reset', 'ResetPasswordController@reset')->name('password.reset'); // Route::post('password/reset', 'ResetPasswordController@reset')->name('password.reset');
}); });
Route::resource('users', 'UsersController' , ['except' => ['edit', 'udpate']]);
// Users // Users
Route::group(['prefix' => 'users'], function () { Route::group(['prefix' => 'users'], function () {
Route::get('deactiveUsers', 'UsersController@deactivatedUserList'); Route::get('deactiveUsers', 'UsersController@deactivatedUserList');
Route::get('deleteUsers', 'UsersController@deleteUserList'); Route::get('deleteUsers', 'UsersController@deleteUserList');
}); });
Route::resource('users', 'UsersController');
// Roles // Roles
Route::resource('roles', 'RolesController'); Route::resource('roles', 'RolesController');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment