Skip to content

Commit

Permalink
let database count effective vault users
Browse files Browse the repository at this point in the history
  • Loading branch information
infeo committed Feb 15, 2024
1 parent 33abf2f commit 19aa46d
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,7 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@Path("/vaults")
Expand Down Expand Up @@ -348,9 +345,9 @@ public Response grantAccess(@PathParam("vaultId") UUID vaultId, @NotEmpty Map<St
}

// check number of available seats
Set<String> sittingUsers = EffectiveVaultAccess.getSeatOccupyingUserIds().collect(Collectors.toUnmodifiableSet());
long occupiedSeats = sittingUsers.size();
long usersWithoutSeat = tokens.keySet().stream().filter(Predicate.not(sittingUsers::contains)).count();
long occupiedSeats = EffectiveVaultAccess.countSeatOccupyingUsers();
long usersWithoutSeat = tokens.size() - EffectiveVaultAccess.countSeatsOccupiedByUsers(tokens.keySet().stream().toList());

if (occupiedSeats + usersWithoutSeat > license.getAvailableSeats()) {
throw new PaymentRequiredException("Number of effective vault users greater than or equal to the available license seats");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;
Expand All @@ -28,11 +29,12 @@ SELECT count(eva)
INNER JOIN Vault v ON eva.id.vaultId = v.id AND NOT v.archived
WHERE eva.id.authorityId = :userId
""")
@NamedQuery(name = "EffectiveVaultAccess.getSeatOccupyingUserIds", query = """
SELECT DISTINCT u.id
@NamedQuery(name = "EffectiveVaultAccess.countSeatsOccupiedByUsers", query = """
SELECT COUNT(DISTINCT u.id)
FROM User u
INNER JOIN EffectiveVaultAccess eva ON u.id = eva.id.authorityId
INNER JOIN Vault v ON eva.id.vaultId = v.id AND NOT v.archived
WHERE u.id IN :userIds
""")
@NamedQuery(name = "EffectiveVaultAccess.countSeatOccupyingUsers", query = """
SELECT count(DISTINCT u)
Expand Down Expand Up @@ -69,8 +71,8 @@ public static boolean isUserOccupyingSeat(String userId) {
return EffectiveVaultAccess.count("#EffectiveVaultAccess.countSeatsOccupiedByUser", Parameters.with("userId", userId)) > 0;
}

public static Stream<String> getSeatOccupyingUserIds() {
return getEntityManager().createNamedQuery("EffectiveVaultAccess.getSeatOccupyingUserIds", String.class).getResultStream();
public static long countSeatsOccupiedByUsers(List<String> userIds) {
return EffectiveVaultAccess.count("#EffectiveVaultAccess.countSeatOccupiedByUsers", Parameters.with("userIds", userIds));
}

public static long countSeatOccupyingUsers() {
Expand Down

0 comments on commit 19aa46d

Please sign in to comment.