JobsController.java

  1. package edu.ucsb.cs156.happiercows.controllers;

  2. import com.fasterxml.jackson.databind.ObjectMapper;

  3. import io.swagger.v3.oas.annotations.tags.Tag;
  4. import io.swagger.v3.oas.annotations.Operation;
  5. import io.swagger.v3.oas.annotations.Parameter;

  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.data.domain.Page;
  8. import org.springframework.data.domain.PageRequest;
  9. import org.springframework.data.domain.Sort;
  10. import org.springframework.security.access.prepost.PreAuthorize;
  11. import org.springframework.web.bind.annotation.GetMapping;
  12. import org.springframework.web.bind.annotation.PostMapping;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.RequestParam;
  15. import org.springframework.web.bind.annotation.RestController;


  16. import edu.ucsb.cs156.happiercows.entities.jobs.Job;
  17. import edu.ucsb.cs156.happiercows.jobs.InstructorReportJob;
  18. import edu.ucsb.cs156.happiercows.jobs.InstructorReportJobFactory;
  19. import edu.ucsb.cs156.happiercows.jobs.InstructorReportJobSingleCommons;
  20. import edu.ucsb.cs156.happiercows.jobs.InstructorReportJobSingleCommonsFactory;
  21. import edu.ucsb.cs156.happiercows.jobs.MilkTheCowsJobFactory;
  22. import edu.ucsb.cs156.happiercows.jobs.SetCowHealthJobFactory;
  23. import edu.ucsb.cs156.happiercows.jobs.TestJob;
  24. import edu.ucsb.cs156.happiercows.jobs.UpdateCowHealthJobFactory;
  25. import edu.ucsb.cs156.happiercows.jobs.CommonStatsJob;
  26. import edu.ucsb.cs156.happiercows.jobs.CommonStatsJobFactory;
  27. import edu.ucsb.cs156.happiercows.repositories.jobs.JobsRepository;
  28. import edu.ucsb.cs156.happiercows.services.jobs.JobContextConsumer;
  29. import edu.ucsb.cs156.happiercows.services.jobs.JobService;


  30. @Tag(name = "Jobs")
  31. @RequestMapping("/api/jobs")
  32. @RestController
  33. public class JobsController extends ApiController {
  34.     @Autowired
  35.     private JobsRepository jobsRepository;

  36.     @Autowired
  37.     private JobService jobService;

  38.     @Autowired
  39.     ObjectMapper mapper;

  40.     @Autowired
  41.     UpdateCowHealthJobFactory updateCowHealthJobFactory;

  42.     @Autowired
  43.     MilkTheCowsJobFactory milkTheCowsJobFactory;

  44.     @Autowired
  45.     SetCowHealthJobFactory setCowHealthJobFactory;

  46.     @Autowired
  47.     InstructorReportJobFactory instructorReportJobFactory;

  48.     @Autowired
  49.     InstructorReportJobSingleCommonsFactory instructorReportJobSingleCommonsFactory;

  50.     @Autowired
  51.     CommonStatsJobFactory commonStatsJobFactory;

  52.     @Operation(summary = "List all jobs")
  53.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  54.     @GetMapping("/all")
  55.     public Iterable<Job> allJobs() {
  56.         Iterable<Job> jobs = jobsRepository.findAll();
  57.         return jobs;
  58.     }

  59.     @Operation(summary = "List all jobs")
  60.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  61.     @GetMapping("/all/pageable")
  62.     public Page<Job> allJobsPaged(
  63.          @Parameter(name="page") @RequestParam int page,
  64.          @Parameter(name="size") @RequestParam int size
  65.     ) {
  66.         Page<Job> jobs = jobsRepository.findAll(PageRequest.of(page, size, Sort.by("id").descending()));
  67.         return jobs;
  68.     }

  69.     @Operation(summary = "Launch Test Job (click fail if you want to test exception handling)")
  70.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  71.     @PostMapping("/launch/testjob")
  72.     public Job launchTestJob(
  73.         @Parameter(name="fail") @RequestParam Boolean fail,
  74.         @Parameter(name="sleepMs") @RequestParam Integer sleepMs
  75.     ) {
  76.         TestJob testJob = TestJob.builder()
  77.         .fail(fail)
  78.         .sleepMs(sleepMs)
  79.         .build();

  80.         return jobService.runAsJob(testJob);
  81.     }

  82.     @Operation(summary = "Launch Job to Milk the Cows (click fail if you want to test exception handling)")
  83.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  84.     @PostMapping("/launch/milkthecowjob")
  85.     public Job launchTestJob(
  86.     ) {
  87.         JobContextConsumer milkTheCowsJob = milkTheCowsJobFactory.create();
  88.         return jobService.runAsJob(milkTheCowsJob);
  89.     }

  90.     @Operation(summary = "Launch Job to Update Cow Health")
  91.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  92.     @PostMapping("/launch/updatecowhealth")
  93.     public Job updateCowHealth(
  94.     ) {
  95.         JobContextConsumer updateCowHealthJob = updateCowHealthJobFactory.create();
  96.         return jobService.runAsJob(updateCowHealthJob);
  97.     }

  98.     @Operation(summary = "Launch Job to Set Cow Health")
  99.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  100.     @PostMapping("/launch/setcowhealth")
  101.     public Job setCowHealth(
  102.         @Parameter(name="commonsID") @RequestParam Long commonsID,
  103.         @Parameter(name="health") @RequestParam double health
  104.     ) {
  105.         JobContextConsumer setCowHealthJob = setCowHealthJobFactory.create(commonsID, health);
  106.         return jobService.runAsJob(setCowHealthJob);
  107.     }

  108.     @Operation(summary = "Launch Job to Produce Instructor Report")
  109.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  110.     @PostMapping("/launch/instructorreport")
  111.     public Job instructorReport(
  112.     ) {
  113.         InstructorReportJob instructorReportJob = (InstructorReportJob) instructorReportJobFactory.create();
  114.         return jobService.runAsJob(instructorReportJob);
  115.     }

  116.     @Operation(summary = "Launch Job to Produce Instructor Report for a single commons")
  117.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  118.     @PostMapping("/launch/instructorreportsinglecommons")
  119.     public Job instructorReportSingleCommons(
  120.          @Parameter(name="commonsId") @RequestParam Long commonsId
  121.     ) {

  122.         InstructorReportJobSingleCommons instructorReportJobSingleCommons = (InstructorReportJobSingleCommons) instructorReportJobSingleCommonsFactory.create(commonsId);
  123.         return jobService.runAsJob(instructorReportJobSingleCommons);
  124.     }

  125.     @Operation(summary = "Launch Job to Save Common Stats")
  126.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  127.     @PostMapping("/launch/commonstats")
  128.     public Job commonStats(
  129.     ) {
  130.         CommonStatsJob commonStatsJob = (CommonStatsJob) commonStatsJobFactory.create();
  131.         return jobService.runAsJob(commonStatsJob);
  132.     }
  133. }