UserController.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package nju.seec.helper.controller;
  2. import nju.seec.helper.aspect.auth.Auth;
  3. import nju.seec.helper.dto.*;
  4. import nju.seec.helper.service.UserService;
  5. import nju.seec.helper.util.Consts;
  6. import nju.seec.helper.util.enums.UserType;
  7. import nju.seec.helper.vo.UserVO;
  8. import org.springframework.validation.annotation.Validated;
  9. import org.springframework.web.bind.annotation.*;
  10. import javax.servlet.http.HttpSession;
  11. import javax.validation.Valid;
  12. /**
  13. * 用户
  14. *
  15. * @author cst
  16. */
  17. @RestController
  18. @RequestMapping("/api/user")
  19. public class UserController {
  20. private final UserService userService;
  21. public UserController(UserService userService) {
  22. this.userService = userService;
  23. }
  24. /**
  25. * 注册
  26. */
  27. @PostMapping("/register")
  28. public UserVO register(@Validated @RequestBody RegisterDTO registerDTO) {
  29. return userService.createUser(registerDTO);
  30. }
  31. /**
  32. * 邮箱登录
  33. */
  34. @PostMapping("/login/email")
  35. public UserVO loginByEmail(@Valid @RequestBody LoginDTO loginDTO,
  36. HttpSession session) {
  37. UserVO userVO = userService.getUserByEmailAndPassword(loginDTO.getUsername(), loginDTO.getPassword());
  38. LoginUser user = new LoginUser()
  39. .setId(userVO.getId())
  40. .setName(userVO.getName())
  41. .setType(userVO.getType());
  42. session.setAttribute(Consts.SESSION_USER_NAME, user);
  43. // 3小时有效期
  44. session.setMaxInactiveInterval(3 * 60 * 60);
  45. return userVO;
  46. }
  47. /**
  48. * 登出
  49. */
  50. @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "登出")
  51. @PostMapping("/logout")
  52. public void logout(HttpSession session) {
  53. session.removeAttribute(Consts.SESSION_USER_NAME);
  54. }
  55. /**
  56. * 修改个人信息
  57. */
  58. @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "修改个人信息")
  59. @PutMapping
  60. public UserVO modifyUser(LoginUser user,
  61. @Valid @RequestBody ModifyUserDTO modifyUserDTO,
  62. HttpSession session) {
  63. UserVO userVO = userService.modifyUser(user, modifyUserDTO);
  64. user = ((LoginUser) session.getAttribute(Consts.SESSION_USER_NAME))
  65. .setId(userVO.getId())
  66. .setName(userVO.getName())
  67. .setType(userVO.getType());
  68. session.setAttribute(Consts.SESSION_USER_NAME, user);
  69. return userVO;
  70. }
  71. /**
  72. * 重设密码
  73. */
  74. @PutMapping("/resetPassword/email")
  75. public void resetPasswordByEmail(@Valid @RequestBody ResetPasswordDTO resetPasswordDTO) {
  76. userService.resetPasswordByEmail(resetPasswordDTO);
  77. }
  78. /**
  79. * 获取个人信息
  80. */
  81. @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取个人信息")
  82. @GetMapping
  83. public UserVO getUserInfo(LoginUser user) {
  84. return userService.getUserById(user.getId());
  85. }
  86. }