RecommendationRequestController.java

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

  2. import edu.ucsb.cs156.example.entities.RecommendationRequest;
  3. import edu.ucsb.cs156.example.entities.UCSBDate;
  4. import edu.ucsb.cs156.example.errors.EntityNotFoundException;
  5. import edu.ucsb.cs156.example.repositories.RecommendationRequestRepository;

  6. import io.swagger.v3.oas.annotations.Operation;
  7. import io.swagger.v3.oas.annotations.Parameter;
  8. import io.swagger.v3.oas.annotations.tags.Tag;
  9. import lombok.extern.slf4j.Slf4j;

  10. import com.fasterxml.jackson.core.JsonProcessingException;

  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.format.annotation.DateTimeFormat;
  13. import org.springframework.security.access.prepost.PreAuthorize;
  14. import org.springframework.web.bind.annotation.DeleteMapping;
  15. import org.springframework.web.bind.annotation.GetMapping;
  16. import org.springframework.web.bind.annotation.PostMapping;
  17. import org.springframework.web.bind.annotation.PutMapping;
  18. import org.springframework.web.bind.annotation.RequestBody;
  19. import org.springframework.web.bind.annotation.RequestMapping;
  20. import org.springframework.web.bind.annotation.RequestParam;
  21. import org.springframework.web.bind.annotation.RestController;

  22. import jakarta.validation.Valid;

  23. import java.time.LocalDateTime;

  24. @Tag(name = "RecommendationRequest")
  25. @RequestMapping("/api/recommendationrequests")
  26. @RestController
  27. @Slf4j
  28. public class RecommendationRequestController extends ApiController {
  29.     @Autowired
  30.     RecommendationRequestRepository recommendationRequestRepository;

  31.  
  32.     @Operation(summary= "List all recommendation requests")
  33.     @PreAuthorize("hasRole('ROLE_USER')")
  34.     @GetMapping("/all")
  35.     public Iterable<RecommendationRequest> allRecommendationRequests() {
  36.         Iterable<RecommendationRequest> requests = recommendationRequestRepository.findAll();
  37.         return requests;
  38.     }

  39.     @Operation(summary= "Get a single date")
  40.     @PreAuthorize("hasRole('ROLE_USER')")
  41.     @GetMapping("")
  42.     public RecommendationRequest getById(
  43.             @Parameter(name="id") @RequestParam Long id) {
  44.         RecommendationRequest request = recommendationRequestRepository.findById(id)
  45.                 .orElseThrow(() -> new EntityNotFoundException(RecommendationRequest.class, id));

  46.         return request;
  47.     }

  48.     @Operation(summary= "Delete a RecommendationRequest")
  49.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  50.     @DeleteMapping("")
  51.     public Object deleteRecommendationRequest(
  52.             @Parameter(name="id") @RequestParam Long id) {
  53.         RecommendationRequest request = recommendationRequestRepository.findById(id)
  54.                 .orElseThrow(() -> new EntityNotFoundException(RecommendationRequest.class, id));

  55.         recommendationRequestRepository.delete(request);
  56.         return genericMessage("RecommendationRequest with id %s deleted".formatted(id));
  57.     }

  58.     @Operation(summary= "Create a new request")
  59.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  60.     @PostMapping("/post")
  61.     public RecommendationRequest postRecommendationRequest(
  62.             @Parameter(name="requesterEmail") @RequestParam String requesterEmail,
  63.             @Parameter(name="professorEmail") @RequestParam String professorEmail,
  64.             @Parameter(name="explanation") @RequestParam String explanation,
  65.             @Parameter(name="dateRequested", description="date (in iso format, e.g. YYYY-mm-ddTHH:MM:SS; see https://en.wikipedia.org/wiki/ISO_8601)") @RequestParam("dateRequested") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime dateRequested,
  66.             @Parameter(name="dateNeeded", description="date (in iso format, e.g. YYYY-mm-ddTHH:MM:SS; see https://en.wikipedia.org/wiki/ISO_8601)") @RequestParam("dateNeeded") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime dateNeeded,
  67.             @Parameter(name="done") @RequestParam boolean done
  68.             )  
  69.             throws JsonProcessingException {

  70.         RecommendationRequest recommendationRequest = new RecommendationRequest();
  71.         recommendationRequest.setRequesterEmail(requesterEmail);
  72.         recommendationRequest.setProfessorEmail(professorEmail);
  73.         recommendationRequest.setExplanation(explanation);
  74.         recommendationRequest.setDateRequested(dateRequested);
  75.         recommendationRequest.setDateNeeded(dateNeeded);
  76.         recommendationRequest.setDone(done);

  77.         RecommendationRequest savedRecommendationRequest = recommendationRequestRepository.save(recommendationRequest);

  78.         return savedRecommendationRequest;
  79.     }

  80.     @Operation(summary= "Update a single date")
  81.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  82.     @PutMapping("")
  83.     public RecommendationRequest updateRecommendationRequest(
  84.             @Parameter(name="id") @RequestParam Long id,
  85.             @RequestBody @Valid RecommendationRequest incoming) {

  86.         RecommendationRequest request = recommendationRequestRepository.findById(id)
  87.                 .orElseThrow(() -> new EntityNotFoundException(RecommendationRequest.class, id));

  88.         request.setRequesterEmail(incoming.getRequesterEmail());
  89.         request.setProfessorEmail(incoming.getProfessorEmail());
  90.         request.setExplanation(incoming.getExplanation());
  91.         request.setDateRequested(incoming.getDateRequested());
  92.         request.setDateNeeded(incoming.getDateNeeded());
  93.         request.setDone(incoming.getDone());

  94.         recommendationRequestRepository.save(request);

  95.         return request;
  96.     }
  97. }