diff --git a/app/Http/Controllers/DepartmentController.php b/app/Http/Controllers/DepartmentController.php new file mode 100644 index 0000000..3133f84 --- /dev/null +++ b/app/Http/Controllers/DepartmentController.php @@ -0,0 +1,76 @@ +validate(['name' => 'required|string']); + return Department::create($request->all()); + } + + /** + * Display the specified resource. + */ + public function show(Department $department) + { + // + return $department; + + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(Department $department) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, Department $department) + { + // + $request->validate(['name' => 'required|string']); + $department->update($request->all()); + return $department; + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(Department $department) + { + // + $department->delete(); + return response()->noContent(); + } +} diff --git a/app/Http/Controllers/RoleController.php b/app/Http/Controllers/RoleController.php new file mode 100644 index 0000000..c2eec16 --- /dev/null +++ b/app/Http/Controllers/RoleController.php @@ -0,0 +1,76 @@ +validate(['name' => 'required|string']); + return Role::create($request->all()); + } + + /** + * Display the specified resource. + */ + public function show(Role $role) + { + // + return $role; + + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(Role $role) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, Role $role) + { + // + $request->validate(['name' => 'required|string']); + $role->update($request->all()); + return $role; + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(Role $role) + { + // + $role->delete(); + return response()->noContent(); + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php new file mode 100644 index 0000000..eac0c39 --- /dev/null +++ b/app/Http/Controllers/UserController.php @@ -0,0 +1,59 @@ +get(); + } + + public function store(Request $request) + { + $request->validate([ + 'name' => 'required|string', + 'email' => 'required|email|unique:users', + 'password' => 'required|string|min:8', + 'role_id' => 'required|exists:roles,id', + 'department_id' => 'nullable|exists:departments,id', + ]); + + $user = User::create([ + 'name' => $request->name, + 'email' => $request->email, + 'password' => bcrypt($request->password), + 'role_id' => $request->role_id, + 'department_id' => $request->department_id, + ]); + + return $user; + } + + public function show(User $user) + { + return $user->load(['role', 'department']); + } + + public function update(Request $request, User $user) + { + $request->validate([ + 'name' => 'sometimes|required|string', + 'email' => 'sometimes|required|email|unique:users,email,' . $user->id, + 'password' => 'nullable|string|min:8', + 'role_id' => 'sometimes|required|exists:roles,id', + 'department_id' => 'nullable|exists:departments,id', + ]); + + $user->update(array_filter($request->all())); + return $user->load(['role', 'department']); + } + + public function destroy(User $user) + { + $user->delete(); + return response()->noContent(); + } +} diff --git a/app/Models/Department.php b/app/Models/Department.php new file mode 100644 index 0000000..15da0be --- /dev/null +++ b/app/Models/Department.php @@ -0,0 +1,18 @@ +hasMany(User::class); + } +} diff --git a/app/Models/Role.php b/app/Models/Role.php new file mode 100644 index 0000000..e3831a9 --- /dev/null +++ b/app/Models/Role.php @@ -0,0 +1,18 @@ +hasMany(User::class); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 749c7b7..e6a7a5a 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -21,6 +21,8 @@ class User extends Authenticatable 'name', 'email', 'password', + 'role_id', + 'department_id', ]; /** @@ -45,4 +47,15 @@ class User extends Authenticatable 'password' => 'hashed', ]; } + + + public function role() + { + return $this->belongsTo(Role::class); + } + + public function department() + { + return $this->belongsTo(Department::class); + } } diff --git a/routes/web.php b/routes/web.php index 74bb7ca..8f9c46f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,6 +3,12 @@ use App\Http\Controllers\ProfileController; use Illuminate\Support\Facades\Route; +use App\Http\Controllers\RoleController; +use App\Http\Controllers\DepartmentController; +use App\Http\Controllers\UserController; + + + Route::get('/', function () { return view('welcome'); }); @@ -17,4 +23,10 @@ Route::middleware('auth')->group(function () { Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); }); +Route::apiResources([ + 'roles' => RoleController::class, + 'departments' => DepartmentController::class, + 'users' => UserController::class, +]); + require __DIR__.'/auth.php';