From b9e522fdd2b5ca79d0a28ba674277356a0c63b04 Mon Sep 17 00:00:00 2001 From: whywdd Date: Sat, 22 Mar 2025 23:05:55 +0700 Subject: [PATCH] update tgl 22 maret --- app/Http/Controllers/AuthController.php | 19 ++ app/Http/Controllers/LoginController.php | 32 +++- app/Http/Controllers/UserController.php | 129 ++++++++++++- app/Models/Login.php | 9 + app/Models/User.php | 29 +-- ...2024_03_21_000000_create_logins_table.php} | 15 +- ...24_03_21_000000_create_penggunas_table.php | 32 ++++ ...25_03_22_125304_create_penggunas_table.php | 32 ++++ database/seeders/DatabaseSeeder.php | 4 + database/seeders/PenggunaSeeder.php | 26 +++ resources/views/Core/Sidebar.blade.php | 11 +- resources/views/EditAkun.blade.php | 175 +++++++++++++++++ resources/views/Login.Blade.php | 30 ++- resources/views/TambahAkun.blade.php | 177 ++++++++++++++++++ resources/views/User.blade.php | 83 ++------ routes/web.php | 67 +++---- 16 files changed, 730 insertions(+), 140 deletions(-) create mode 100644 app/Http/Controllers/AuthController.php rename database/migrations/{2025_02_23_180757_create_logins_table.php => 2024_03_21_000000_create_logins_table.php} (71%) create mode 100644 database/migrations/2024_03_21_000000_create_penggunas_table.php create mode 100644 database/migrations/2025_03_22_125304_create_penggunas_table.php create mode 100644 database/seeders/PenggunaSeeder.php create mode 100644 resources/views/EditAkun.blade.php create mode 100644 resources/views/TambahAkun.blade.php diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php new file mode 100644 index 0000000..4ed48d7 --- /dev/null +++ b/app/Http/Controllers/AuthController.php @@ -0,0 +1,19 @@ +route('login') + ->with('success', 'Anda berhasil logout.'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/LoginController.php b/app/Http/Controllers/LoginController.php index a6689e0..73d252a 100644 --- a/app/Http/Controllers/LoginController.php +++ b/app/Http/Controllers/LoginController.php @@ -3,11 +3,41 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; +use App\Models\Login; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Session; +use Illuminate\Support\Facades\Auth; class LoginController extends Controller { public function index() { - return view('Login'); + if (Auth::check()) { + return redirect()->route('home'); + } + return view('login'); + } + + public function authenticate(Request $request) + { + $credentials = $request->validate([ + 'email' => ['required', 'email'], + 'password' => ['required'], + ]); + + if (Auth::attempt($credentials)) { + $request->session()->regenerate(); + return redirect()->intended(route('home')); + } + + return back()->withErrors([ + 'email' => 'Email atau password salah.', + ])->withInput($request->only('email')); + } + + public function logout() + { + Session::flush(); + return redirect()->route('login'); } } \ No newline at end of file diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index e34138b..2c1229e 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -3,11 +3,138 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; +use App\Models\User; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Validator; +use Illuminate\Validation\Rules\Password; class UserController extends Controller { public function index() { - return view('User'); + $users = User::all(); + return view('User', compact('users')); + } + + public function getData() + { + $users = User::all(); + return response()->json($users); + } + + public function create() + { + return view('TambahAkun'); + } + + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'nama' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:penggunas'], + 'password' => ['required', Password::min(8)->mixedCase()->numbers()], + 'tipe_pengguna' => ['required', 'in:owner,karyawan'] + ], [ + 'nama.required' => 'Nama harus diisi', + 'nama.max' => 'Nama maksimal 255 karakter', + 'email.required' => 'Email harus diisi', + 'email.email' => 'Format email tidak valid', + 'email.unique' => 'Email sudah terdaftar', + 'password.required' => 'Password harus diisi', + 'password.min' => 'Password minimal 8 karakter', + 'tipe_pengguna.required' => 'Tipe pengguna harus dipilih', + 'tipe_pengguna.in' => 'Tipe pengguna tidak valid' + ]); + + if ($validator->fails()) { + return redirect()->back() + ->withErrors($validator) + ->withInput(); + } + + try { + User::create([ + 'nama' => $request->nama, + 'email' => $request->email, + 'password' => Hash::make($request->password), + 'tipe_pengguna' => $request->tipe_pengguna + ]); + + return redirect()->route('User.index') + ->with('success', 'Akun berhasil ditambahkan!'); + } catch (\Exception $e) { + return redirect()->back() + ->with('error', 'Gagal menambahkan akun. ' . $e->getMessage()) + ->withInput(); + } + } + + public function edit($id) + { + $user = User::findOrFail($id); + return view('EditAkun', compact('user')); + } + + public function update(Request $request, $id) + { + $validator = Validator::make($request->all(), [ + 'nama' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:penggunas,email,'.$id], + 'password' => ['nullable', Password::min(8)->mixedCase()->numbers()], + 'tipe_pengguna' => ['required', 'in:owner,karyawan'] + ], [ + 'nama.required' => 'Nama harus diisi', + 'nama.max' => 'Nama maksimal 255 karakter', + 'email.required' => 'Email harus diisi', + 'email.email' => 'Format email tidak valid', + 'email.unique' => 'Email sudah terdaftar', + 'password.min' => 'Password minimal 8 karakter', + 'tipe_pengguna.required' => 'Tipe pengguna harus dipilih', + 'tipe_pengguna.in' => 'Tipe pengguna tidak valid' + ]); + + if ($validator->fails()) { + return redirect()->back() + ->withErrors($validator) + ->withInput(); + } + + try { + $user = User::findOrFail($id); + + $data = [ + 'nama' => $request->nama, + 'email' => $request->email, + 'tipe_pengguna' => $request->tipe_pengguna + ]; + + // Update password hanya jika diisi + if ($request->filled('password')) { + $data['password'] = Hash::make($request->password); + } + + $user->update($data); + + return redirect()->route('User.index') + ->with('success', 'Akun berhasil diperbarui!'); + } catch (\Exception $e) { + return redirect()->back() + ->with('error', 'Gagal memperbarui akun. ' . $e->getMessage()) + ->withInput(); + } + } + + public function destroy($id) + { + try { + $user = User::findOrFail($id); + $user->delete(); + + return redirect()->route('User.index') + ->with('success', 'Akun berhasil dihapus!'); + } catch (\Exception $e) { + return redirect()->back() + ->with('error', 'Gagal menghapus akun. ' . $e->getMessage()); + } } } \ No newline at end of file diff --git a/app/Models/Login.php b/app/Models/Login.php index 6628f9a..c66d6dd 100644 --- a/app/Models/Login.php +++ b/app/Models/Login.php @@ -8,4 +8,13 @@ class Login extends Model { use HasFactory; + + protected $table = 'penggunas'; + + protected $fillable = [ + 'nama', + 'email', + 'password', + 'tipe_pengguna' + ]; } diff --git a/app/Models/User.php b/app/Models/User.php index 4d7f70f..749996c 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,44 +2,29 @@ namespace App\Models; -// use Illuminate\Contracts\Auth\MustVerifyEmail; -use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; -use Laravel\Sanctum\HasApiTokens; +use Illuminate\Database\Eloquent\Factories\HasFactory; class User extends Authenticatable { - use HasApiTokens, HasFactory, Notifiable; - - /** - * The attributes that are mass assignable. - * - * @var array - */ + use HasFactory, Notifiable; + + protected $table = 'penggunas'; + protected $fillable = [ - 'name', + 'nama', 'email', 'password', + 'tipe_pengguna' ]; - /** - * The attributes that should be hidden for serialization. - * - * @var array - */ protected $hidden = [ 'password', 'remember_token', ]; - /** - * The attributes that should be cast. - * - * @var array - */ protected $casts = [ 'email_verified_at' => 'datetime', - 'password' => 'hashed', ]; } diff --git a/database/migrations/2025_02_23_180757_create_logins_table.php b/database/migrations/2024_03_21_000000_create_logins_table.php similarity index 71% rename from database/migrations/2025_02_23_180757_create_logins_table.php rename to database/migrations/2024_03_21_000000_create_logins_table.php index 61b03e9..0958ac3 100644 --- a/database/migrations/2025_02_23_180757_create_logins_table.php +++ b/database/migrations/2024_03_21_000000_create_logins_table.php @@ -6,26 +6,21 @@ return new class extends Migration { - /** - * Run the migrations. - */ - public function up(): void + public function up() { Schema::create('logins', function (Blueprint $table) { $table->id(); $table->string('nama'); $table->string('email')->unique(); $table->string('password'); - $table->string('role'); + $table->enum('role', ['admin', 'user'])->default('user'); + $table->rememberToken(); $table->timestamps(); }); } - /** - * Reverse the migrations. - */ - public function down(): void + public function down() { Schema::dropIfExists('logins'); } -}; +}; \ No newline at end of file diff --git a/database/migrations/2024_03_21_000000_create_penggunas_table.php b/database/migrations/2024_03_21_000000_create_penggunas_table.php new file mode 100644 index 0000000..25e4c08 --- /dev/null +++ b/database/migrations/2024_03_21_000000_create_penggunas_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('nama'); + $table->string('email')->unique(); + $table->string('password'); + $table->enum('tipe_pengguna', ['owner', 'karyawan'])->default('karyawan'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('penggunas'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_03_22_125304_create_penggunas_table.php b/database/migrations/2025_03_22_125304_create_penggunas_table.php new file mode 100644 index 0000000..0ff972b --- /dev/null +++ b/database/migrations/2025_03_22_125304_create_penggunas_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('nama'); + $table->string('email')->unique(); + $table->string('password'); + $table->enum('tipe_pengguna', ['owner', 'karyawan'])->default('karyawan'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('penggunas'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a9f4519..a976b3a 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -18,5 +18,9 @@ public function run(): void // 'name' => 'Test User', // 'email' => 'test@example.com', // ]); + + $this->call([ + PenggunaSeeder::class, + ]); } } diff --git a/database/seeders/PenggunaSeeder.php b/database/seeders/PenggunaSeeder.php new file mode 100644 index 0000000..af15469 --- /dev/null +++ b/database/seeders/PenggunaSeeder.php @@ -0,0 +1,26 @@ +insert([ + 'nama' => 'Budi', + 'email' => 'budivespaendut@gmail.com', + 'password' => Hash::make('budi1234'), + 'tipe_pengguna' => 'owner', + 'created_at' => now(), + 'updated_at' => now(), + ]); + } +} diff --git a/resources/views/Core/Sidebar.blade.php b/resources/views/Core/Sidebar.blade.php index 89f55ea..808055d 100644 --- a/resources/views/Core/Sidebar.blade.php +++ b/resources/views/Core/Sidebar.blade.php @@ -151,10 +151,13 @@
  • - - - Logout - +
    + @csrf + +
  • diff --git a/resources/views/EditAkun.blade.php b/resources/views/EditAkun.blade.php new file mode 100644 index 0000000..6afc169 --- /dev/null +++ b/resources/views/EditAkun.blade.php @@ -0,0 +1,175 @@ +@extends('Core.Sidebar') + +@section('content') +
    +
    +

    Edit Akun

    +

    Form untuk mengubah data akun pengguna

    +
    + +
    + @if ($errors->any()) +
    + Oops! Ada beberapa masalah: +
      + @foreach ($errors->all() as $error) +
    • {{ $error }}
    • + @endforeach +
    +
    + @endif + +
    + @csrf + @method('PUT') + + +
    + + + @error('nama') +

    {{ $message }}

    + @enderror +
    + + +
    + + + @error('email') +

    {{ $message }}

    + @enderror +
    + + +
    + + +

    + Kosongkan jika tidak ingin mengubah password. Jika diisi, password harus minimal 8 karakter, mengandung huruf besar, huruf kecil, dan angka. +

    + @error('password') +

    {{ $message }}

    + @enderror +
    + + +
    + + + @error('tipe_pengguna') +

    {{ $message }}

    + @enderror +
    + + +
    + + +
    +
    +
    +
    + + + + + + + + +@endsection \ No newline at end of file diff --git a/resources/views/Login.Blade.php b/resources/views/Login.Blade.php index c7409e3..93bc89b 100644 --- a/resources/views/Login.Blade.php +++ b/resources/views/Login.Blade.php @@ -14,23 +14,39 @@

    Login

    -
    + @if(session('error')) + + @endif + + @csrf
    -
    - +
    - +
    Or Sign Up Using
    diff --git a/resources/views/TambahAkun.blade.php b/resources/views/TambahAkun.blade.php new file mode 100644 index 0000000..12f0ab6 --- /dev/null +++ b/resources/views/TambahAkun.blade.php @@ -0,0 +1,177 @@ +@extends('Core.Sidebar') + +@section('content') +
    + +
    +

    Tambah Akun

    +

    Formulir untuk menambahkan akun pengguna baru

    +
    + +
    + @if ($errors->any()) +
    + Oops! Ada beberapa masalah: +
      + @foreach ($errors->all() as $error) +
    • {{ $error }}
    • + @endforeach +
    +
    + @endif + +
    + @csrf + + +
    + + + @error('nama') +

    {{ $message }}

    + @enderror +
    + + +
    + + + @error('email') +

    {{ $message }}

    + @enderror +
    + + +
    + + +

    Password harus minimal 8 karakter, mengandung huruf besar, huruf kecil, dan angka

    + @error('password') +

    {{ $message }}

    + @enderror +
    + + +
    + + + @error('tipe_pengguna') +

    {{ $message }}

    + @enderror +
    + + +
    + + +
    +
    +
    +
    + + + + + + + + +@endsection \ No newline at end of file diff --git a/resources/views/User.blade.php b/resources/views/User.blade.php index 33b7d06..c1d9fb5 100644 --- a/resources/views/User.blade.php +++ b/resources/views/User.blade.php @@ -155,6 +155,13 @@
    +
    + + +
    @@ -165,6 +172,7 @@ No Nama Email + Tipe Pengguna Aksi @@ -188,60 +196,16 @@ function loadUsers() { fetch('/users/data') .then(response => response.json()) .then(data => { - console.log("Data dari API:", data); const userTableBody = document.getElementById('userTableBody'); userTableBody.innerHTML = ''; - // Menambahkan data pengguna baru - userTableBody.innerHTML += ` - - 1 - Widodo - widodo@gmail.com - - - - - - - 2 - Siti - siti@gmail.com - - - - - - - 3 - Budi - budi@gmail.com - - - - - - `; - - // Menambahkan data pengguna dari API data.forEach((user, index) => { userTableBody.innerHTML += ` - ${index + 4} - ${user.name} + ${index + 1} + ${user.nama} ${user.email} + ${user.tipe_pengguna}