resolveUnitId($user); return Student::where('unit_id', $unitId) ->orderBy('created_at', 'desc') ->get(); } public function findById(int $id): ?Student { return Student::find($id); } public function create(User $user, array $data): Student { $unitId = $this->resolveUnitId($user); $data = $this->handlePhoto($data); return Student::create(array_merge($data, ['unit_id' => $unitId])); } public function update(int $id, array $data): ?Student { $model = $this->findById($id); if (!$model) { return null; } $data = $this->handlePhoto($data, $model->photo_url); $model->update($data); return $model->fresh(); } public function delete(int $id): bool { $model = $this->findById($id); if (!$model) { return false; } if ($model->photo_url) { Storage::delete($model->photo_url); } return $model->delete(); } private function handlePhoto(array $data, ?string $oldPhotoPath = null): array { if (!isset($data['avatar'])) { return $data; } if ($data['avatar'] instanceof UploadedFile) { if ($oldPhotoPath) { Storage::delete($oldPhotoPath); } $data['photo_url'] = $data['avatar']->store('students/photos'); } elseif (is_null($data['avatar'])) { if ($oldPhotoPath) { Storage::delete($oldPhotoPath); } $data['photo_url'] = null; } unset($data['avatar']); return $data; } private function resolveUnitId(User $user): int { $unit = $user->units()->first(); abort_if(!$unit, 403, 'Usuário sem unidade associada.'); return $unit->id; } }