diff --git a/app/src/main/java/it/chalmers/gamma/app/accountscaffold/AccountScaffoldFacade.java b/app/src/main/java/it/chalmers/gamma/app/accountscaffold/AccountScaffoldFacade.java index 2f8ca0211..5af9a162a 100644 --- a/app/src/main/java/it/chalmers/gamma/app/accountscaffold/AccountScaffoldFacade.java +++ b/app/src/main/java/it/chalmers/gamma/app/accountscaffold/AccountScaffoldFacade.java @@ -7,6 +7,7 @@ import it.chalmers.gamma.app.apikey.domain.settings.ApiKeyAccountScaffoldSettings; import it.chalmers.gamma.app.apikey.domain.settings.ApiKeySettingsRepository; import it.chalmers.gamma.app.authentication.AccessGuard; +import it.chalmers.gamma.app.group.domain.Group; import it.chalmers.gamma.app.group.domain.GroupMember; import it.chalmers.gamma.app.group.domain.GroupRepository; import it.chalmers.gamma.app.post.domain.Post; @@ -39,14 +40,13 @@ public AccountScaffoldFacade( } /** - * Get all super groups that have the provided types and members that are a part of groups that - * has each supergroup + * Get all super groups that have the provided types and their "sub" groups with their members. */ public List getActiveSuperGroups() { this.accessGuard.require(isApi(ApiKeyType.ACCOUNT_SCAFFOLD)); List gdprTrained = this.gdprTrainedRepository.getAll(); - Map superGroupMap = new HashMap<>(); + Map superGroupMap = new HashMap<>(); ApiAuthentication apiAuthentication = (ApiAuthentication) AuthenticationExtractor.getAuthentication(); @@ -71,23 +71,23 @@ public List getActiveSuperGroups() { if (!superGroupMap.containsKey(superGroupId)) { superGroupMap.put( superGroupId, - new SuperGroupWithMembers( - group.superGroup(), new HashSet<>(activeGroupMember))); + new SuperGroupWithGroups( + group.superGroup(), new ArrayList<>(List.of(new GroupWithMembers(group, new HashSet<>(activeGroupMember)))))); } else { - superGroupMap.get(superGroupId).members.addAll(activeGroupMember); + superGroupMap.get(superGroupId).groups.add(new GroupWithMembers(group, new HashSet<>(activeGroupMember))); } }); return superGroupMap.values().stream() .map( - superGroupWithMembers -> + superGroupWithGroups -> new AccountScaffoldSuperGroupDTO( - superGroupWithMembers.superGroup, - new ArrayList<>(superGroupWithMembers.members), + superGroupWithGroups.superGroup, + superGroupWithGroups.groups.stream().map(group -> new AccountScaffoldGroupDTO(group.group, new ArrayList<>(group.members))).toList(), settings.superGroupTypes().stream() .anyMatch( row -> - row.type().equals(superGroupWithMembers.superGroup.type()) + row.type().equals(superGroupWithGroups.superGroup.type()) && row.requiresManaged()))) .toList(); } @@ -156,32 +156,62 @@ public AccountScaffoldUserDTO(GammaUser user) { } } + public record AccountScaffoldGroupDTO( + String name, + String prettyName, + List members + ) { + public AccountScaffoldGroupDTO( + Group group, + List members + ) { + this( + group.name().value(), + group.prettyName().value(), + members + ); + } + } + public record AccountScaffoldSuperGroupDTO( String name, String prettyName, String type, - List members, + List groups, boolean useManagedAccount) { public AccountScaffoldSuperGroupDTO( SuperGroup superGroup, - List members, + List groups, boolean useManagedAccount) { this( superGroup.name().value(), superGroup.prettyName().value(), superGroup.type().value(), - members, + groups, useManagedAccount); } } - private static class SuperGroupWithMembers { - private final SuperGroup superGroup; + + private static class GroupWithMembers { + private final Group group; private final Set members; - private SuperGroupWithMembers(SuperGroup superGroup, Set members) { - this.superGroup = superGroup; + private GroupWithMembers(Group group, Set members) { + this.group = group; this.members = members; } } + + private static class SuperGroupWithGroups { + private final SuperGroup superGroup; + private final List groups; + + private SuperGroupWithGroups(SuperGroup superGroup, List groups) { + this.superGroup = superGroup; + this.groups = groups; + } + } + + }