UserInfoController.java

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

  2. import edu.ucsb.cs156.happiercows.entities.User;
  3. import edu.ucsb.cs156.happiercows.models.CurrentUser;
  4. import edu.ucsb.cs156.happiercows.repositories.UserRepository;
  5. import io.swagger.v3.oas.annotations.tags.Tag;
  6. import io.swagger.v3.oas.annotations.Operation;

  7. import java.time.Instant;

  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.http.ResponseEntity;
  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.RestController;

  15. @Tag(name="Current User Information")
  16. @RequestMapping("/api/currentUser")
  17. @RestController
  18. public class UserInfoController extends ApiController {
  19.   @Autowired
  20.   private UserRepository userRepository;
  21.  
  22.   @Operation(summary = "Get information about current user")
  23.   @PreAuthorize("hasRole('ROLE_USER')")
  24.   @GetMapping("")
  25.   public CurrentUser getCurrentUser() {
  26.     return super.getCurrentUser();
  27.   }

  28.   @Operation(summary = "Update user's last online time")
  29.   @PreAuthorize("hasRole('ROLE_USER')")
  30.   @PostMapping("/last-online")
  31.   public ResponseEntity<Instant> updateLastOnline() {
  32.     User user = super.getCurrentUser().getUser();
  33.     Instant timeNow = Instant.now();
  34.     user.setLastOnline(timeNow);
  35.     userRepository.save(user);
  36.     return ResponseEntity.ok().body(timeNow);
  37.   }
  38. }