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 19f2c99..a2068d5 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 @@ -12,7 +12,7 @@ import java.util.*; import org.json.JSONObject; public class Project implements Mappable { - private final Collection members; + private final Map members; private final boolean showClosed; private final Long companyId; private Status status; @@ -21,7 +21,7 @@ public class Project implements Mappable { private String description; private final Set dirtyFields = new HashSet<>(); - public Project(long id, String name, String description, Status status, Long companyId, boolean showClosed, Collection members) { + public Project(long id, String name, String description, Status status, Long companyId, boolean showClosed, Map members) { this.id = id; this.name = name; this.description = description; @@ -44,17 +44,14 @@ public class Project implements Mappable { } public boolean hasMember(UmbrellaUser user) { - for (var member : members){ - if (member.user().id() == user.id()) return true; - } - return false; + return members.containsKey(user.id()); } public long id(){ return id; } - public Collection members(){ + public Map members(){ return members; } @@ -64,7 +61,7 @@ public class Project implements Mappable { public static Project of(ResultSet rs) throws SQLException { var companyId = rs.getLong(COMPANY_ID); - return new Project(rs.getLong(ID),rs.getString(NAME),rs.getString(DESCRIPTION),Status.of(rs.getInt(STATUS)),companyId == 0 ? null : companyId,rs.getBoolean(SHOW_CLOSED),new ArrayList<>()); + return new Project(rs.getLong(ID),rs.getString(NAME),rs.getString(DESCRIPTION),Status.of(rs.getInt(STATUS)),companyId == 0 ? null : companyId,rs.getBoolean(SHOW_CLOSED),new HashMap<>()); } public Project patch(JSONObject json) { @@ -91,13 +88,15 @@ public class Project implements Mappable { @Override public Map toMap() { var map = new HashMap(); + var memberMap = new HashMap>(); + for (var entry : members.entrySet()) memberMap.put(entry.getKey(),entry.getValue().toMap()); map.put(ID,id); map.put(NAME,name); map.put(DESCRIPTION,Map.of(SOURCE,description,RENDERED,markdown(description))); map.put(STATUS,Map.of(STATUS_CODE,status.code(), NAME,status.name())); map.put(COMPANY_ID,companyId); map.put(SHOW_CLOSED,showClosed); - map.put(MEMBERS,members == null ? List.of() : members.stream().map(Member::toMap).toList()); + map.put(MEMBERS,memberMap); return map; } diff --git a/frontend/src/routes/project/View.svelte b/frontend/src/routes/project/View.svelte index 6bc4908..c5bccaa 100644 --- a/frontend/src/routes/project/View.svelte +++ b/frontend/src/routes/project/View.svelte @@ -108,7 +108,7 @@
    {#each Object.entries(project.members) as [uid,member]} -
  • {member.user.name}: {t('permission.'+member.permission)}
  • +
  • {member.user.name}: {t('permission.'+member.permission.name)}
  • {/each}
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 971c758..428bdb4 100644 --- a/project/src/main/java/de/srsoftware/umbrella/project/ProjectModule.java +++ b/project/src/main/java/de/srsoftware/umbrella/project/ProjectModule.java @@ -152,7 +152,7 @@ public class ProjectModule extends BaseHandler implements ProjectService { var userId = entry.getKey(); var permission = entry.getValue(); var user = userMap.computeIfAbsent(userId,k -> users.loadUser(userId)); - project.members().add(new Member(user,permission)); + project.members().put(userId,new Member(user,permission)); } } return projectList; @@ -187,7 +187,8 @@ public class ProjectModule extends BaseHandler implements ProjectService { if (json.has(SETTINGS) && json.get(SETTINGS) instanceof JSONObject settingsJson){ showClosed = settingsJson.has(SHOW_CLOSED) && settingsJson.get(SHOW_CLOSED) == TRUE; } - var prj = new Project(0,name,description, OPEN,companyId,showClosed, List.of(new Member(user, OWNER))); + var owner = Map.of(user.id(),new Member(user,OWNER)); + var prj = new Project(0,name,description, OPEN,companyId,showClosed, owner); prj = projects.save(prj); return sendContent(ex,prj); } diff --git a/project/src/main/java/de/srsoftware/umbrella/project/SqliteDb.java b/project/src/main/java/de/srsoftware/umbrella/project/SqliteDb.java index 6689ccc..564a6be 100644 --- a/project/src/main/java/de/srsoftware/umbrella/project/SqliteDb.java +++ b/project/src/main/java/de/srsoftware/umbrella/project/SqliteDb.java @@ -197,7 +197,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255) if (id != null){ if (!prj.members().isEmpty()) { var query = insertInto(TABLE_PROJECT_USERS, PROJECT_ID, USER_ID, PERMISSIONS); - for (var member : prj.members()) query.values(id, member.user().id(), member.permission().code()); + for (var member : prj.members().entrySet()) query.values(id, member.getKey(), member.getValue().permission().code()); query.execute(db).close(); } return new Project(id, prj.name(), prj.description(),prj.status(),prj.companyId().orElse(null),prj.showClosed(),prj.members());