TeamRepositoryImpl.java
package no.nav.data.team.team;
import io.micrometer.core.annotation.Timed;
import no.nav.data.common.storage.domain.GenericStorage;
import no.nav.data.team.team.domain.Team;
import org.springframework.context.annotation.Lazy;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
import static no.nav.data.common.utils.MetricUtils.DB_QUERY_TIMED;
import static no.nav.data.common.utils.MetricUtils.QUERY;
import static no.nav.data.common.utils.StreamUtils.convert;
@Repository
public class TeamRepositoryImpl implements TeamRepositoryCustom {
private final TeamRepository teamRepository;
private final NamedParameterJdbcTemplate template;
public TeamRepositoryImpl(@Lazy TeamRepository teamRepository, NamedParameterJdbcTemplate template) {
this.teamRepository = teamRepository;
this.template = template;
}
@Override
@Timed(value = DB_QUERY_TIMED, extraTags = {QUERY, "TeamRepositoryCustom.findByCluster"}, percentiles = {.99, .75, .50})
public List<Team> findByCluster(UUID clusterId) {
var resp = template.queryForList("select id from generic_storage where data #>'{clusterIds}' ?? :clusterId",
new MapSqlParameterSource().addValue("clusterId", clusterId.toString()));
return get(resp);
}
@Override
@Timed(value = DB_QUERY_TIMED, extraTags = {QUERY, "TeamRepositoryCustom.findByNaisTeam"}, percentiles = {.99, .75, .50})
public List<Team> findByNaisTeam(String naisTeam) {
var resp = template.queryForList("select id from generic_storage where data #>'{naisTeams}' ?? :naisTeam",
new MapSqlParameterSource().addValue("naisTeam", naisTeam.toString()));
return get(resp);
}
private List<Team> get(List<Map<String, Object>> resp) {
List<UUID> ids = resp.stream().map(i -> ((UUID) i.values().iterator().next())).collect(Collectors.toList());
return convert(teamRepository.findAllById(ids), GenericStorage::toTeam);
}
}