package com.company.projectmanagement.app; import com.company.projectmanagement.entity.Project; import com.company.projectmanagement.entity.ProjectStats; import com.company.projectmanagement.entity.Task; import io.jmix.core.DataManager; import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; @Primary @Profile("dev") @Component public class ProjectStatsServiceDev implements ProjectStatsService { private final DataManager dataManager; public ProjectStatsServiceDev(DataManager dataManager) { this.dataManager = dataManager; } @Override public List fetchProjectStatistics(){ List projects = dataManager.load(Project.class).all().list(); List projectStats = projects.stream().map(project -> { ProjectStats stats = dataManager.create(ProjectStats.class); stats.setId(project.getId()); stats.setProjectName(project.getName()); stats.setTasksCount(project.getTasks().size()); Integer plannedEfforts = project.getTasks().stream().map(Task::getEstimation).reduce(0, Integer::sum); stats.setPlannedEfforts(plannedEfforts); stats.setActualEfforts(getActualEfforts(project.getId())); return stats; }).collect(Collectors.toList()); return projectStats; } public Integer getActualEfforts(UUID projectId) { return dataManager.loadValue("select SUM(te.timeSpent) from TimeEntry te " + "where te.task.project.id = :projectId", Integer.class).parameter("projectId", projectId).one(); } }