introduced ModuleRegistry to easy inter-module dependencies
This commit is contained in:
@@ -20,6 +20,7 @@ import de.srsoftware.configuration.Configuration;
|
||||
import de.srsoftware.tools.Path;
|
||||
import de.srsoftware.tools.SessionToken;
|
||||
import de.srsoftware.umbrella.core.BaseHandler;
|
||||
import de.srsoftware.umbrella.core.ModuleRegistry;
|
||||
import de.srsoftware.umbrella.core.api.*;
|
||||
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
|
||||
import de.srsoftware.umbrella.core.model.*;
|
||||
@@ -34,41 +35,28 @@ import org.json.JSONObject;
|
||||
public class TaskModule extends BaseHandler implements TaskService {
|
||||
|
||||
private final TaskDb taskDb;
|
||||
private final ProjectService projects;
|
||||
private final UserService users;
|
||||
private final CompanyService companies;
|
||||
private final TagService tags;
|
||||
private final NoteService notes;
|
||||
private final ModuleRegistry registry;
|
||||
|
||||
public TaskModule(Configuration config, ProjectService projectService, TagService tagService, NoteService noteService) throws UmbrellaException {
|
||||
public TaskModule(ModuleRegistry registry, Configuration config) throws UmbrellaException {
|
||||
var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingFieldException(CONFIG_DATABASE));
|
||||
taskDb = new SqliteDb(connect(dbFile));
|
||||
projects = projectService;
|
||||
companies = projectService.companyService();
|
||||
notes = noteService;
|
||||
tags = tagService;
|
||||
users = companies.userService();
|
||||
this.registry = registry.add(this);
|
||||
}
|
||||
|
||||
private void addMember(Task task, long userId) {
|
||||
var user = users.loadUser(userId);
|
||||
var user = registry.userService().loadUser(userId);
|
||||
var member = new Member(user,READ_ONLY);
|
||||
task.members().put(userId,member);
|
||||
task.dirty(MEMBERS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompanyService companyService() {
|
||||
return companies;
|
||||
}
|
||||
|
||||
private boolean deleteTask(HttpExchange ex, long taskId, UmbrellaUser user) throws IOException {
|
||||
var task = loadMembers(taskDb.load(taskId));
|
||||
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);
|
||||
notes.deleteEntity(TASK,taskId);
|
||||
tags.deleteEntity(TASK,taskId);
|
||||
registry.noteService().deleteEntity(TASK,taskId);
|
||||
registry.tagService().deleteEntity(TASK,taskId);
|
||||
return sendContent(ex,Map.of(DELETED,taskId));
|
||||
}
|
||||
|
||||
@@ -77,7 +65,7 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
addCors(ex);
|
||||
try {
|
||||
Optional<Token> token = SessionToken.from(ex).map(Token::of);
|
||||
var user = users.loadUser(token);
|
||||
var user = registry.userService().loadUser(token);
|
||||
if (user.isEmpty()) return unauthorized(ex);
|
||||
var head = path.pop();
|
||||
return switch (head) {
|
||||
@@ -97,7 +85,7 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
addCors(ex);
|
||||
try {
|
||||
Optional<Token> token = SessionToken.from(ex).map(Token::of);
|
||||
var user = users.loadUser(token);
|
||||
var user = registry.userService().loadUser(token);
|
||||
if (user.isEmpty()) return unauthorized(ex);
|
||||
var head = path.pop();
|
||||
return switch (head) {
|
||||
@@ -119,7 +107,7 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
addCors(ex);
|
||||
try {
|
||||
Optional<Token> token = SessionToken.from(ex).map(Token::of);
|
||||
var user = users.loadUser(token);
|
||||
var user = registry.userService().loadUser(token);
|
||||
if (user.isEmpty()) return unauthorized(ex);
|
||||
var head = path.pop();
|
||||
return switch (head) {
|
||||
@@ -140,7 +128,7 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
addCors(ex);
|
||||
try {
|
||||
Optional<Token> token = SessionToken.from(ex).map(Token::of);
|
||||
var user = users.loadUser(token);
|
||||
var user = registry.userService().loadUser(token);
|
||||
if (user.isEmpty()) return unauthorized(ex);
|
||||
var head = path.pop();
|
||||
return switch (head) {
|
||||
@@ -164,9 +152,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 = companies.get(companyId);
|
||||
if (!companies.membership(companyId,user.id())) throw forbidden("You are mot a member of company {0}",company.name());
|
||||
var projectMap = this.projects.listCompanyProjects(companyId,false);
|
||||
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 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));
|
||||
@@ -201,7 +189,7 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
|
||||
@Override
|
||||
public HashMap<Long, Task> listCompanyTasks(long companyId) throws UmbrellaException {
|
||||
var projectList = projects.listCompanyProjects(companyId,false);
|
||||
var projectList = registry.projectService().listCompanyProjects(companyId,false);
|
||||
return taskDb.listTasks(projectList.keySet());
|
||||
}
|
||||
|
||||
@@ -217,7 +205,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 -> users.loadUser(userId));
|
||||
var user = userMap.computeIfAbsent(userId,k -> registry.userService().loadUser(userId));
|
||||
task.members().put(userId,new Member(user,permission));
|
||||
}
|
||||
}
|
||||
@@ -262,7 +250,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(users.loadUser(userId),permission));
|
||||
members.put(userId,new Member(registry.userService().loadUser(userId),permission));
|
||||
task.dirty(MEMBERS);
|
||||
}
|
||||
}
|
||||
@@ -296,8 +284,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 = projects.load(projectId);
|
||||
projects.loadMembers(List.of(project));
|
||||
var project = registry.projectService().load(projectId);
|
||||
registry.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()){
|
||||
@@ -326,7 +314,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();
|
||||
tags.save(TASK,task.id(),null,tagList);
|
||||
registry.tagService().save(TASK,task.id(),null,tagList);
|
||||
}
|
||||
return sendContent(ex,loadMembers(task));
|
||||
}
|
||||
@@ -347,14 +335,4 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
if (isSet(parentTaskId)) return sendContent(ex,mapValues(taskDb.listChildrenOf(parentTaskId,user,showClosed)));
|
||||
return sendEmptyResponse(HTTP_NOT_IMPLEMENTED,ex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProjectService projectService() {
|
||||
return projects;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserService userService() {
|
||||
return users;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user