Merge branch 'main' into module/timetracking

This commit is contained in:
2025-08-18 00:39:53 +02:00
23 changed files with 271 additions and 244 deletions

View File

@@ -5,7 +5,6 @@ import static de.srsoftware.umbrella.core.ConnectionProvider.connect;
import static de.srsoftware.umbrella.core.Constants.*;
import static de.srsoftware.umbrella.core.Paths.LIST;
import static de.srsoftware.umbrella.core.ResponseCode.HTTP_NOT_IMPLEMENTED;
import static de.srsoftware.umbrella.core.Util.mapValues;
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.forbidden;
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException;
import static de.srsoftware.umbrella.time.Constants.*;
@@ -38,14 +37,13 @@ public class TimeModule extends BaseHandler implements TimeService {
}
private final ModuleRegistry registry;
private final TimeDb timeDb;
public TimeModule(ModuleRegistry registry, Configuration config) throws UmbrellaException {
super(registry);
var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingFieldException(CONFIG_DATABASE));
timeDb = new SqliteDb(connect(dbFile));
this.registry = registry.add(this);
}
@Override
@@ -53,7 +51,7 @@ public class TimeModule extends BaseHandler implements TimeService {
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) {
@@ -70,7 +68,7 @@ public class TimeModule extends BaseHandler implements TimeService {
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) {
@@ -84,7 +82,7 @@ public class TimeModule extends BaseHandler implements TimeService {
private boolean getUserTimes(UmbrellaUser user, HttpExchange ex) throws IOException {
// TODO
Map<Long, Project> projects = registry.projectService().listUserProjects(user.id(), true);
Map<Long, Project> projects = projectService().listUserProjects(user.id(), true);
//timeDb.
return sendEmptyResponse(HTTP_NOT_IMPLEMENTED,ex);
}
@@ -133,11 +131,11 @@ public class TimeModule extends BaseHandler implements TimeService {
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 company = companyService().get(companyId);
if (!companyService().membership(companyId,user.id())) throw forbidden("You are mot a member of company {0}",company.name());
if (!(json.has(PROJECT_ID) && json.get(PROJECT_ID) instanceof Number pid)) throw missingFieldException(PROJECT_ID);
long projectId = pid.longValue();
Map<Long,Task> tasksOfProject = registry.taskService().listProjectTasks(projectId);
Map<Long,Task> tasksOfProject = taskService().listProjectTasks(projectId);
List<Map<String, Object>> times = timeDb.listTimes(tasksOfProject.keySet())
.stream().filter(not(Time::isClosed))