package nju.seec.helper.controller; import nju.seec.helper.aspect.auth.Auth; import nju.seec.helper.controller.response.EmptyResponse; import nju.seec.helper.controller.response.ResourceResponse; import nju.seec.helper.dto.LoginDTO; import nju.seec.helper.dto.LoginUser; import nju.seec.helper.dto.RegisterDTO; 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.web.bind.annotation.*; import javax.servlet.http.HttpSession; import javax.validation.Valid; /** * 用户 * * @author cst */ @RestController @RequestMapping("/api/user") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } /** * 注册 */ @PostMapping("/register") public ResourceResponse register(@Valid @RequestBody RegisterDTO registerDTO) { UserVO userVO = userService.createUser(registerDTO); return ResourceResponse.of(userVO); } /** * 邮箱登录 */ @PostMapping("/login/email") public ResourceResponse emailLogin(@Valid @RequestBody LoginDTO loginDTO, HttpSession session) { UserVO userVO = userService.getUserByEmailAndPassword(loginDTO.getUsername(), loginDTO.getPassword()); LoginUser user = new LoginUser(); user.setId(userVO.getId()); user.setName(userVO.getName()); user.setType(userVO.getType()); session.setAttribute(Consts.SESSION_USER_NAME, user); // 20分钟有效期 session.setMaxInactiveInterval(1200); return ResourceResponse.of(userVO); } /** * 登出 */ @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "登出") @PostMapping("/logout") public EmptyResponse logout(HttpSession session) { session.removeAttribute(Consts.SESSION_USER_NAME); return EmptyResponse.getInstance(); } /** * 获取自身用户信息 */ @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取自身用户信息") @GetMapping public ResourceResponse getUserInfo(LoginUser user) { UserVO userVO = userService.getUserById(user.getId()); return ResourceResponse.of(userVO); } }