from models.user_project import UserProjectRoles from projects.services.project_target_items_maper import ProjectTargetItemsMapper from global_search.providers.abstract_search_provider import AbstractSearchProvider from services.recent_search.schemas import ProjectSearchModel from shared.schemas import RoleSchema class ProjectsSearchProvider(AbstractSearchProvider): target_items_mapper: ProjectTargetItemsMapper = ProjectTargetItemsMapper() def search(self): projects, count = self.repository.search_projects(self.query, self.limit, self.offset) projects = list(map(self.__map_entity, projects)) if projects is not None else [] return projects, count def __map_entity(self, project): targets = self.target_items_mapper.map_project_target_items_from_model(project.Project.not_deleted_items()) return ProjectSearchModel( id=project.Project.id, name=project.Project.display_name, targets=targets, startDate=project.Project.start_date, isConfidential=project.Project.is_confidential, isClaimed=project.Project.is_claimed, userRoles=[RoleSchema(UserProjectRoles(role)) for role in project.user_roles], editDate=project.Project.last_edit_at )