diff --git a/pom.xml b/pom.xml
index df911c3..531b24c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -123,6 +123,10 @@
4.0.0
test
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
diff --git a/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java b/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java
index 10759c6..9c634f1 100644
--- a/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java
+++ b/src/main/java/top/suyiiyii/sims/common/JwtInterceptor.java
@@ -57,4 +57,7 @@ public class JwtInterceptor implements HandlerInterceptor {
request.setAttribute("userId", userId);
return true;
}
+ public static int getUserIdFromReq(HttpServletRequest request){
+ return (int) request.getAttribute("userId");
+ }
}
diff --git a/src/main/java/top/suyiiyii/sims/controller/UserController.java b/src/main/java/top/suyiiyii/sims/controller/UserController.java
index a9a606d..d52b86f 100644
--- a/src/main/java/top/suyiiyii/sims/controller/UserController.java
+++ b/src/main/java/top/suyiiyii/sims/controller/UserController.java
@@ -1,17 +1,25 @@
package top.suyiiyii.sims.controller;
import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.servlet.http.HttpServletRequest;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.Email;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
+import org.hibernate.validator.constraints.Length;
+import org.hibernate.validator.constraints.Range;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import top.suyiiyii.sims.common.AuthAccess;
+import top.suyiiyii.sims.common.JwtInterceptor;
import top.suyiiyii.sims.common.Result;
import top.suyiiyii.sims.dto.CommonResponse;
import top.suyiiyii.sims.dto.UserDto;
+import top.suyiiyii.sims.entity.User;
import top.suyiiyii.sims.exception.ServiceException;
+import top.suyiiyii.sims.mapper.MpUserMapper;
import top.suyiiyii.sims.service.RoleService;
import top.suyiiyii.sims.service.UserService;
@@ -34,12 +42,14 @@ public class UserController {
@Autowired
UserService userService;
@Autowired
+ MpUserMapper mpUserMapper;
+ @Autowired
RoleService roleService;
@AuthAccess(allowRoles = {"guest"})
@PostMapping("/user/login")
- public Result login(@RequestBody LoginRequest request, HttpServletRequest httpServletRequest) {
+ public Result login(@RequestBody LoginRequest request) {
log.info("login request:{}", request);
if (StrUtil.isBlank(request.getUsername()) || StrUtil.isBlank(request.getPassword())) {
@@ -57,14 +67,20 @@ public class UserController {
@AuthAccess(allowRoles = {"guest"})
@PostMapping("/user/register")
- public Result register(@RequestBody RegisterRequest request) {
+ public Result register(@RequestBody @Valid
+ RegisterRequest request) {
log.info("register request:{}", request);
- if (StrUtil.isBlank(request.getUsername()) || StrUtil.isBlank(request.getPassword())) {
-
- return Result.error("用户名或密码不能为空");
+ // 检查 username 是否已存在
+ if (mpUserMapper.selectOne(new LambdaQueryWrapper(User.class).eq(User::getUsername, request.getUsername())) != null) {
+ throw new ServiceException("用户名已存在");
}
- if (request.getPassword() == null || request.getPassword().length() < 3) {
- throw new ServiceException("密码长度不能小于3位");
+ // 检查 studentId 是否已存在
+ if (mpUserMapper.selectOne(new LambdaQueryWrapper(User.class).eq(User::getStudentId, request.getStudentId())) != null) {
+ throw new ServiceException("学号已存在");
+ }
+ // 检查 email 是否已存在
+ if (mpUserMapper.selectOne(new LambdaQueryWrapper(User.class).eq(User::getEmail, request.getEmail())) != null) {
+ throw new ServiceException("邮箱已存在");
}
userService.register(request);
@@ -100,19 +116,26 @@ public class UserController {
@Operation(description = "获取当前用户信息")
@AuthAccess(allowRoles = {"user"})
@GetMapping("/user/me")
- public Result getSelf() {
- UserDto user = userService.findUser(0);
+ public Result getSelf(HttpServletRequest request) {
+ int userId = JwtInterceptor.getUserIdFromReq(request);
+ UserDto user = userService.findUser(userId);
return Result.success(user);
}
@Data
public static class RegisterRequest {
+ @Length(min = 3, max = 20)
private String username;
+ @Length(min = 6, max = 20)
private String password;
+ @Range(min = 1, max = 1000000000)
private Integer studentId;
+ @Email
private String email;
+ @Length(min = 1, max = 20)
private String grade;
+ @Length(min = 1, max = 20)
private String userGroup;
}
diff --git a/src/main/java/top/suyiiyii/sims/entity/User.java b/src/main/java/top/suyiiyii/sims/entity/User.java
index 7fadf55..9c41bfb 100644
--- a/src/main/java/top/suyiiyii/sims/entity/User.java
+++ b/src/main/java/top/suyiiyii/sims/entity/User.java
@@ -35,10 +35,8 @@ public class User {
@UniqueIndex
@Column(comment = "邮箱", notNull = true)
private String email;
- @UniqueIndex
@Column(comment = "年级", notNull = true)
private String grade;
- @UniqueIndex
@Column(comment = "用户所属团队", notNull = true)
private String userGroup;
}
diff --git a/src/main/java/top/suyiiyii/sims/service/UserService.java b/src/main/java/top/suyiiyii/sims/service/UserService.java
index e7f8f40..884c6a0 100644
--- a/src/main/java/top/suyiiyii/sims/service/UserService.java
+++ b/src/main/java/top/suyiiyii/sims/service/UserService.java
@@ -78,25 +78,9 @@ public class UserService {
public void register(UserController.RegisterRequest req) {
User dbUser = userMapper.selectByUserId(req.getStudentId());
-
- if (req.getUsername() == null || req.getUsername().equals("")) {
- throw new ServiceException("用户名不能为空");
- }
if (dbUser != null) {
throw new ServiceException("账号已经存在");
}
- if (req.getStudentId() == null || req.getStudentId().equals("")) {
- throw new ServiceException("学号不能为空");
- }
- if (req.getPassword() == null || req.getPassword().equals("")) {
- throw new ServiceException("密码不能为空");
- }
- if (req.getEmail() == null || req.getEmail().equals("")) {
- throw new ServiceException("邮箱不能为空");
- }
- if (req.getUserGroup() == null || req.getUserGroup().equals("")) {
- throw new ServiceException("组别不能为空");
- }
User user = modelMapper.map(req, User.class);
mpUserMapper.insert(user);
@@ -124,14 +108,6 @@ public class UserService {
UserDto.setUserGroup(user.getUserGroup());
UserDto.setRoles(new ArrayList<>());
Integer id = user.getId();
- List roles = roleMapper.selectRolesById(id);
- for (Role role : roles) {
- Integer roleId = role.getId();
- // 获取一个角色的名称列表
- List roleNameList = roleMapper.selectRoleNamesByRoleId(roleId);
- // 累加角色名称到用户的角色列表中
- UserDto.getRoles().addAll(roleNameList);
- }
UserDtos.add(UserDto);
}
return UserDtos;
@@ -141,21 +117,15 @@ public class UserService {
UserDto UserDto = new UserDto();
User user = userMapper.selectById(id);
+ if (user == null) {
+ throw new ServiceException("用户不存在");
+ }
UserDto.setUserId(user.getId());
UserDto.setUsername(user.getUsername());
UserDto.setGrade(user.getGrade());
UserDto.setUserGroup(user.getUserGroup());
UserDto.setRoles(new ArrayList<>());
- List roles = roleMapper.selectRolesById(id);
- for (Role role : roles) {
- Integer roleId = role.getId();
- // 获取一个角色的名称列表
- List roleNameList = roleMapper.selectRoleNamesByRoleId(roleId);
- // 累加角色名称到用户的角色列表中
- UserDto.getRoles().addAll(roleNameList);
- }
-
-
+ //TODO: 获取用户角色
return UserDto;
}