SyncCourseWithPlRepoJobFactory.java

package edu.ucsb.cs.scaffold.jobs;

import edu.ucsb.cs.scaffold.entity.Course;
import edu.ucsb.cs.scaffold.repository.PatCredentialRepository;
import edu.ucsb.cs.scaffold.repository.PlAssessmentQuestionRepository;
import edu.ucsb.cs.scaffold.repository.PlAssessmentRepository;
import edu.ucsb.cs.scaffold.repository.PlAssessmentSetRepository;
import edu.ucsb.cs.scaffold.repository.PlInstanceRepository;
import edu.ucsb.cs.scaffold.repository.PlQuestionRepository;
import edu.ucsb.cs.scaffold.repository.PlRepoRepository;
import edu.ucsb.cs.scaffold.repository.PlScaffoldAssessmentRepository;
import edu.ucsb.cs.scaffold.services.GithubService;
import edu.ucsb.cs.scaffold.services.PatEncryptionService;
import edu.ucsb.cs.scaffold.services.PrairieLearnService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Assembles a {@link SyncCourseWithPlRepoJob} with its many repository/service dependencies, so the
 * two launch sites (the JobsController endpoint and the automatic launch after a successful PUT
 * /api/courses/updatePLInstance) don't each duplicate the wiring.
 */
@Component
public class SyncCourseWithPlRepoJobFactory {

  @Autowired private PatCredentialRepository patCredentialRepository;

  @Autowired private PatEncryptionService patEncryptionService;

  @Autowired private PlRepoRepository plRepoRepository;

  @Autowired private PlInstanceRepository plInstanceRepository;

  @Autowired private PlQuestionRepository plQuestionRepository;

  @Autowired private PlScaffoldAssessmentRepository plScaffoldAssessmentRepository;

  @Autowired private PlAssessmentRepository plAssessmentRepository;

  @Autowired private PlAssessmentQuestionRepository plAssessmentQuestionRepository;

  @Autowired private PlAssessmentSetRepository plAssessmentSetRepository;

  @Autowired private GithubService githubService;

  @Autowired private PrairieLearnService prairieLearnService;

  public SyncCourseWithPlRepoJob create(long userId, Course course) {
    return SyncCourseWithPlRepoJob.builder()
        .userId(userId)
        .course(course)
        .patCredentialRepository(patCredentialRepository)
        .patEncryptionService(patEncryptionService)
        .plRepoRepository(plRepoRepository)
        .plInstanceRepository(plInstanceRepository)
        .plQuestionRepository(plQuestionRepository)
        .plScaffoldAssessmentRepository(plScaffoldAssessmentRepository)
        .plAssessmentRepository(plAssessmentRepository)
        .plAssessmentQuestionRepository(plAssessmentQuestionRepository)
        .plAssessmentSetRepository(plAssessmentSetRepository)
        .githubService(githubService)
        .prairieLearnService(prairieLearnService)
        .build();
  }
}