introduced ModuleRegistry to easy inter-module dependencies
This commit is contained in:
@@ -18,10 +18,8 @@ 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.api.CompanyService;
|
||||
import de.srsoftware.umbrella.core.ModuleRegistry;
|
||||
import de.srsoftware.umbrella.core.api.ProjectService;
|
||||
import de.srsoftware.umbrella.core.api.TagService;
|
||||
import de.srsoftware.umbrella.core.api.UserService;
|
||||
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
|
||||
import de.srsoftware.umbrella.core.model.*;
|
||||
import java.io.IOException;
|
||||
@@ -32,37 +30,27 @@ import org.json.JSONObject;
|
||||
public class ProjectModule extends BaseHandler implements ProjectService {
|
||||
|
||||
private final ProjectDb projects;
|
||||
private final CompanyService companies;
|
||||
private final UserService users;
|
||||
private final TagService tags;
|
||||
private final ModuleRegistry registy;
|
||||
|
||||
public ProjectModule(Configuration config, CompanyService companyService, TagService tagService) throws UmbrellaException {
|
||||
public ProjectModule(ModuleRegistry registry, Configuration config) throws UmbrellaException {
|
||||
var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingFieldException(CONFIG_DATABASE));
|
||||
projects = new SqliteDb(connect(dbFile));
|
||||
companies = companyService;
|
||||
tags = tagService;
|
||||
users = companies.userService();
|
||||
this.registy = registry.add(this);
|
||||
}
|
||||
|
||||
private void addMember(Project project, long userId) {
|
||||
var user = users.loadUser(userId);
|
||||
var user = registy.userService().loadUser(userId);
|
||||
var member = new Member(user,READ_ONLY);
|
||||
project.members().put(userId,member);
|
||||
project.dirty(MEMBERS);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public CompanyService companyService() {
|
||||
return companies;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doGet(Path path, HttpExchange ex) throws IOException {
|
||||
addCors(ex);
|
||||
try {
|
||||
Optional<Token> token = SessionToken.from(ex).map(Token::of);
|
||||
var user = users.loadUser(token);
|
||||
var user = registy.userService().loadUser(token);
|
||||
if (user.isEmpty()) return unauthorized(ex);
|
||||
var head = path.pop();
|
||||
return switch (head) {
|
||||
@@ -86,7 +74,7 @@ public class ProjectModule extends BaseHandler implements ProjectService {
|
||||
addCors(ex);
|
||||
try {
|
||||
Optional<Token> token = SessionToken.from(ex).map(Token::of);
|
||||
var user = users.loadUser(token);
|
||||
var user = registy.userService().loadUser(token);
|
||||
if (user.isEmpty()) return unauthorized(ex);
|
||||
var head = path.pop();
|
||||
return switch (head) {
|
||||
@@ -109,7 +97,7 @@ public class ProjectModule extends BaseHandler implements ProjectService {
|
||||
addCors(ex);
|
||||
try {
|
||||
Optional<Token> token = SessionToken.from(ex).map(Token::of);
|
||||
var user = users.loadUser(token);
|
||||
var user = registy.userService().loadUser(token);
|
||||
if (user.isEmpty()) return unauthorized(ex);
|
||||
var head = path.pop();
|
||||
return switch (head) {
|
||||
@@ -141,7 +129,7 @@ public class ProjectModule extends BaseHandler implements ProjectService {
|
||||
var project = loadMembers(projects.load(projectId));
|
||||
if (!project.hasMember(user)) throw forbidden("You are not a member of {0}",project.name());
|
||||
var map = project.toMap();
|
||||
project.companyId().map(companies::get).map(Company::toMap).ifPresent(data -> map.put(COMPANY,data));
|
||||
project.companyId().map(registy.companyService()::get).map(Company::toMap).ifPresent(data -> map.put(COMPANY,data));
|
||||
return sendContent(ex,map);
|
||||
}
|
||||
|
||||
@@ -152,8 +140,8 @@ public class ProjectModule extends BaseHandler implements ProjectService {
|
||||
}
|
||||
|
||||
private boolean listCompanyProjects(HttpExchange ex, UmbrellaUser user, long companyId) throws IOException, UmbrellaException {
|
||||
var company = companies.get(companyId);
|
||||
if (!companies.membership(companyId,user.id())) throw forbidden("You are mot a member of company {0}",company.name());
|
||||
var company = registy.companyService().get(companyId);
|
||||
if (!registy.companyService().membership(companyId,user.id())) throw forbidden("You are mot a member of company {0}",company.name());
|
||||
var projects = listCompanyProjects(companyId,false);
|
||||
return sendContent(ex,mapValues(projects));
|
||||
}
|
||||
@@ -182,7 +170,7 @@ public class ProjectModule extends BaseHandler implements ProjectService {
|
||||
for (var entry : projects.getMembers(project).entrySet()){
|
||||
var userId = entry.getKey();
|
||||
var permission = entry.getValue();
|
||||
var user = userMap.computeIfAbsent(userId,k -> users.loadUser(userId));
|
||||
var user = userMap.computeIfAbsent(userId,k -> registy.userService().loadUser(userId));
|
||||
project.members().put(userId,new Member(user,permission));
|
||||
}
|
||||
}
|
||||
@@ -206,7 +194,7 @@ public class ProjectModule extends BaseHandler implements ProjectService {
|
||||
if (member.permission() == OWNER) members.put(member.user().id(),new Member(member.user(),EDIT));
|
||||
}
|
||||
}
|
||||
members.put(userId,new Member(users.loadUser(userId),permission));
|
||||
members.put(userId,new Member(registy.userService().loadUser(userId),permission));
|
||||
project.dirty(MEMBERS);
|
||||
}
|
||||
}
|
||||
@@ -245,7 +233,7 @@ public class ProjectModule extends BaseHandler implements ProjectService {
|
||||
}
|
||||
Long companyId = null;
|
||||
if (json.has(COMPANY_ID) && json.get(COMPANY_ID) instanceof Number number){
|
||||
if (!companies.membership(number.longValue(), user.id())) throw forbidden("You are not a member of company {0}!",number);
|
||||
if (!registy.companyService().membership(number.longValue(), user.id())) throw forbidden("You are not a member of company {0}!",number);
|
||||
companyId = number.longValue();
|
||||
}
|
||||
var showClosed = false;
|
||||
@@ -258,7 +246,7 @@ public class ProjectModule extends BaseHandler implements ProjectService {
|
||||
|
||||
if (json.has(TAGS) && json.get(TAGS) instanceof JSONArray arr){
|
||||
var tagList = arr.toList().stream().filter(elem -> elem instanceof String).map(String.class::cast).toList();
|
||||
tags.save(PROJECT,prj.id(),null,tagList);
|
||||
registy.tagService().save(PROJECT,prj.id(),null,tagList);
|
||||
}
|
||||
|
||||
return sendContent(ex,prj);
|
||||
|
||||
Reference in New Issue
Block a user