conveniance modification: added registry and getters for modules to BaseHandler

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2025-08-17 23:31:06 +02:00
parent ecb1ddac0f
commit a50a451b95
21 changed files with 260 additions and 198 deletions

View File

@@ -35,16 +35,15 @@ import org.json.JSONObject;
public class TaskModule extends BaseHandler implements TaskService {
private final TaskDb taskDb;
private final ModuleRegistry registry;
public TaskModule(ModuleRegistry registry, Configuration config) throws UmbrellaException {
super(registry);
var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingFieldException(CONFIG_DATABASE));
taskDb = new SqliteDb(connect(dbFile));
this.registry = registry.add(this);
}
private void addMember(Task task, long userId) {
var user = registry.userService().loadUser(userId);
var user = userService().loadUser(userId);
var member = new Member(user,READ_ONLY);
task.members().put(userId,member);
task.dirty(MEMBERS);
@@ -55,8 +54,8 @@ public class TaskModule extends BaseHandler implements TaskService {
var member = task.members().get(user.id());
if (member == null || !member.mayWrite()) throw forbidden("You are not allowed to delete {0}",task.name());
taskDb.delete(task);
registry.noteService().deleteEntity(TASK,""+taskId);
registry.tagService().deleteEntity(TASK,taskId);
noteService().deleteEntity(TASK,""+taskId);
tagService().deleteEntity(TASK,taskId);
return sendContent(ex,Map.of(DELETED,taskId));
}
@@ -65,7 +64,7 @@ public class TaskModule extends BaseHandler implements TaskService {
addCors(ex);
try {
Optional<Token> token = SessionToken.from(ex).map(Token::of);
var user = registry.userService().loadUser(token);
var user = userService().loadUser(token);
if (user.isEmpty()) return unauthorized(ex);
var head = path.pop();
return switch (head) {
@@ -85,7 +84,7 @@ public class TaskModule extends BaseHandler implements TaskService {
addCors(ex);
try {
Optional<Token> token = SessionToken.from(ex).map(Token::of);
var user = registry.userService().loadUser(token);
var user = userService().loadUser(token);
if (user.isEmpty()) return unauthorized(ex);
var head = path.pop();
return switch (head) {
@@ -107,7 +106,7 @@ public class TaskModule extends BaseHandler implements TaskService {
addCors(ex);
try {
Optional<Token> token = SessionToken.from(ex).map(Token::of);
var user = registry.userService().loadUser(token);
var user = userService().loadUser(token);
if (user.isEmpty()) return unauthorized(ex);
var head = path.pop();
return switch (head) {
@@ -128,7 +127,7 @@ public class TaskModule extends BaseHandler implements TaskService {
addCors(ex);
try {
Optional<Token> token = SessionToken.from(ex).map(Token::of);
var user = registry.userService().loadUser(token);
var user = userService().loadUser(token);
if (user.isEmpty()) return unauthorized(ex);
var head = path.pop();
return switch (head) {
@@ -152,9 +151,9 @@ public class TaskModule extends BaseHandler implements TaskService {
var json = json(ex);
if (!(json.has(COMPANY_ID) && json.get(COMPANY_ID) instanceof Number cid)) throw missingFieldException(COMPANY_ID);
var companyId = cid.longValue();
var company = registry.companyService().get(companyId);
if (!registry.companyService().membership(companyId,user.id())) throw forbidden("You are mot a member of company {0}",company.name());
var projectMap = registry.projectService().listCompanyProjects(companyId,false);
var company = companyService().get(companyId);
if (!companyService().membership(companyId,user.id())) throw forbidden("You are mot a member of company {0}",company.name());
var projectMap = projectService().listCompanyProjects(companyId,false);
var taskMap = taskDb.listTasks(projectMap.keySet());
var taskTree = new HashMap<Long,Map<String,Object>>();
taskMap.values().stream().filter(task -> !is0(task.estimatedTime())).forEach(task -> placeInTree(task,taskTree,taskMap));
@@ -196,7 +195,7 @@ public class TaskModule extends BaseHandler implements TaskService {
} catch (NumberFormatException e) {
throw invalidFieldException(LIMIT,"number");
}
Set<Long> projectIds = registry.projectService().listUserProjects(user.id(), true).keySet();
Set<Long> projectIds = projectService().listUserProjects(user.id(), true).keySet();
var list = taskDb.listUserTasks(user.id(), limit, offset, false).stream()
.filter(task -> projectIds.contains(task.projectId())) // drop tasks assigned to project we are not member of
.map(Task::toMap)
@@ -206,7 +205,7 @@ public class TaskModule extends BaseHandler implements TaskService {
@Override
public HashMap<Long, Task> listCompanyTasks(long companyId) throws UmbrellaException {
var projectList = registry.projectService().listCompanyProjects(companyId,false);
var projectList = projectService().listCompanyProjects(companyId,false);
return taskDb.listTasks(projectList.keySet());
}
@@ -222,7 +221,7 @@ public class TaskModule extends BaseHandler implements TaskService {
for (var entry : taskDb.getMembers(task).entrySet()){
var userId = entry.getKey();
var permission = entry.getValue();
var user = userMap.computeIfAbsent(userId,k -> registry.userService().loadUser(userId));
var user = userMap.computeIfAbsent(userId,k -> userService().loadUser(userId));
task.members().put(userId,new Member(user,permission));
}
}
@@ -267,7 +266,7 @@ public class TaskModule extends BaseHandler implements TaskService {
if (member.permission() == ASSIGNEE) members.put(member.user().id(),new Member(member.user(),EDIT));
}
}
members.put(userId,new Member(registry.userService().loadUser(userId),permission));
members.put(userId,new Member(userService().loadUser(userId),permission));
task.dirty(MEMBERS);
}
}
@@ -301,8 +300,8 @@ public class TaskModule extends BaseHandler implements TaskService {
if (!(json.has(PROJECT_ID) && json.get(PROJECT_ID) instanceof Number pid)) throw missingFieldException(PROJECT_ID);
if (!(json.has(MEMBERS) && json.get(MEMBERS) instanceof JSONObject memberData)) throw missingFieldException(MEMBERS);
long projectId = pid.longValue();
var project = registry.projectService().load(projectId);
registry.projectService().loadMembers(List.of(project));
var project = projectService().load(projectId);
projectService().loadMembers(List.of(project));
var member = project.members().get(user.id());
if (member == null || member.permission() == READ_ONLY) throw forbidden("You are not allowed to create new tasks in this project");
for (var key : memberData.keySet()){
@@ -331,7 +330,7 @@ public class TaskModule extends BaseHandler implements TaskService {
}
if (json.has(TAGS) && json.get(TAGS) instanceof JSONArray arr){
var tagList = arr.toList().stream().filter(e -> e instanceof String).map(String.class::cast).toList();
registry.tagService().save(TASK,task.id(),null,tagList);
tagService().save(TASK,task.id(),null,tagList);
}
return sendContent(ex,loadMembers(task));
}