feat: adding some controller

This commit is contained in:
wzp 2024-12-19 17:48:46 +08:00
parent 40970c1364
commit 3348a73fa1
7 changed files with 70 additions and 10 deletions

View File

@ -33,6 +33,7 @@ dependencies {
annotationProcessor("com.mybatis-flex:mybatis-flex-processor:1.10.2")
// https://mvnrepository.com/artifact/commons-codec/commons-codec
implementation("commons-codec:commons-codec:1.16.1")
implementation("org.springframework.boot:spring-boot-starter-data-redis:3.4.0")
compileOnly("org.projectlombok:lombok")
runtimeOnly("com.mysql:mysql-connector-j")
annotationProcessor("org.projectlombok:lombok")

View File

@ -9,7 +9,10 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.blue.club.annotation.Auth;
import org.blue.club.entities.dto.User;
import org.blue.club.entities.dto.req.LoginRequest;
import org.blue.club.entities.dto.req.RegisterRequest;
import org.blue.club.services.UserServices;
import org.mmga.spring.boot.starter.annotation.AuthMapping;
import org.mmga.spring.boot.starter.entities.PagerData;
import org.mmga.spring.boot.starter.entities.Result;
import org.springframework.web.bind.annotation.*;
@ -24,15 +27,17 @@ public class UserController {
private final UserServices userServices;
@PostMapping("/login")
@AuthMapping
@Operation(description = "用户登录", responses = {@ApiResponse(description = "返回是否登录成功", responseCode = "200")})
public Result<Boolean> login(@RequestBody UserLoginVo user, HttpServletResponse response) {
return userServices.login(user, response);
public Result<User> login(@RequestBody LoginRequest user) {
return userServices.login(user);
}
@AuthMapping
@PutMapping("/create")
@Operation(description = "创建用户", responses = {@ApiResponse(description = "返回创建后的用户")})
public Result<Boolean> createUser(@RequestBody UserRegVo user, HttpServletResponse response) {
return userServices.createUser(user, response);
public Result<User> createUser(@RequestBody RegisterRequest user) {
return userServices.createUser(user);
}
@GetMapping("/info")

View File

@ -0,0 +1,6 @@
package org.blue.club.dao.redis;
import org.springframework.data.repository.CrudRepository;
public interface VerifyDao extends CrudRepository<String, String> {
}

View File

@ -20,7 +20,7 @@ public class User implements IdHolder {
private AuthVo clubAuth;
public boolean hasPermission(Long permissionId) {
return clubAuth.hasPermission(permissionId) || auths.hasPermission(permissionId);
return (clubAuth != null && clubAuth.hasPermission(permissionId)) || (auths != null && auths.hasPermission(permissionId));
}
public boolean isAuth(Long authId) {

View File

@ -1,8 +1,14 @@
package org.blue.club.entities.dto.req;
import io.swagger.v3.oas.annotations.media.Schema;
import org.apache.commons.codec.digest.DigestUtils;
@Schema(name = "登录请求体")
@Schema(name = "用户登录参数")
public record LoginRequest(@Schema(description = "用户名") String username,
@Schema(description = "使用MD5摘要过后的密码hex") String password) {
@Schema(description = "用户密码使用MD5摘要后的hex字符串") String password,
@Schema(description = "验证码密钥") String key,
@Schema(description = "验证码") String code) {
public String sha1HexPassword() {
return DigestUtils.sha1Hex(this.password);
}
}

View File

@ -0,0 +1,15 @@
package org.blue.club.entities.dto.req;
import io.swagger.v3.oas.annotations.media.Schema;
import org.apache.commons.codec.digest.DigestUtils;
@Schema(name = "用户注册参数")
public record RegisterRequest(@Schema(description = "用户名") String username,
@Schema(description = "用户密码使用MD5摘要后的hex字符串") String password,
@Schema(description = "注册用户的权限组ID") Long auth,
@Schema(description = "验证码密钥") String key,
@Schema(description = "验证码") String code) {
public String sha1HexPassword() {
return DigestUtils.sha1Hex(this.password);
}
}

View File

@ -1,28 +1,55 @@
package org.blue.club.services;
import lombok.RequiredArgsConstructor;
import org.apache.commons.codec.digest.DigestUtils;
import org.blue.club.dao.UserDao;
import org.blue.club.dao.redis.VerifyDao;
import org.blue.club.entities.dto.User;
import org.blue.club.entities.dto.req.LoginRequest;
import org.blue.club.entities.dto.req.RegisterRequest;
import org.blue.club.entities.vo.UserVo;
import org.mmga.spring.boot.starter.entities.Result;
import org.mmga.spring.boot.starter.utils.VoUtils;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.util.Optional;
import static org.blue.club.entities.vo.table.UserVoTableDef.USER_VO;
@Service
@RequiredArgsConstructor
public class UserServices {
private final UserDao userDao;
private final VerifyDao verifyDao;
private final VoUtils voUtils;
public Result<User> login(LoginRequest loginRequest, String address) {
UserVo userVo = userDao.selectOneWithRelationsByCondition(USER_VO.NAME.eq(loginRequest.username()).and(USER_VO.PASSWORD.eq(DigestUtils.sha1Hex(loginRequest.password()))));
private boolean isWrongVerifyCode(String key, String code) {
Optional<String> targetCode = verifyDao.findById(key);
if (targetCode.isEmpty()) {
return true;
}
verifyDao.deleteById(key);
return !targetCode.get().equals(code);
}
public Result<User> login(LoginRequest loginRequest) {
if (this.isWrongVerifyCode(loginRequest.key(), loginRequest.code())) {
return Result.failed(HttpStatus.FORBIDDEN, "错误的验证码");
}
UserVo userVo = userDao.selectOneWithRelationsByCondition(USER_VO.NAME.eq(loginRequest.username()).and(USER_VO.PASSWORD.eq(loginRequest.sha1HexPassword())));
if (userVo == null) return Result.failed(HttpStatus.NOT_FOUND, "用户不存在!");
User user = voUtils.vo2DtoSafe(userVo, User.class);
return Result.success(user);
}
public Result<User> createUser(RegisterRequest request) {
if (this.isWrongVerifyCode(request.key(), request.code())) {
return Result.failed(HttpStatus.FORBIDDEN, "错误的验证码");
}
if (userDao.selectCountByCondition(USER_VO.NAME.eq(request.username())) > 0) {
return Result.failed(HttpStatus.CONFLICT, "用户已存在");
}
userDao.insert()
return null;
}
}