From e316d064eff13202bd14e662574c5ac24ce98108 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Fri, 17 Jul 2026 11:19:09 +0700 Subject: [PATCH] auth dan user profile --- .../Web/Konfigurasi/AuthController.php | 11 ++- .../Web/Konfigurasi/UserController.php | 6 +- .../Web/Produktivitas/ProfileController.php | 41 +++++++++-- public/assets/js/pages-auth.js | 16 ++--- resources/views/auth/layout.blade.php | 11 ++- resources/views/auth/login.blade.php | 41 +++++++++++ resources/views/auth/register.blade.php | 69 ++++++++++++++++++- .../views/konfigurasi/profile/index.blade.php | 8 ++- resources/views/layout/main.blade.php | 1 + resources/views/master/profile/edit.blade.php | 2 +- routes/web.php | 10 +-- 11 files changed, 188 insertions(+), 28 deletions(-) diff --git a/app/Http/Controllers/Web/Konfigurasi/AuthController.php b/app/Http/Controllers/Web/Konfigurasi/AuthController.php index 480dae0..6bae057 100644 --- a/app/Http/Controllers/Web/Konfigurasi/AuthController.php +++ b/app/Http/Controllers/Web/Konfigurasi/AuthController.php @@ -28,9 +28,15 @@ class AuthController extends Controller public function createAccount(Request $request) { $credentials = $request->validate([ - 'username' => 'required|string|max:255|unique:users,username', + 'username' => 'required|string|min:6|max:255|unique:users,username', 'email' => 'required|string|email|max:255|unique:users,email', 'password' => 'required|string|min:8|confirmed', + ], [ + 'username.unique' => 'Nama pengguna sudah digunakan.', + 'username.min' => 'Nama pengguna minimal 6 karakter.', + 'email.unique' => 'Email sudah digunakan.', + 'password.confirmed' => 'Konfirmasi password tidak cocok.', + 'password.min' => 'Password minimal 8 karakter.', ]); $user = User::create([ @@ -89,6 +95,9 @@ class AuthController extends Controller $request->validate([ 'email_username' => 'required|string', 'password' => 'required|string', + ], [ + 'email_username.required' => 'Email atau username harus diisi.', + 'password.required' => 'Password harus diisi.', ]); $login = $request->input('email_username'); diff --git a/app/Http/Controllers/Web/Konfigurasi/UserController.php b/app/Http/Controllers/Web/Konfigurasi/UserController.php index 68cc751..4931772 100644 --- a/app/Http/Controllers/Web/Konfigurasi/UserController.php +++ b/app/Http/Controllers/Web/Konfigurasi/UserController.php @@ -99,18 +99,20 @@ class UserController extends Controller public function store(Request $request) { $validator = Validator::make($request->all(), [ - 'username' => ['required', 'string', 'max:255', 'unique:users,username'], + 'username' => ['required', 'string', 'max:255', 'min:6', 'unique:users,username'], 'nama' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'], 'password' => ['required', 'string', 'min:8', 'confirmed'], 'role' => ['required', 'string'], 'telepon' => ['required', 'max:13'], - 'desa_kelurahan_id' => ['required'], + 'desa_kelurahan_id' => ['nullable', 'exists:desa_kelurahan,id'], 'ktp' => ['nullable', 'min:16', 'max:16'], 'kk' => ['nullable', 'min:16', 'max:16'], 'file_ktp' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,pdf,png', 'max:2048'], ], [ + 'username.unique' => 'Nama pengguna sudah digunakan.', + 'username.min' => 'Nama pengguna minimal 6 karakter.', 'password.confirmed' => 'Konfirmasi password tidak cocok!', 'password.min' => 'Password minimal 8 karakter!', 'email.unique' => 'Email sudah terdaftar.', diff --git a/app/Http/Controllers/Web/Produktivitas/ProfileController.php b/app/Http/Controllers/Web/Produktivitas/ProfileController.php index f2ffb46..b52f6de 100644 --- a/app/Http/Controllers/Web/Produktivitas/ProfileController.php +++ b/app/Http/Controllers/Web/Produktivitas/ProfileController.php @@ -64,12 +64,26 @@ class ProfileController extends Controller $validator = Validator::make($request->all(), [ 'nama' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255'], - 'telepon' => ['required', 'max:13'], - 'desa_kelurahan_id' => ['required'], + 'telepon' => ['nullable', 'max:13'], + 'desa_kelurahan_id' => ['nullable', 'exists:master_desa_kelurahan,id'], 'ktp' => ['nullable', 'min:16', 'max:16'], 'file_ktp' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], 'kk' => ['nullable', 'min:16', 'max:16'], 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], + ], [ + 'nama.required' => 'Nama wajib diisi.', + 'email.required' => 'Email wajib diisi.', + 'email.email' => 'Format email tidak sesuai.', + 'telepon.max' => 'Nomor telepon tidak sesuai.', + 'desa_kelurahan_id.exists' => 'Desa kelurahan tidak ditemukan.', + 'ktp.min' => 'KTP harus terdiri dari 16 digit.', + 'ktp.max' => 'KTP harus terdiri dari 16 digit.', + 'kk.min' => 'KK harus terdiri dari 16 digit.', + 'kk.max' => 'KK harus terdiri dari 16 digit.', + 'file_ktp.mimes' => 'Format file harus dalam bentuk JPEG, JPG, PNG, atau PDF.', + 'file_kk.mimes' => 'Format file harus dalam bentuk JPEG, JPG, PNG, atau PDF.', + 'file_ktp.max' => 'Ukuran file maksimal 2MB.', + 'file_kk.max' => 'Ukuran file maksimal 2MB.', ]); if ($validator->fails()) { @@ -143,12 +157,31 @@ class ProfileController extends Controller $validator = Validator::make($request->all(), [ 'nama' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255'], - 'telepon' => ['required', 'max:13'], - 'desa_kelurahan_id' => ['required'], + 'telepon' => ['nullable', 'max:13'], + 'desa_kelurahan_id' => ['nullable', 'exists:master_desa_kelurahan,id'], 'ktp' => ['nullable', 'min:16', 'max:16'], 'file_ktp' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], 'kk' => ['nullable', 'min:16', 'max:16'], 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], + ], [ + 'nama.required' => 'Nama harus diisi.', + 'nama.string' => 'Nama harus berupa string.', + 'nama.max' => 'Nama tidak boleh lebih dari 255 karakter.', + 'email.required' => 'Email harus diisi.', + 'email.email' => 'Email harus berupa alamat email yang valid.', + 'email.max' => 'Email tidak boleh lebih dari 255 karakter.', + 'telepon.max' => 'Nomor telepon tidak boleh lebih dari 13 karakter.', + 'desa_kelurahan_id.exists' => 'Desa kelurahan tidak ditemukan.', + 'ktp.min' => 'Nomor KTP harus terdiri dari 16 karakter.', + 'ktp.max' => 'Nomor KTP harus terdiri dari 16 karakter.', + 'kk.min' => 'Nomor KK harus terdiri dari 16 karakter.', + 'kk.max' => 'Nomor KK harus terdiri dari 16 karakter.', + 'file_ktp.file' => 'File harus berupa file.', + 'file_ktp.mimes' => 'File harus berupa file dengan ekstensi jpeg, jpg, png, atau pdf.', + 'file_ktp.max' => 'Ukuran file tidak boleh lebih dari 2MB.', + 'file_kk.file' => 'File harus berupa file.', + 'file_kk.mimes' => 'File harus berupa file dengan ekstensi jpeg, jpg, png, atau pdf.', + 'file_kk.max' => 'Ukuran file tidak boleh lebih dari 2MB.', ]); if ($validator->fails()) { diff --git a/public/assets/js/pages-auth.js b/public/assets/js/pages-auth.js index 5dda75a..ac218f8 100644 --- a/public/assets/js/pages-auth.js +++ b/public/assets/js/pages-auth.js @@ -14,21 +14,21 @@ document.addEventListener('DOMContentLoaded', function () { username: { validators: { notEmpty: { - message: 'Please enter username' + message: 'Silakan masukkan username' }, stringLength: { min: 6, - message: 'Username must be more than 6 characters' + message: 'Username harus terdiri dari minimal 6 karakter' } } }, email: { validators: { notEmpty: { - message: 'Please enter your email' + message: 'Silakan masukkan email Anda' }, emailAddress: { - message: 'Please enter a valid email address' + message: 'Silakan masukkan email yang valid' } } }, @@ -57,22 +57,22 @@ document.addEventListener('DOMContentLoaded', function () { 'confirm-password': { validators: { notEmpty: { - message: 'Please confirm password' + message: 'Silakan konfirmasi password Anda' }, identical: { compare: () => formAuthentication.querySelector('[name="password"]').value, - message: 'The password and its confirmation do not match' + message: 'Password tidak cocok dengan konfirmasi password' }, stringLength: { min: 6, - message: 'Password must be more than 6 characters' + message: 'Password harus terdiri dari minimal 6 karakter' } } }, terms: { validators: { notEmpty: { - message: 'Please agree to terms & conditions' + message: 'Silakan terima syarat dan ketentuan kami' } } } diff --git a/resources/views/auth/layout.blade.php b/resources/views/auth/layout.blade.php index a160a31..5cd55ff 100644 --- a/resources/views/auth/layout.blade.php +++ b/resources/views/auth/layout.blade.php @@ -111,15 +111,20 @@ - + + + + - + + + @stack('scripts') diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 40a1c69..27468cb 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -87,3 +87,44 @@ @endsection + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index cb2ed6d..e46bb62 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -113,7 +113,7 @@

-
+
@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/konfigurasi/profile/index.blade.php b/resources/views/konfigurasi/profile/index.blade.php index 5e1599f..8fd820d 100644 --- a/resources/views/konfigurasi/profile/index.blade.php +++ b/resources/views/konfigurasi/profile/index.blade.php @@ -106,6 +106,7 @@ Role: {{ $profile->role ?? 'N/A' }} + @if(auth()->user()->role === \App\Enums\Role::PETANI)
  • No KTP: {{ $profile->ktp ?? 'N/A' }} @@ -114,6 +115,7 @@ No KK: {{ $profile->kk ?? 'N/A' }}
  • + @endif
  • Alamat: {{ $alamatLengkap ?? 'N/A' }} @@ -268,16 +270,18 @@
    - +
    + @if($profile->role === \App\Enums\Role::PETANI->value)
    -
    +
    + @endif
    diff --git a/resources/views/layout/main.blade.php b/resources/views/layout/main.blade.php index 17e62d7..25c5a1e 100644 --- a/resources/views/layout/main.blade.php +++ b/resources/views/layout/main.blade.php @@ -80,6 +80,7 @@ + diff --git a/resources/views/master/profile/edit.blade.php b/resources/views/master/profile/edit.blade.php index 09eae9a..048249a 100644 --- a/resources/views/master/profile/edit.blade.php +++ b/resources/views/master/profile/edit.blade.php @@ -27,7 +27,7 @@
    - +
    diff --git a/routes/web.php b/routes/web.php index 5a23c34..c5683cb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -47,11 +47,11 @@ Route::middleware('auth') Route::get('/dashboard/petani', [App\Http\Controllers\Web\Dashboard\ProfilPetaniController::class, 'index'])->name('dashboard.petani'); - Route::get('/UserProfile', [App\Http\Controllers\Web\Konfigurasi\ProfileController::class, 'index'])->name('userProfile.index'); - Route::get('/UserProfile/security', [App\Http\Controllers\Web\Konfigurasi\ProfileController::class, 'security'])->name('userProfile.security'); - Route::get('/UserProfile/activities', [App\Http\Controllers\Web\Konfigurasi\ProfileController::class, 'activities'])->name('userProfile.activities'); - Route::patch('/UserProfile/password', [App\Http\Controllers\Web\Konfigurasi\ProfileController::class, 'updatePassword'])->name('userProfile.password.update'); - Route::post('/UserProfile/logout-devices', [App\Http\Controllers\Web\Konfigurasi\ProfileController::class, 'logoutDevices'])->name('userProfile.logoutDevices'); + Route::get('/user-profile', [App\Http\Controllers\Web\Konfigurasi\ProfileController::class, 'index'])->name('userProfile.index'); + Route::get('/user-profile/security', [App\Http\Controllers\Web\Konfigurasi\ProfileController::class, 'security'])->name('userProfile.security'); + Route::get('/user-profile/activities', [App\Http\Controllers\Web\Konfigurasi\ProfileController::class, 'activities'])->name('userProfile.activities'); + Route::patch('/user-profile/password', [App\Http\Controllers\Web\Konfigurasi\ProfileController::class, 'updatePassword'])->name('userProfile.password.update'); + Route::post('/user-profile/logout-devices', [App\Http\Controllers\Web\Konfigurasi\ProfileController::class, 'logoutDevices'])->name('userProfile.logoutDevices'); Route::get('/dashboard/summary', [App\Http\Controllers\Web\Dashboard\SummaryController::class, 'index'])->name('dashboard.summary'); Route::get('/resiliensi', [App\Http\Controllers\Web\Dashboard\ResiliensiController::class, 'index'])->name('dashboard.resiliensi');