ResourceRepositoryImpl.java

  1. package no.nav.data.team.resource.domain;

  2. import no.nav.data.common.storage.domain.GenericStorage;
  3. import no.nav.data.team.cluster.domain.Cluster;
  4. import no.nav.data.team.po.domain.ProductArea;
  5. import no.nav.data.team.team.TeamRepository;
  6. import no.nav.data.team.team.domain.Team;
  7. import org.springframework.context.annotation.Lazy;
  8. import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
  9. import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
  10. import org.springframework.stereotype.Repository;

  11. import java.util.List;
  12. import java.util.Map;
  13. import java.util.UUID;
  14. import java.util.stream.Collectors;

  15. import static no.nav.data.common.storage.domain.GenericStorage.getOfType;

  16. @Repository
  17. public class ResourceRepositoryImpl implements ResourceRepositoryCustom {

  18.     private final NamedParameterJdbcTemplate jdbcTemplate;
  19.     private final TeamRepository teamRepository;

  20.     public ResourceRepositoryImpl(NamedParameterJdbcTemplate jdbcTemplate, @Lazy TeamRepository teamRepository) {
  21.         this.jdbcTemplate = jdbcTemplate;
  22.         this.teamRepository = teamRepository;
  23.     }

  24.     @Override
  25.     public Membership findByMemberIdent(String memberIdent) {
  26.         var resp = jdbcTemplate.queryForList(
  27.                 "select id from generic_storage where data #>'{members}' @> :member::jsonb and type in ('Team', 'ProductArea', 'Cluster')",
  28.                 new MapSqlParameterSource().addValue("member", String.format("[{\"navIdent\": \"%s\"}]", memberIdent))
  29.         );
  30.         var storages = get(resp);
  31.         return new Membership(getOfType(storages, Team.class), getOfType(storages, ProductArea.class), getOfType(storages, Cluster.class));
  32.     }

  33.     private List<GenericStorage> get(List<Map<String, Object>> resp) {
  34.         List<UUID> ids = resp.stream().map(i -> ((UUID) i.values().iterator().next())).collect(Collectors.toList());
  35.         return teamRepository.findAllById(ids);
  36.     }

  37.     public record Membership(List<Team> teams, List<ProductArea> productAreas, List<Cluster> clusters) {

  38.     }

  39. }