dress/app/Http/Controllers/Admin/Master/UserController.php

138 lines
4.4 KiB
PHP

<?php
namespace App\Http\Controllers\Admin\Master;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Master\UserRequest;
use App\Models\User;
use App\Support\LogHelper;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Inertia\Inertia;
use Inertia\Response;
class UserController extends Controller
{
public function index(): Response
{
return Inertia::render('admin/master/user/index', [
'users' => User::with('profile')->latest()->get(),
'defaultPassword' => config('auth.password_default', 'password'),
]);
}
public function create(): Response
{
return Inertia::render('admin/master/user/create');
}
public function store(UserRequest $request): RedirectResponse
{
$validated = $request->validated();
try {
DB::transaction(function () use ($validated) {
$user = User::create([
'username' => $validated['username'],
'email' => $validated['email'],
'password' => Hash::make(config('auth.password_default')),
]);
$user->profile()->create([
'nik' => $validated['nik'],
'full_name' => $validated['full_name'],
'phone_number' => $validated['phone_number'],
'address' => $validated['address'],
'birth_place' => $validated['birth_place'],
'birth_date' => $validated['birth_date'],
'base_salary' => $validated['base_salary'],
]);
});
return redirect()->route('user.index')->with('success', 'Data berhasil disimpan');
} catch (\Throwable $e) {
LogHelper::logException($e, 'Failed to store user', [
'username' => $validated['username'],
'email' => $validated['email'],
]);
return redirect()
->back()
->withInput()
->with('error', 'Terjadi kesalahan saat menyimpan data');
}
}
public function edit(User $user): Response
{
$user->load('profile');
return Inertia::render('admin/master/user/edit', [
'user' => $user,
]);
}
public function update(UserRequest $request, User $user): RedirectResponse
{
$validated = $request->validated();
try {
DB::transaction(function () use ($user, $validated) {
$user->update([
'username' => $validated['username'],
'email' => $validated['email'],
]);
$user->profile()->update([
'nik' => $validated['nik'],
'full_name' => $validated['full_name'],
'phone_number' => $validated['phone_number'],
'address' => $validated['address'],
'birth_place' => $validated['birth_place'],
'birth_date' => $validated['birth_date'],
'base_salary' => $validated['base_salary'],
]);
});
return redirect()->route('user.index')->with('success', 'Data berhasil diperbarui');
} catch (\Throwable $e) {
LogHelper::logException($e, 'Failed to update user', [
'user_id' => $user->id,
'username' => $validated['username'],
]);
return redirect()
->back()
->withInput()
->with('error', 'Terjadi kesalahan saat memperbarui data');
}
}
public function resetPassword(User $user): RedirectResponse
{
$user->update([
'password' => Hash::make(config('auth.password_default', 'password')),
]);
return redirect()->back()->with('success', 'Password berhasil direset ke default');
}
public function destroy(User $user): RedirectResponse
{
$user->delete();
return redirect()->back()->with('success', 'Data berhasil dihapus');
}
public function bulkDestroy(Request $request): RedirectResponse
{
$ids = $request->input('ids');
User::whereIn('id', $ids)->delete();
return redirect()->back()->with('success', 'Data terpilih berhasil dihapus');
}
}