orderBy('name') ->get(); } public function getAllPaginated(array $filters = [], int $perPage = 10): LengthAwarePaginator { $query = UserDependent::with(['responsibleUser.position', 'responsibleUser.sector']) ->orderBy('created_at', 'asc'); if (!empty($filters['status'])) { $query->where('status', $filters['status']); } if (!empty($filters['search'])) { $term = '%' . mb_strtolower($filters['search']) . '%'; $query->where(function ($q) use ($term) { $q->whereRaw('UNACCENT(LOWER(name)) LIKE UNACCENT(?)', [$term]) ->orWhereHas('responsibleUser', function ($q) use ($term) { $q->whereRaw('UNACCENT(LOWER(name)) LIKE UNACCENT(?)', [$term]); }); }); } return $query->paginate($perPage); } public function findById(int $id): ?UserDependent { return UserDependent::find($id); } public function create(array $data): UserDependent { $data['status'] = UserDependentStatusEnum::PENDING->value; return UserDependent::create($data); } public function approve(int $id): ?UserDependent { $model = $this->findById($id); if (!$model) { return null; } $model->update(['status' => UserDependentStatusEnum::APPROVED]); return $model->fresh(); } public function refuse(int $id): ?UserDependent { $model = $this->findById($id); if (!$model) { return null; } $model->update(['status' => UserDependentStatusEnum::REFUSED]); return $model->fresh(); } public function update(int $id, array $data): ?UserDependent { $model = $this->findById($id); if (!$model) { return null; } $model->update($data); return $model->fresh(); } public function delete(int $id): bool { $model = $this->findById($id); if (!$model) { return false; } return $model->delete(); } }