UserController.java 3.1 KB

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