whereHas('employee') ->with([ 'userProfile' => fn ($q) => $q->select('id', 'user_id', 'full_name', 'phone_number'), 'employee' => fn ($q) => $q->select('id', 'user_id', 'join_date', 'employment_status', 'base_salary'), ]) ->latest() ->get(); } public function getById(int $id): User { return User::with(['userProfile', 'employee'])->findOrFail($id); } public function create(array $data): User { return DB::transaction(function () use ($data) { $user = User::create([ 'email' => $data['email'], 'username' => $data['username'], 'password' => config('auth.password_default'), 'is_active' => true, ]); $user->userProfile()->create([ 'full_name' => $data['full_name'], 'phone_number' => $data['phone_number'] ?? null, 'gender' => $data['gender'] ?? null, 'birth_date' => $data['birth_date'] ?? null, 'address' => $data['address'] ?? null, ]); $user->employee()->create([ 'join_date' => $data['join_date'], 'resign_date' => $data['resign_date'] ?? null, 'employment_status' => $data['employment_status'], 'base_salary' => $data['base_salary'], ]); return $user; }); } public function update(User $user, array $data): User { DB::transaction(function () use ($user, $data) { $user->update([ 'email' => $data['email'], 'username' => $data['username'], ]); $user->userProfile()->updateOrCreate([], [ 'full_name' => $data['full_name'], 'phone_number' => $data['phone_number'] ?? null, 'gender' => $data['gender'] ?? null, 'birth_date' => $data['birth_date'] ?? null, 'address' => $data['address'] ?? null, ]); $user->employee()->updateOrCreate([], [ 'join_date' => $data['join_date'], 'resign_date' => $data['resign_date'] ?? null, 'employment_status' => $data['employment_status'], 'base_salary' => $data['base_salary'], ]); }); return $user->fresh(['userProfile', 'employee']); } public function delete(User $user): bool { return DB::transaction(function () use ($user) { $user->employee()->delete(); $user->userProfile()->delete(); return $user->delete(); }); } public function toggleActive(User $user): User { $user->update(['is_active' => ! $user->is_active]); return $user; } public function resetPassword(User $user): User { $defaultPassword = config('auth.password_default'); $user->update(['password' => $defaultPassword]); return $user; } }