blob: e942749505ae045684d9f3e74e86d02e805ba7b5 [file] [log] [blame]
package build.bazel.dashboard.github.issuestatus;
import static build.bazel.dashboard.utils.RxJavaVirtualThread.completable;
import build.bazel.dashboard.github.issue.GithubIssueService;
import build.bazel.dashboard.github.issue.GithubPullRequestRepo;
import io.reactivex.rxjava3.core.Completable;
import java.time.Instant;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
@RequiredArgsConstructor
public class GithubIssueStatusRestController {
private final GithubIssueService githubIssueService;
private final GithubPullRequestRepo githubPullRequestRepo;
private final GithubIssueStatusService githubIssueStatusService;
@PutMapping("/internal/github/{owner}/{repo}/issues/status")
public Completable checkStatus(
@PathVariable("owner") String owner,
@PathVariable("repo") String repo,
@RequestParam(name = "start") Integer start,
@RequestParam(name = "count") Integer count) {
return completable(
() -> {
for (var number = start; number < start + count; ++number) {
var issue = githubIssueService.findOne(owner, repo, number);
var pullRequest = githubPullRequestRepo.findOne(owner, repo, number).orElse(null);
if (issue.isPresent()) {
githubIssueStatusService.check(issue.get(), pullRequest, Instant.now());
}
}
});
}
}