From 744b8a4576198ef4ddfcae9bea45aefe641b1bf8 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Sat, 19 Jul 2025 00:40:28 +0200 Subject: [PATCH] working on project view --- .../main/java/de/srsoftware/umbrella/core/Constants.java | 4 ++++ .../umbrella/core/exceptions/UmbrellaException.java | 2 +- .../java/de/srsoftware/umbrella/core/model/Project.java | 8 ++++++++ .../java/de/srsoftware/umbrella/documents/Constants.java | 2 -- frontend/src/routes/project/View.svelte | 6 ++++++ .../de/srsoftware/umbrella/project/ProjectModule.java | 4 +++- 6 files changed, 22 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/de/srsoftware/umbrella/core/Constants.java b/core/src/main/java/de/srsoftware/umbrella/core/Constants.java index 77e1e36..a97154d 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/Constants.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/Constants.java @@ -6,13 +6,16 @@ import static java.nio.charset.StandardCharsets.UTF_8; public class Constants { + private Constants(){} public static final String ADDRESS = "address"; public static final String ATTACHMENTS = "attachments"; public static final String AUTHORIZATION = "Authorization"; public static final String BODY = "body"; + public static final String COMPANY = "company"; public static final String COMPANY_ID = "company_id"; public static final String CONTENT_TYPE = "Content-Type"; + public static final String DATA = "data"; public static final String DATE = "date"; public static final String DEFAULT_LANGUAGE = "en"; @@ -21,6 +24,7 @@ public class Constants { public static final String DOMAIN = "domain"; public static final String DUE_DATE = "due_date"; public static final String DURATION = "duration"; + public static final String EMAIL = "email"; public static final String END_TIME = "end_time"; diff --git a/core/src/main/java/de/srsoftware/umbrella/core/exceptions/UmbrellaException.java b/core/src/main/java/de/srsoftware/umbrella/core/exceptions/UmbrellaException.java index e507788..bb54aa1 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/exceptions/UmbrellaException.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/exceptions/UmbrellaException.java @@ -11,7 +11,7 @@ import static java.net.HttpURLConnection.HTTP_NOT_FOUND; import static java.text.MessageFormat.format; -public class UmbrellaException extends Exception{ +public class UmbrellaException extends RuntimeException{ private final int statusCode; public UmbrellaException(String message, Object ... fills){ diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java index 7a8c752..7be69ed 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java @@ -39,6 +39,14 @@ public record Project(long id, String name, String description, Status status, L } } + public boolean hasMember(UmbrellaUser user) { + for (var member : members){ + if (member.userId() == user.id()) return true; + } + return false; + } + + public static Project of(ResultSet rs) throws SQLException { return new Project(rs.getLong(ID),rs.getString(NAME),rs.getString(DESCRIPTION),Status.of(rs.getInt(STATUS)),rs.getLong(COMPANY_ID),rs.getBoolean(SHOW_CLOSED),new ArrayList<>()); } diff --git a/documents/src/main/java/de/srsoftware/umbrella/documents/Constants.java b/documents/src/main/java/de/srsoftware/umbrella/documents/Constants.java index 74dd8e7..b229b1b 100644 --- a/documents/src/main/java/de/srsoftware/umbrella/documents/Constants.java +++ b/documents/src/main/java/de/srsoftware/umbrella/documents/Constants.java @@ -12,8 +12,6 @@ public class Constants { public static final Pattern POST_CODE = compile("(.*\\w+.*)\n(.*\\d+.*)\n(\\d{5}) (\\w+)",DOTALL); - public static final String COMPANIES = "companies"; - public static final String COMPANY = "company"; public static final String CONFIG_DATABASE = "umbrella.modules.document.database"; public static final String CONFIG_TEMPLATES = "umbrella.modules.document.templates"; diff --git a/frontend/src/routes/project/View.svelte b/frontend/src/routes/project/View.svelte index e62b718..baf6683 100644 --- a/frontend/src/routes/project/View.svelte +++ b/frontend/src/routes/project/View.svelte @@ -31,6 +31,12 @@ {t('project')} {project.name} + {#if project.company} + + {t('company')} + {project.company.name} + + {/if} {t('context')} diff --git a/project/src/main/java/de/srsoftware/umbrella/project/ProjectModule.java b/project/src/main/java/de/srsoftware/umbrella/project/ProjectModule.java index 69024aa..50aa356 100644 --- a/project/src/main/java/de/srsoftware/umbrella/project/ProjectModule.java +++ b/project/src/main/java/de/srsoftware/umbrella/project/ProjectModule.java @@ -1,6 +1,7 @@ /* © SRSoftware 2025 */ package de.srsoftware.umbrella.project; +import static de.srsoftware.tools.Optionals.nullable; import static de.srsoftware.umbrella.core.ConnectionProvider.connect; import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.Paths.LIST; @@ -87,6 +88,7 @@ public class ProjectModule extends BaseHandler implements ProjectService { private boolean getProject(HttpExchange ex, long projectId, UmbrellaUser user) throws IOException, UmbrellaException { var project = projects.load(projectId); + if (!project.hasMember(user)) throw forbidden("You are not a member of {0}",project.name()); var map = project.toMap(); var members = new HashMap>(); for (var member : project.members()){ @@ -95,7 +97,7 @@ public class ProjectModule extends BaseHandler implements ProjectService { members.put(userId,Map.of(USER,users.loadUser(userId).toMap(),PERMISSION,perm)); } if (!members.isEmpty()) map.put(MEMBERS,members); - + nullable(project.companyId()).map(companies::get).map(Company::toMap).ifPresent(data -> map.put(COMPANY,data)); return sendContent(ex,map); }