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 { $franchiseeData = [ 'name' => $data['fantasy_name'], 'cnpj' => $data['cnpj'], 'cpf' => null, 'rg' => null, 'phone' => $data['cell_number'] ?? null, 'cellphone_number' => $data['phone_number'] ?? null, 'street' => $data['street'], 'address_number' => $data['address_number'] ?? null, 'neighborhood' => $data['neighborhood'], 'postal_code' => $data['postal_code'], 'city_id' => $data['city_id'], 'state_id' => $data['state_id'], 'birth_date' => null, ]; $data = $this->handleAvatar($data); $unit = Unit::create($data); $franchisee = Franchisee::create($franchiseeData); FranchiseeUnit::create([ 'franchisee_id' => $franchisee->id, 'unit_id' => $unit->id, ]); return $unit; } public function update(int $id, array $data): ?Unit { $model = $this->findById($id); if (!$model) { return null; } unset($data['franchisee']); $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; } }