Skip to content

Commit

Permalink
Merge pull request #37 from tuandm/feature/improve-user-management
Browse files Browse the repository at this point in the history
User search and quick add
  • Loading branch information
tuandm authored Apr 20, 2019
2 parents 61b2a76 + ce7fc49 commit 902ad69
Show file tree
Hide file tree
Showing 10 changed files with 311 additions and 38 deletions.
12 changes: 12 additions & 0 deletions app/Http/Controllers/LaravueController.php
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
<?php
/**
* File LaravelController.php
*
* @author Tuan Duong <[email protected]>
* @package Laravue
* @version 1.0
*/

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class LaravueController extends Controller
{
/**
* Entry point for Laravue Dashboard
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function index()
{
return view('laravue');
Expand Down
96 changes: 77 additions & 19 deletions app/Http/Controllers/UserController.php
Original file line number Diff line number Diff line change
@@ -1,22 +1,49 @@
<?php
/**
* File UserController.php
*
* @author Tuan Duong <[email protected]>
* @package Laravue
* @version 1.0
*/

namespace App\Http\Controllers;

use App\Http\Resources\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rule;
use Validator;

class UserController extends Controller
{
const ITEM_PER_PAGE = 15;
/**
* Display a listing of the resource.
* Display a listing of the user resource.
*
* @return \Illuminate\Http\Response
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response|ResourceCollection
*/
public function index()
public function index(Request $request)
{
return User::collection(\App\User::paginate(15));
$searchParams = $request->all();
$userQuery = \App\User::query();
$limit = Arr::get($searchParams, 'limit', static::ITEM_PER_PAGE);
$role = Arr::get($searchParams, 'role', '');
$keyword = Arr::get($searchParams, 'keyword', '');

if (!empty($role)) {
$userQuery->where('role', $role);
}

if (!empty($keyword)) {
$userQuery->where('name', 'LIKE', '%' . $keyword . '%');
$userQuery->where('email', 'LIKE', '%' . $keyword . '%');
}

return User::collection($userQuery->paginate($limit));
}

/**
Expand All @@ -27,7 +54,31 @@ public function index()
*/
public function store(Request $request)
{
//
sleep(1);
$validator = Validator::make(
$request->all(),
array_merge(
$this->getValidationRules(),
[
'password' => ['required', 'min:6'],
'confirmPassword' => 'same:password',
]
)
);

if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 403);
} else {
$params = $request->all();
$user = \App\User::create([
'name' => $params['name'],
'email' => $params['email'],
'role' => $params['role'],
'password' => Hash::make($params['password']),
]);

return new User($user);
}
}

/**
Expand All @@ -45,23 +96,16 @@ public function show($id)
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @param \App\User $user
* @return \Illuminate\Http\Response
*/
public function update(Request $request, int $id)
public function update(Request $request, \App\User $user)
{
$user = \App\User::find($id);
if ($user === null) {
return response()->json(['error' => 'User not found'], 404);
}

$rules = array(
'name' => 'required',
'email' => 'required|email',
'role' => 'required|not_in:admin',
);

$validator = Validator::make($request->all(), $rules);
$validator = Validator::make($request->all(), $this->getValidationRules());
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 403);
} else {
Expand All @@ -75,11 +119,25 @@ public function update(Request $request, int $id)
/**
* Remove the specified resource from storage.
*
* @param int $id
* @param \App\User $user
* @return \Illuminate\Http\Response
*/
public function destroy($id)
public function destroy(\App\User $user)
{
$user->delete();
return response()->json(null, 204);
}

private function getValidationRules()
{
//
return [
'name' => 'required',
'email' => 'required|email',
'role' => [
'required',
'not_in:admin',
Rule::in(['admin', 'editor', 'user', 'guest']),
],
];
}
}
12 changes: 11 additions & 1 deletion app/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@
use Illuminate\Foundation\Auth\User as Authenticatable;
use Tymon\JWTAuth\Contracts\JWTSubject;

/**
* Class User
*
* @property string $name
* @property string $email
* @property string $role
* @property string $password
*
* @package App
*/
class User extends Authenticatable implements JWTSubject
{
use Notifiable;
Expand All @@ -16,7 +26,7 @@ class User extends Authenticatable implements JWTSubject
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
'name', 'email', 'password', 'role'
];

/**
Expand Down
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
"driver.js": "^0.9.5",
"dropzone": "^5.5.1",
"echarts": "^4.1.0",
"element-ui": "^2.6.1",
"element-ui": "^2.7.2",
"file-saver": "^2.0.1",
"fuse.js": "^3.4.4",
"js-cookie": "^2.2.0",
Expand Down
3 changes: 1 addition & 2 deletions resources/js/api/resource.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,10 @@ class Resource {
return request({
url: '/' + this.uri,
method: 'post',
params: resource,
data: resource,
});
}
update(id, resource) {
// return request.put('/' + this.uri + '/' + id, resource);
return request({
url: '/' + this.uri + '/' + id,
method: 'put',
Expand Down
9 changes: 9 additions & 0 deletions resources/js/lang/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@ export default {
delete: 'Delete',
cancel: 'Cancel',
confirm: 'Confirm',
keyword: 'Keyword',
role: 'Role',
},
errorLog: {
tips: 'Please click the bug icon in the upper right corner',
Expand Down Expand Up @@ -177,4 +179,11 @@ export default {
fixedHeader: 'Fixed Header',
sidebarLogo: 'Sidebar Logo',
},
user: {
'role': 'Role',
'password': 'Password',
'confirmPassword': 'Confirm password',
'name': 'Name',
'email': 'Email',
},
};
9 changes: 9 additions & 0 deletions resources/js/lang/vi.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@ export default {
delete: 'Delete',
cancel: 'Cancel',
confirm: 'Confirm',
keyword: 'Từ khóa',
role: 'Nhóm',
},
errorLog: {
tips: 'Please click the bug icon in the upper right corner',
Expand Down Expand Up @@ -167,4 +169,11 @@ export default {
closeOthers: 'Close Others',
closeAll: 'Close All',
},
user: {
'role': 'Nhóm',
'password': 'Mật khẩu',
'confirmPassword': 'Nhập lại mật khẩu',
'name': 'Tên',
'email': 'Địa chỉ email',
},
};
3 changes: 1 addition & 2 deletions resources/js/views/users/Edit.vue
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,6 @@
<script>
import Resource from '@/api/resource';
import PanThumb from '@/components/PanThumb';
import { Message } from 'element-ui';
const userResource = new Resource('users');
export default {
Expand Down Expand Up @@ -246,7 +245,7 @@ export default {
.update(this.user.id, this.user)
.then(response => {
this.updating = false;
Message({
this.$message({
message: 'User information has been updated successfully',
type: 'success',
duration: 5 * 1000,
Expand Down
Loading

0 comments on commit 902ad69

Please sign in to comment.