blob: e6b1154eb41ba3985b35b322eea2abcd61bbc75c [file] [log] [blame]
package build.bazel.dashboard.github.teamtable;
import build.bazel.dashboard.github.teamtable.GithubTeamTableRepo.GithubTeamTableData.Header;
import java.time.Instant;
import java.util.Comparator;
import java.util.Optional;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.r2dbc.core.DatabaseClient;
import org.springframework.stereotype.Repository;
@Repository
@RequiredArgsConstructor
public class GithubTeamTableRepoPg implements GithubTeamTableRepo {
private final DatabaseClient databaseClient;
@Override
public Optional<GithubTeamTableData> findOne(String owner, String repo, String tableId) {
var builderOptional =
Optional.ofNullable(
databaseClient
.sql(
"SELECT owner, repo, id, created_at, updated_at, name FROM"
+ " github_team_table WHERE owner = :owner AND repo = :repo AND id = :id")
.bind("owner", owner)
.bind("repo", repo)
.bind("id", tableId)
.map(
row ->
GithubTeamTableData.builder()
.owner(row.get("owner", String.class))
.repo(row.get("repo", String.class))
.id(row.get("id", String.class))
.createdAt(row.get("created_at", Instant.class))
.updatedAt(row.get("updated_at", Instant.class))
.name(row.get("name", String.class)))
.one()
.block());
if (builderOptional.isEmpty()) {
return Optional.empty();
}
var builder = builderOptional.get();
GithubTeamTableData tmp = builder.build();
return Optional.ofNullable(
databaseClient
.sql(
"SELECT id, created_at, updated_at, seq, name, query FROM"
+ " github_team_table_header WHERE owner = :owner AND repo = :repo"
+ " AND table_id = :tableId")
.bind("owner", tmp.getOwner())
.bind("repo", tmp.getRepo())
.bind("tableId", tmp.getId())
.map(
row ->
Header.builder()
.id(row.get("id", String.class))
.createdAt(row.get("created_at", Instant.class))
.updatedAt(row.get("updated_at", Instant.class))
.seq(row.get("seq", Integer.class))
.name(row.get("name", String.class))
.query(row.get("query", String.class))
.build())
.all()
.collect(Collectors.toList())
.map(
headers -> {
headers.sort(Comparator.comparing(Header::getSeq));
return builder.headers(headers).build();
})
.block());
}
}