$validated */ public function update(array $validated, User $user): void { try { DB::transaction(function () use ($user, $validated): void { $user->update([ 'email' => $validated['email'], 'username' => $validated['username'], ]); /** @var UserProfile $profile */ $profile = $user->profile()->updateOrCreate( ['user_id' => $user->id], [ 'full_name' => $validated['full_name'], 'phone_number' => $validated['phone_number'] ?? null, 'gender' => $validated['gender'] ?? null, 'birth_date' => $validated['birth_date'] ?? null, 'address' => $validated['address'] ?? null, ], ); $newFiles = ! empty($validated['profile_photo']) ? [$validated['profile_photo']] : []; $removeIds = $validated['remove_profile_photo_ids'] ?? []; $this->mediaService->syncCollection($profile, 'profile_photo', $newFiles, $removeIds, 1); }); } catch (ValidationException $e) { throw $e; } catch (\Throwable $e) { Log::error('Gagal memperbarui profil: '.$e->getMessage(), [ 'trace' => $e->getTraceAsString(), ]); throw ValidationException::withMessages([ 'system' => 'Terjadi kesalahan pada server. Silakan laporkan masalah ini ke pihak terkait.', ]); } } /** * Update user password. */ public function updatePassword(User $user, string $password): void { $user->update([ 'password' => Hash::make($password), ]); } }