UCSBDiningCommonsMenuItemController.java

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

  2. import edu.ucsb.cs156.example.entities.UCSBDate;
  3. import edu.ucsb.cs156.example.entities.UCSBDiningCommonMenuItem;
  4. import edu.ucsb.cs156.example.errors.EntityNotFoundException;
  5. import edu.ucsb.cs156.example.repositories.UCSBDateRepository;
  6. import edu.ucsb.cs156.example.repositories.UCSBDiningCommonsMenuItemRepository;
  7. import io.swagger.v3.oas.annotations.Operation;
  8. import io.swagger.v3.oas.annotations.Parameter;
  9. import io.swagger.v3.oas.annotations.tags.Tag;
  10. import lombok.extern.slf4j.Slf4j;

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

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

  23. import jakarta.validation.Valid;

  24. import java.time.LocalDateTime;

  25. @Tag(name = "UCSBDiningCommonsMenuItem")
  26. @RequestMapping("/api/ucsbdiningcommonsmenuitem")
  27. @RestController
  28. @Slf4j

  29. public class UCSBDiningCommonsMenuItemController extends ApiController {
  30.     @Autowired
  31.     UCSBDiningCommonsMenuItemRepository ucsbDiningCommonsMenuItemRepository;

  32.     @Operation(summary= "List all menu items")
  33.     @PreAuthorize("hasRole('ROLE_USER')")
  34.     @GetMapping("/all")
  35.     public Iterable<UCSBDiningCommonMenuItem> allUCSBDiningCommonsMenuItems() {
  36.         Iterable<UCSBDiningCommonMenuItem> menuItem = ucsbDiningCommonsMenuItemRepository.findAll();
  37.         return menuItem;
  38.     }

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

  46.         return ucsbDiningCommonMenuItem;
  47.     }

  48.     @Operation(summary= "Create a new menu item")
  49.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  50.     @PostMapping("/post")
  51.     public UCSBDiningCommonMenuItem postUCSBDiningCommonsMenuItem(
  52.         @Parameter(name="diningCommonsCode") @RequestParam String diningCommonsCode,
  53.         @Parameter(name="name") @RequestParam String name,
  54.         @Parameter(name="station") @RequestParam String station)
  55.         throws JsonProcessingException {

  56.     // For an explanation of @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
  57.     // See: https://www.baeldung.com/spring-date-parameters

  58.     //log.info("localDateTime={}", localDateTime);

  59.     UCSBDiningCommonMenuItem ucsbDiningCommonMenuItem = new UCSBDiningCommonMenuItem();
  60.     ucsbDiningCommonMenuItem.setDiningCommonsCode(diningCommonsCode);
  61.     ucsbDiningCommonMenuItem.setName(name);
  62.     ucsbDiningCommonMenuItem.setStation(station);

  63.     UCSBDiningCommonMenuItem savedUcsbDiningCommonMenuItem = ucsbDiningCommonsMenuItemRepository.save(ucsbDiningCommonMenuItem);

  64.     return savedUcsbDiningCommonMenuItem;
  65. }

  66.     @Operation(summary= "Delete a menu item")
  67.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  68.     @DeleteMapping("")
  69.     public Object deleteUCSBDiningCommonMenuItem(
  70.             @Parameter(name="id") @RequestParam Long id) {
  71.         UCSBDiningCommonMenuItem ucsbDiningCommonMenuItem = ucsbDiningCommonsMenuItemRepository.findById(id)
  72.                 .orElseThrow(() -> new EntityNotFoundException(UCSBDiningCommonMenuItem.class, id));

  73.         ucsbDiningCommonsMenuItemRepository.delete(ucsbDiningCommonMenuItem);
  74.         return genericMessage("UCSBDiningCommonMenuItem with id %s deleted".formatted(id));
  75.     }

  76.     @Operation(summary= "Update a single menu item")
  77.     @PreAuthorize("hasRole('ROLE_ADMIN')")
  78.     @PutMapping("")
  79.     public UCSBDiningCommonMenuItem updateUCSBDiningCommonMenuItem(
  80.             @Parameter(name="id") @RequestParam Long id,
  81.             @RequestBody @Valid UCSBDiningCommonMenuItem incoming) {

  82.         UCSBDiningCommonMenuItem ucsbDiningCommonMenuItem = ucsbDiningCommonsMenuItemRepository.findById(id)
  83.                 .orElseThrow(() -> new EntityNotFoundException(UCSBDiningCommonMenuItem.class, id));

  84.         ucsbDiningCommonMenuItem.setDiningCommonsCode(incoming.getDiningCommonsCode());
  85.         ucsbDiningCommonMenuItem.setName(incoming.getName());
  86.         ucsbDiningCommonMenuItem.setStation(incoming.getStation());

  87.         ucsbDiningCommonsMenuItemRepository.save(ucsbDiningCommonMenuItem);

  88.         return ucsbDiningCommonMenuItem;
  89.     }

  90. }