replace notification handlers with event listeners

Issue #18 resolved
Artem Koshelev created an issue

Comments (2)

  1. Artem Koshelev reporter
    @Component
    public class PullRequestListener {
    
        private final CommitService commitService;
        private final CoverageManager coverageManager;
        private final SecurityService securityService;
    
        public PullRequestListener(CommitService commitService, CoverageManager coverageManager,
                                   SecurityService securityService) {
            this.commitService = commitService;
            this.coverageManager = coverageManager;
            this.securityService = securityService;
        }
    
        @EventListener
        public void onPullRequestDeclined(PullRequestDeclinedEvent event) {
            cleanupCoverage(event.getPullRequest());
        }
    
        @EventListener
        public void onPullRequestDeleted(PullRequestDeletedEvent event) {
            cleanupCoverage(event.getPullRequest());
        }
    
        @EventListener
        public void onPullRequestMerged(PullRequestMergedEvent event) {
            cleanupCoverage(event.getPullRequest());
        }
    
        private void cleanupCoverage(PullRequest pullRequest) {
            securityService.escalate("Clean up coverage")
                    .withPermission(pullRequest.getFromRef().getRepository(), Permission.REPO_READ)
                    .withPermission(pullRequest.getToRef().getRepository(), Permission.REPO_READ)
                    .call(() -> {
                        commitService.streamCommitsBetween(new CommitsBetweenRequest.Builder(pullRequest).build(),
                                commit -> {
                                    coverageManager.deleteCoverage(commit.getId());
                                    return true;
                                });
                        return null;
                    });
        }
    }
    
  2. Log in to comment