diff --git a/app/Http/Controllers/UserApiController.php b/app/Http/Controllers/UserApiController.php new file mode 100644 index 000000000000..ee525c1dd9ae --- /dev/null +++ b/app/Http/Controllers/UserApiController.php @@ -0,0 +1,76 @@ +userService = $userService; + $this->userRepo = $userRepo; + } + + public function index() + { + $user = Auth::user(); + $users = User::whereAccountId($user->account_id)->withTrashed(); + $users = $users->paginate(); + + $paginator = User::whereAccountId($user->account_id)->withTrashed()->paginate(); + + $transformer = new UserTransformer(Auth::user()->account, $this->serializer); + $data = $this->createCollection($users, $transformer, 'users', $paginator); + + return $this->response($data); + } + + /* + public function store(CreateUserRequest $request) + { + return $this->save($request); + } + */ + + public function update(UpdateUserRequest $request, $userPublicId) + { + /* + // temporary fix for ids starting at 0 + $userPublicId -= 1; + $user = User::scope($userPublicId)->firstOrFail(); + */ + $user = Auth::user(); + + if ($request->action == ACTION_ARCHIVE) { + $this->userRepo->archive($user); + + $transformer = new UserTransformer(Auth::user()->account, $request->serializer); + $data = $this->createItem($user, $transformer, 'users'); + + return $this->response($data); + } else { + return $this->save($request, $user); + } + } + + private function save($request, $user = false) + { + $user = $this->userRepo->save($request->input(), $user); + + $transformer = new UserTransformer(\Auth::user()->account, $request->serializer); + $data = $this->createItem($user, $transformer, 'users'); + + return $this->response($data); + } +} \ No newline at end of file diff --git a/app/Http/Requests/UpdateUserRequest.php b/app/Http/Requests/UpdateUserRequest.php new file mode 100644 index 000000000000..1bbcc3d7eaea --- /dev/null +++ b/app/Http/Requests/UpdateUserRequest.php @@ -0,0 +1,33 @@ + 'email|required|unique:users,email,' . Auth::user()->id . ',id', + 'first_name' => 'required', + 'last_name' => 'required', + ]; + } +} diff --git a/app/Http/routes.php b/app/Http/routes.php index 362441a4a52b..d0e623e0bd7d 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -235,6 +235,7 @@ Route::group(['middleware' => 'api', 'prefix' => 'api/v1'], function() Route::get('user_accounts', 'AccountApiController@getUserAccounts'); Route::resource('products', 'ProductApiController'); Route::resource('tax_rates', 'TaxRateApiController'); + Route::resource('users', 'UserApiController'); // Vendor Route::resource('vendors', 'VendorApiController'); diff --git a/app/Models/User.php b/app/Models/User.php index 129ddb0abecd..e74d76b5f9bf 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -29,7 +29,13 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon * * @var array */ - protected $fillable = ['first_name', 'last_name', 'email', 'password']; + protected $fillable = [ + 'first_name', + 'last_name', + 'email', + 'password', + 'phone', + ]; /** * The attributes excluded from the model's JSON form. @@ -51,6 +57,11 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon return $this->belongsTo('App\Models\Theme'); } + public function setEmailAttribute($value) + { + $this->attributes['email'] = $this->attributes['username'] = $value; + } + public function getName() { return $this->getDisplayName(); diff --git a/app/Ninja/Repositories/UserRepository.php b/app/Ninja/Repositories/UserRepository.php index 01b7017fa0a0..5675a161a6ff 100644 --- a/app/Ninja/Repositories/UserRepository.php +++ b/app/Ninja/Repositories/UserRepository.php @@ -26,4 +26,13 @@ class UserRepository extends BaseRepository return $query; } + + public function save($data, $user) + { + $user->fill($data); + $user->save(); + + return $user; + } + } diff --git a/app/Ninja/Transformers/UserTransformer.php b/app/Ninja/Transformers/UserTransformer.php index dd3c6775dcb1..d700c579baca 100644 --- a/app/Ninja/Transformers/UserTransformer.php +++ b/app/Ninja/Transformers/UserTransformer.php @@ -17,7 +17,7 @@ class UserTransformer extends EntityTransformer 'updated_at' => $this->getTimestamp($user->updated_at), 'deleted_at' => $this->getTimestamp($user->deleted_at), 'phone' => $user->phone, - 'username' => $user->username, + //'username' => $user->username, 'registered' => (bool) $user->registered, 'confirmed' => (bool) $user->confirmed, 'oauth_user_id' => $user->oauth_user_id,