orderBy('fantasy_name') ->get(); } public function getSelectList(): \Illuminate\Support\Collection { return Unit::orderBy('fantasy_name') ->get(['id', 'fantasy_name']); } public function findById(int $id): ?Unit { return Unit::with(['city', 'state'])->find($id); } public function create(array $data): Unit { $partners = $data['partners'] ?? []; $contracts = $data['contracts'] ?? []; unset($data['partners'], $data['contracts']); $data = $this->handleAvatar($data); $unit = Unit::create($data); foreach ($partners as $partnerData) { UnitPartner::create(array_merge($partnerData, ['unit_id' => $unit->id])); } foreach ($contracts as $file) { UnitContract::create([ 'unit_id' => $unit->id, 'name' => $file->getClientOriginalName(), 'file_url' => $file->store('unit-contracts'), ]); } return $unit; } public function update(int $id, array $data): ?Unit { $model = $this->findById($id); if (!$model) { return null; } $data = $this->handleAvatar($data, $model->avatar_url); $model->update($data); return $model->fresh(['city', 'state']); } public function delete(int $id): bool { $model = $this->findById($id); if (!$model) { return false; } if ($model->avatar_url) { Storage::delete($model->avatar_url); } return $model->delete(); } private function handleAvatar(array $data, ?string $oldAvatarPath = null): array { if (!isset($data['avatar'])) { return $data; } if ($data['avatar'] instanceof UploadedFile) { if ($oldAvatarPath) { Storage::delete($oldAvatarPath); } $data['avatar_url'] = $data['avatar']->store('units/avatars'); } elseif (is_null($data['avatar'])) { if ($oldAvatarPath) { Storage::delete($oldAvatarPath); } $data['avatar_url'] = null; } unset($data['avatar']); return $data; } }