implemented task/:id/view
This commit is contained in:
@@ -7,17 +7,18 @@ import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL;
|
||||
import static de.srsoftware.tools.jdbc.Query.select;
|
||||
import static de.srsoftware.umbrella.core.Constants.*;
|
||||
import static de.srsoftware.umbrella.core.ResponseCode.HTTP_SERVER_ERROR;
|
||||
import static de.srsoftware.umbrella.project.Constants.*;
|
||||
import static de.srsoftware.umbrella.task.Constants.*;
|
||||
import static java.lang.System.Logger.Level.WARNING;
|
||||
|
||||
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
|
||||
import de.srsoftware.umbrella.core.model.Status;
|
||||
import de.srsoftware.umbrella.core.model.Task;
|
||||
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
||||
import de.srsoftware.umbrella.core.model.*;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class SqliteDb implements TaskDb {
|
||||
@@ -28,6 +29,19 @@ public class SqliteDb implements TaskDb {
|
||||
db = connection;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Long, Permission> getMembers(Task task) {
|
||||
try {
|
||||
var result = new HashMap<Long,Permission>();
|
||||
var rs = select(ALL).from(TABLE_TASKS_USERS).where(TASK_ID,equal(task.id())).exec(db);
|
||||
while (rs.next()) result.put(rs.getLong(USER_ID),Permission.of(rs.getInt(PERMISSIONS)));
|
||||
rs.close();
|
||||
return result;
|
||||
} catch (SQLException e){
|
||||
throw new UmbrellaException(HTTP_SERVER_ERROR,"Faailed to load task members");
|
||||
}
|
||||
}
|
||||
|
||||
public HashMap<Long, Task> listTasks(Collection<Long> projectIds) throws UmbrellaException {
|
||||
try {
|
||||
var tasks = new HashMap<Long,Task>();
|
||||
@@ -83,4 +97,18 @@ public class SqliteDb implements TaskDb {
|
||||
throw new UmbrellaException(HTTP_SERVER_ERROR,"Failed to load tasks for project id");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Task load(long taskId) throws UmbrellaException {
|
||||
try {
|
||||
var rs = select(ALL).from(TABLE_TASKS).where(ID, equal(taskId)).exec(db);
|
||||
Task result = null;
|
||||
if (rs.next()) result = Task.of(rs);
|
||||
rs.close();
|
||||
if (result == null) throw UmbrellaException.notFound("No task found for id {0}",taskId);
|
||||
return result;
|
||||
} catch (SQLException e) {
|
||||
throw new UmbrellaException(HTTP_SERVER_ERROR,"Failed to load task from database");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,15 @@
|
||||
package de.srsoftware.umbrella.task;
|
||||
|
||||
|
||||
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
|
||||
import de.srsoftware.umbrella.core.model.Permission;
|
||||
import de.srsoftware.umbrella.core.model.Task;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface TaskDb {
|
||||
|
||||
Task load(long taskId) throws UmbrellaException;
|
||||
|
||||
Map<Long, Permission> getMembers(Task task);
|
||||
}
|
||||
|
||||
@@ -62,7 +62,12 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
return switch (head) {
|
||||
case PERMISSIONS -> getPermissionList(ex);
|
||||
case STATES -> getStateList(ex);
|
||||
default -> super.doGet(path,ex);
|
||||
case null -> super.doGet(path,ex);
|
||||
default -> {
|
||||
var taskId = Long.parseLong(head);
|
||||
head = path.pop();
|
||||
yield head == null ? getTask(ex,taskId,user.get()) : super.doGet(path,ex);
|
||||
}
|
||||
};
|
||||
} catch (UmbrellaException e){
|
||||
return send(ex,e);
|
||||
@@ -121,6 +126,12 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
return sendContent(ex,map);
|
||||
}
|
||||
|
||||
private boolean getTask(HttpExchange ex, long taskId, UmbrellaUser user) throws IOException {
|
||||
var task = loadMembers(taskDb.load(taskId));
|
||||
if (!task.hasMember(user)) throw forbidden("You are not a member of {0}",task.name());
|
||||
return sendContent(ex,task);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HashMap<Long, Task> listCompanyTasks(long companyId) throws UmbrellaException {
|
||||
var projectList = projects.listCompanyProjects(companyId,false);
|
||||
@@ -132,6 +143,20 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
return taskDb.listTasks(List.of(projectId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Task> loadMembers(Collection<Task> taskList) {
|
||||
var userMap = new HashMap<Long,UmbrellaUser>();
|
||||
for (var task : taskList){
|
||||
for (var entry : taskDb.getMembers(task).entrySet()){
|
||||
var userId = entry.getKey();
|
||||
var permission = entry.getValue();
|
||||
var user = userMap.computeIfAbsent(userId,k -> users.loadUser(userId));
|
||||
task.members().put(userId,new Member(user,permission));
|
||||
}
|
||||
}
|
||||
return taskList;
|
||||
}
|
||||
|
||||
private Map<String,Object> placeInTree(Task task, HashMap<Long, Map<String,Object>> taskTree, Map<Long, Task> taskMap) {
|
||||
var mappedTask = task.toMap();
|
||||
if (task.parentTaskId() != null){
|
||||
|
||||
Reference in New Issue
Block a user