package nju.seec.helper.controller; import nju.seec.helper.aspect.auth.Auth; import nju.seec.helper.dto.LoginDTO; import nju.seec.helper.dto.LoginUser; import nju.seec.helper.dto.ResetPasswordDTO; import nju.seec.helper.dto.UserDTO; import nju.seec.helper.dto.groups.Create; import nju.seec.helper.dto.groups.Modify; import nju.seec.helper.service.UserService; import nju.seec.helper.util.Consts; import nju.seec.helper.util.enums.UserType; import nju.seec.helper.vo.UserVO; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpSession; /** * 用户 * * @author cst */ @RestController @RequestMapping("/api/user") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } /** * 注册 */ @PostMapping("/register") public UserVO register(@Validated(Create.class) @RequestBody UserDTO userDTO) { return userService.createUser(userDTO); } /** * 邮箱登录 */ @PostMapping("/login/email") public UserVO loginByEmail(@Validated @RequestBody LoginDTO loginDTO, HttpSession session) { UserVO userVO = userService.getUserByEmailAndPassword(loginDTO.getUsername(), loginDTO.getPassword()); LoginUser user = new LoginUser() .setId(userVO.getId()) .setName(userVO.getName()) .setType(userVO.getType()); session.setAttribute(Consts.SESSION_USER_NAME, user); // 3小时有效期 session.setMaxInactiveInterval(3 * 60 * 60); return userVO; } /** * 登出 */ @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "登出") @PostMapping("/logout") public void logout(HttpSession session) { session.removeAttribute(Consts.SESSION_USER_NAME); } /** * 修改个人信息 */ @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "修改个人信息") @PutMapping public UserVO modifyUser(LoginUser user, @Validated(Modify.class) @RequestBody UserDTO userDTO, HttpSession session) { UserVO userVO = userService.modifyUser(user, userDTO); user = ((LoginUser) session.getAttribute(Consts.SESSION_USER_NAME)) .setId(userVO.getId()) .setName(userVO.getName()) .setType(userVO.getType()); session.setAttribute(Consts.SESSION_USER_NAME, user); return userVO; } /** * 重设密码 */ @PutMapping("/resetPassword/email") public void resetPasswordByEmail(@Validated @RequestBody ResetPasswordDTO resetPasswordDTO) { userService.resetPasswordByEmail(resetPasswordDTO); } /** * 获取个人信息 */ @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取个人信息") @GetMapping public UserVO getUserInfo(LoginUser user) { return userService.getUserById(user.getId()); } }