diff --git a/app/Http/Controllers/UsuarioController.php b/app/Http/Controllers/UsuarioController.php new file mode 100644 index 0000000..46c5367 --- /dev/null +++ b/app/Http/Controllers/UsuarioController.php @@ -0,0 +1,106 @@ +middleware('auth'); + } + + public function index() + { + $usuarios = User::all(); + + return view('usuarios.index', compact('usuarios')); + } + + public function create() + { + return view('usuarios.create'); + } + + public function store(Request $request) + { + $datos = $request->validate([ + 'name' => 'required|string|max:255', + 'email' => 'required|email|max:255|unique:users,email', + 'password' => 'required|string|min:8|confirmed', + ]); + + $usuario = new User(); + + $usuario->fill([ + 'name' => $datos['name'], + 'email' => $datos['email'], + 'password' => $datos['password'], + ]); + + $usuario->save(); + + return redirect()->route('usuarios.index') + ->with('mensaje-success', 'Usuario registrado correctamente'); + } + + public function show($id) + { + $usuario = User::findOrFail($id); + + return view('usuarios.show', compact('usuario')); + } + + public function edit($id) + { + $usuario = User::findOrFail($id); + + return view('usuarios.edit', compact('usuario')); + } + + public function update(Request $request, $id) + { + $usuario = User::findOrFail($id); + + $datos = $request->validate([ + 'name' => 'required|string|max:255', + 'email' => [ + 'required', + 'email', + 'max:255', + Rule::unique('users', 'email')->ignore($usuario->id), + ], + 'password' => 'nullable|string|min:8|confirmed', + ]); + + $usuario->name = $datos['name']; + $usuario->email = $datos['email']; + + if (!empty($datos['password'])) { + $usuario->password = $datos['password']; + } + + $usuario->update(); + + return redirect()->route('usuarios.index') + ->with('mensaje-success', 'Usuario actualizado correctamente'); + } + + public function destroy($id) + { + $usuario = User::findOrFail($id); + + if ($usuario->id == auth()->id()) { + return redirect()->route('usuarios.index') + ->with('mensaje-error', 'No puede eliminar su propio usuario'); + } + + $usuario->delete(); + + return redirect()->route('usuarios.index') + ->with('mensaje-success', 'Usuario eliminado correctamente'); + } +} \ No newline at end of file diff --git a/resources/views/usuarios/create.blade.php b/resources/views/usuarios/create.blade.php new file mode 100644 index 0000000..f09238d --- /dev/null +++ b/resources/views/usuarios/create.blade.php @@ -0,0 +1,97 @@ +@extends('layouts.admin') + +@section('contenido') + +
+
+

Nuevo Usuario

+
+
+ +
+
+ @include('compartido.mensajes') + @include('compartido.errores') +
+
+ +
+ +
+ @csrf + +
+ +
+ + + +
+ +
+ + + +
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ +
+ +@endsection \ No newline at end of file diff --git a/resources/views/usuarios/edit.blade.php b/resources/views/usuarios/edit.blade.php new file mode 100644 index 0000000..f3e2197 --- /dev/null +++ b/resources/views/usuarios/edit.blade.php @@ -0,0 +1,104 @@ +@extends('layouts.admin') + +@section('contenido') + +
+
+

Editar Usuario

+
+
+ +
+
+ @include('compartido.mensajes') + @include('compartido.errores') +
+
+ +
+ +
+ + @csrf + @method('PUT') + +
+ +
+ + + +
+ +
+ + + +
+ +
+ +
+ +
+ + + +
+ +
+ + + +
+ +
+ +

+ Deje los campos de contraseña vacíos si no desea modificarla. +

+ +
+ +
+ +
+ +
+ + + +
+ +
+ +@endsection \ No newline at end of file diff --git a/resources/views/usuarios/index.blade.php b/resources/views/usuarios/index.blade.php new file mode 100644 index 0000000..2aa2492 --- /dev/null +++ b/resources/views/usuarios/index.blade.php @@ -0,0 +1,100 @@ +@extends('layouts.admin') + +@section('contenido') + +
+
+

Listado de Usuarios

+
+
+ +
+
+ + Nuevo + +
+
+ +
+ +
+
+ + @include('compartido.mensajes') + @include('compartido.errores') + +
+ + + + + + + + + + + + + + @foreach($usuarios as $usuario) + + + + + + + + @endforeach + + +
IdNombreEmailAcciones
{{ $usuario->id }}{{ $usuario->name }}{{ $usuario->email }} + + + + + + + + + +
+ + @csrf + @method('DELETE') + + + +
+ +
+ +
+
+
+ +@endsection + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/usuarios/show.blade.php b/resources/views/usuarios/show.blade.php new file mode 100644 index 0000000..21ec872 --- /dev/null +++ b/resources/views/usuarios/show.blade.php @@ -0,0 +1,56 @@ +@extends('layouts.admin') + +@section('contenido') + +
+
+ +

Detalle del Usuario

+ +
+
+ +
+ +
+ ID: + {{ $usuario->id }} +
+ +
+ Nombre: + {{ $usuario->name }} +
+ +
+ Correo electrónico: + {{ $usuario->email }} +
+ +
+ +
+
+ +
+ + + + + +
+ +
+
+ +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index ff44ede..531687a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,6 +3,8 @@ use Illuminate\Support\Facades\Route; use App\Http\Controllers\CategoriasController; use App\Http\Controllers\ProductoController; +use App\Http\Controllers\UsuarioController; + /* |-------------------------------------------------------------------------- | Web Routes @@ -32,4 +34,6 @@ Route::resource('categorias', CategoriasController::class)->middleware('auth'); Route::resource('productos', ProductoController::class); Route::put('categorias/restaurar/{categoria}', [CategoriasController::class, 'restaurar'])->name('categorias.restaurar')->middleware('auth'); Auth::routes(); +Route::resource('usuarios', UsuarioController::class) + ->middleware('auth'); Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');