started implementing listTimes – way to complicated

This commit is contained in:
2025-07-15 08:23:08 +02:00
parent 65b5dded01
commit a75c58932d
17 changed files with 330 additions and 25 deletions

View File

@@ -6,14 +6,7 @@ public class Constants {
public static final String CONFIG_DATABASE = "umbrella.modules.task.database";
public static final String CHILDREN = "children";
public static final String DUE_DATE = "due_date";
public static final String ESTIMATED_TIMES = "estimated_times";
public static final String ESTIMATED_TIME = "estimated_time";
public static final String EST_TIME = "est_time";
public static final String NO_INDEX = "no_index";
public static final String PARENT_TASK_ID = "parent_task_id";
public static final String PROJECT_ID = "project_id";
public static final String START_DATE = "start_date";
public static final String TABLE_TASKS = "tasks";
public static final String FIELD_TASKS = "tasks";
}

View File

@@ -4,11 +4,12 @@ package de.srsoftware.umbrella.task;
import static de.srsoftware.tools.jdbc.Condition.in;
import static de.srsoftware.tools.jdbc.Query.select;
import static de.srsoftware.umbrella.core.Constants.PROJECT_ID;
import static de.srsoftware.umbrella.core.ResponseCode.HTTP_SERVER_ERROR;
import static de.srsoftware.umbrella.task.Constants.PROJECT_ID;
import static de.srsoftware.umbrella.task.Constants.TABLE_TASKS;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.Task;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;

View File

@@ -1,55 +0,0 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.task;
import static de.srsoftware.tools.Optionals.nullIfEmpty;
import static de.srsoftware.umbrella.core.Constants.*;
import static de.srsoftware.umbrella.core.Constants.SHOW_CLOSED;
import static de.srsoftware.umbrella.core.Constants.STATUS;
import static de.srsoftware.umbrella.core.Util.markdown;
import static de.srsoftware.umbrella.task.Constants.*;
import de.srsoftware.tools.Mappable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
public record Task(long id, long projectId, Long parentTaskId, String name, String description, int status, Double estimatedTime, LocalDate start, LocalDate dueDate,boolean showClosed, boolean noIndex) implements Mappable {
public static Task of(ResultSet rs) throws SQLException {
var estTime = rs.getDouble(EST_TIME);
var parentTaskId = rs.getLong(PARENT_TASK_ID);
var startDate = nullIfEmpty(rs.getString(START_DATE));
var dueDate = nullIfEmpty(rs.getString(DUE_DATE));
return new Task(
rs.getLong(ID),
rs.getLong(PROJECT_ID),
parentTaskId == 0d ? null : parentTaskId,
rs.getString(NAME),
rs.getString(DESCRIPTION),
rs.getInt(STATUS),
estTime == 0d ? null : estTime,
startDate != null ? LocalDate.parse(startDate) : null,
dueDate != null ? LocalDate.parse(dueDate) : null,
rs.getBoolean(SHOW_CLOSED),
rs.getBoolean(NO_INDEX)
);
}
@Override
public Map<String, Object> toMap() {
var map = new HashMap<String,Object>();
map.put(ID, id);
map.put(PROJECT_ID, projectId);
map.put(PARENT_TASK_ID, parentTaskId);
map.put(NAME, name);
map.put(DESCRIPTION, Map.of(SOURCE,description,RENDERED,markdown(description)));
map.put(STATUS, status);
map.put(ESTIMATED_TIME, estimatedTime);
map.put(START_DATE,start);
map.put(DUE_DATE,dueDate);
map.put(SHOW_CLOSED,showClosed);
map.put(NO_INDEX,noIndex);
return map;
}
}

View File

@@ -4,10 +4,10 @@ package de.srsoftware.umbrella.task;
import static de.srsoftware.tools.Optionals.is0;
import static de.srsoftware.umbrella.core.ConnectionProvider.connect;
import static de.srsoftware.umbrella.core.Constants.COMPANY_ID;
import static de.srsoftware.umbrella.core.Constants.PROJECT_ID;
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.forbidden;
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException;
import static de.srsoftware.umbrella.task.Constants.*;
import static java.util.Objects.isNull;
import static java.util.stream.Collectors.toMap;
import com.sun.net.httpserver.HttpExchange;
@@ -17,16 +17,17 @@ import de.srsoftware.tools.SessionToken;
import de.srsoftware.umbrella.core.BaseHandler;
import de.srsoftware.umbrella.core.api.CompanyService;
import de.srsoftware.umbrella.core.api.ProjectService;
import de.srsoftware.umbrella.core.api.TaskService;
import de.srsoftware.umbrella.core.api.UserService;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.Project;
import de.srsoftware.umbrella.core.model.Task;
import de.srsoftware.umbrella.core.model.Token;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
public class TaskModule extends BaseHandler {
public class TaskModule extends BaseHandler implements TaskService {
private final SqliteDb taskDb;
private final ProjectService projects;
@@ -41,7 +42,12 @@ public class TaskModule extends BaseHandler {
users = companies.userService();
}
@Override
@Override
public CompanyService companyService() {
return companies;
}
@Override
public boolean doPost(Path path, HttpExchange ex) throws IOException {
addCors(ex);
try {
@@ -81,6 +87,12 @@ public class TaskModule extends BaseHandler {
return sendContent(ex,result);
}
@Override
public Collection<Task> listCompanyTasks(long companyId) throws UmbrellaException {
var projectList = projects.listProjects(companyId,false);
return taskDb.listTasks(projectList.stream().map(Project::id).toList());
}
private Map<String,Object> placeInTree(Task task, HashMap<Long, Map<String,Object>> tree, Map<Long, Task> map) {
var taskMap = task.toMap();
if (task.parentTaskId() != null){
@@ -93,4 +105,14 @@ public class TaskModule extends BaseHandler {
tree.put(task.id(),taskMap);
return taskMap;
}
@Override
public ProjectService projectService() {
return projects;
}
@Override
public UserService userService() {
return users;
}
}