From e5e9e63d9d79f5daa5ce0bd87b56927211b6cfc5 Mon Sep 17 00:00:00 2001 From: novohit Date: Sun, 5 Nov 2023 22:09:40 +0800 Subject: [PATCH] refactor(user): add quota field --- .../server/DataGenerationRunner.java | 5 ++++ .../cloudshare/server/auth/UserContext.java | 4 ++- .../auth/interceptor/LoginInterceptor.java | 4 ++- .../server/common/constant/BizConstant.java | 4 +++ .../user/controller/UserController.java | 6 ++--- ...UserInfoRepDTO.java => UserInfoRepVO.java} | 6 +++-- .../server/user/convert/UserConverter.java | 21 +++++++++++++++ .../server/user/enums/PlanLevel.java | 15 +++++++++++ .../cloudshare/server/user/model/User.java | 13 +++++++++ .../server/user/service/UserService.java | 4 +-- .../user/service/impl/UserServiceImpl.java | 27 ++++++++++--------- 11 files changed, 88 insertions(+), 21 deletions(-) rename server/src/main/java/com/cloudshare/server/user/controller/request/{UserInfoRepDTO.java => UserInfoRepVO.java} (67%) create mode 100644 server/src/main/java/com/cloudshare/server/user/convert/UserConverter.java create mode 100644 server/src/main/java/com/cloudshare/server/user/enums/PlanLevel.java diff --git a/server/src/main/java/com/cloudshare/server/DataGenerationRunner.java b/server/src/main/java/com/cloudshare/server/DataGenerationRunner.java index b40d79d..f751700 100644 --- a/server/src/main/java/com/cloudshare/server/DataGenerationRunner.java +++ b/server/src/main/java/com/cloudshare/server/DataGenerationRunner.java @@ -2,6 +2,8 @@ import cn.hutool.core.util.RandomUtil; import cn.hutool.crypto.SecureUtil; +import com.cloudshare.server.common.constant.BizConstant; +import com.cloudshare.server.user.enums.PlanLevel; import com.cloudshare.server.user.model.User; import com.cloudshare.server.user.repository.UserRepository; import org.springframework.boot.CommandLineRunner; @@ -40,6 +42,9 @@ private User genUser(String username, String password) { user.setSalt(salt); user.setPassword(cryptPassword); user.setAvatar("https://zwx-images-1305338888.cos.ap-guangzhou.myqcloud.com/common/avatar-2023.jpg"); + user.setPlan(PlanLevel.FREE); + user.setTotalQuota(BizConstant.FREE_PLAN_QUOTA); + user.setUsedQuota(0L); return user; } } diff --git a/server/src/main/java/com/cloudshare/server/auth/UserContext.java b/server/src/main/java/com/cloudshare/server/auth/UserContext.java index d7e6bda..460c78d 100644 --- a/server/src/main/java/com/cloudshare/server/auth/UserContext.java +++ b/server/src/main/java/com/cloudshare/server/auth/UserContext.java @@ -9,6 +9,8 @@ public record UserContext( String username, String phone, String avatar, - Integer scope + Integer scope, + Long totalQuota, + Long usedQuota ) { } diff --git a/server/src/main/java/com/cloudshare/server/auth/interceptor/LoginInterceptor.java b/server/src/main/java/com/cloudshare/server/auth/interceptor/LoginInterceptor.java index 43c6c30..43b1b2e 100644 --- a/server/src/main/java/com/cloudshare/server/auth/interceptor/LoginInterceptor.java +++ b/server/src/main/java/com/cloudshare/server/auth/interceptor/LoginInterceptor.java @@ -74,7 +74,9 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons user.getUsername(), user.getPhone(), user.getAvatar(), - 1 + 1, + user.getTotalQuota(), + user.getUsedQuota() ); BeanUtils.copyProperties(user, userContext); log.info("登录用户 user:[{}]", userContext); diff --git a/server/src/main/java/com/cloudshare/server/common/constant/BizConstant.java b/server/src/main/java/com/cloudshare/server/common/constant/BizConstant.java index ef36e0b..faa4153 100644 --- a/server/src/main/java/com/cloudshare/server/common/constant/BizConstant.java +++ b/server/src/main/java/com/cloudshare/server/common/constant/BizConstant.java @@ -14,4 +14,8 @@ public final class BizConstant { public static final Long ROOT_PARENT_ID = 0L; + /** + * 默认空间 1GB + */ + public static final Long FREE_PLAN_QUOTA = 1024 * 1024 * 1024L; } diff --git a/server/src/main/java/com/cloudshare/server/user/controller/UserController.java b/server/src/main/java/com/cloudshare/server/user/controller/UserController.java index aaa3db5..e988c1f 100644 --- a/server/src/main/java/com/cloudshare/server/user/controller/UserController.java +++ b/server/src/main/java/com/cloudshare/server/user/controller/UserController.java @@ -1,6 +1,6 @@ package com.cloudshare.server.user.controller; -import com.cloudshare.server.user.controller.request.UserInfoRepDTO; +import com.cloudshare.server.user.controller.request.UserInfoRepVO; import com.cloudshare.server.user.controller.request.UserLoginReqDTO; import com.cloudshare.server.user.controller.request.UserRegisterReqDTO; import com.cloudshare.server.user.controller.request.UserUpdateReqDTO; @@ -40,8 +40,8 @@ public Response checkUsername(@RequestParam("username") @NotBlank Strin } @GetMapping - public Response getUserInfo() { - UserInfoRepDTO repDTO = userService.getUserInfo(); + public Response getUserInfo() { + UserInfoRepVO repDTO = userService.getUserInfo(); return Response.success(repDTO); } diff --git a/server/src/main/java/com/cloudshare/server/user/controller/request/UserInfoRepDTO.java b/server/src/main/java/com/cloudshare/server/user/controller/request/UserInfoRepVO.java similarity index 67% rename from server/src/main/java/com/cloudshare/server/user/controller/request/UserInfoRepDTO.java rename to server/src/main/java/com/cloudshare/server/user/controller/request/UserInfoRepVO.java index a9d42b4..c9ebd44 100644 --- a/server/src/main/java/com/cloudshare/server/user/controller/request/UserInfoRepDTO.java +++ b/server/src/main/java/com/cloudshare/server/user/controller/request/UserInfoRepVO.java @@ -4,12 +4,14 @@ * @author novo * @since 2023/10/6 */ -public record UserInfoRepDTO( +public record UserInfoRepVO( Long id, String username, String phone, String avatar, Long rootId, - String rootName + String rootName, + Long totalQuota, + Long usedQuota ) { } diff --git a/server/src/main/java/com/cloudshare/server/user/convert/UserConverter.java b/server/src/main/java/com/cloudshare/server/user/convert/UserConverter.java new file mode 100644 index 0000000..236a5e2 --- /dev/null +++ b/server/src/main/java/com/cloudshare/server/user/convert/UserConverter.java @@ -0,0 +1,21 @@ +package com.cloudshare.server.user.convert; + +import com.cloudshare.server.auth.UserContext; +import com.cloudshare.server.user.controller.request.UserInfoRepVO; +import com.cloudshare.server.user.model.User; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +/** + * @author novo + * @since 2023/10/8 + */ +@Mapper(componentModel = "spring") +public interface UserConverter { + + UserInfoRepVO DO2VO(User user); + + @Mapping(target = "rootName", constant = "/") + @Mapping(target = "rootId", constant = "0L") + UserInfoRepVO Context2VO(UserContext user); +} diff --git a/server/src/main/java/com/cloudshare/server/user/enums/PlanLevel.java b/server/src/main/java/com/cloudshare/server/user/enums/PlanLevel.java new file mode 100644 index 0000000..aa41855 --- /dev/null +++ b/server/src/main/java/com/cloudshare/server/user/enums/PlanLevel.java @@ -0,0 +1,15 @@ +package com.cloudshare.server.user.enums; + +/** + * @author novo + * @since 2023/11/5 + */ +public enum PlanLevel { + + FREE, + + PLUS, + + ; + +} diff --git a/server/src/main/java/com/cloudshare/server/user/model/User.java b/server/src/main/java/com/cloudshare/server/user/model/User.java index 76ed4fc..1966c05 100644 --- a/server/src/main/java/com/cloudshare/server/user/model/User.java +++ b/server/src/main/java/com/cloudshare/server/user/model/User.java @@ -1,12 +1,15 @@ package com.cloudshare.server.user.model; import com.cloudshare.server.common.BaseModel; +import com.cloudshare.server.user.enums.PlanLevel; import lombok.Data; import lombok.EqualsAndHashCode; import org.hibernate.annotations.Comment; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @@ -48,4 +51,14 @@ public class User extends BaseModel { @Column(length = 255) @Comment("头像") private String avatar; + + @Comment("会员等级") + @Enumerated(value = EnumType.STRING) + private PlanLevel plan; + + @Comment("总空间") + private Long totalQuota; + + @Comment("已使用空间") + private Long usedQuota; } diff --git a/server/src/main/java/com/cloudshare/server/user/service/UserService.java b/server/src/main/java/com/cloudshare/server/user/service/UserService.java index 20c31b3..5714e71 100644 --- a/server/src/main/java/com/cloudshare/server/user/service/UserService.java +++ b/server/src/main/java/com/cloudshare/server/user/service/UserService.java @@ -1,6 +1,6 @@ package com.cloudshare.server.user.service; -import com.cloudshare.server.user.controller.request.UserInfoRepDTO; +import com.cloudshare.server.user.controller.request.UserInfoRepVO; import com.cloudshare.server.user.controller.request.UserLoginReqDTO; import com.cloudshare.server.user.controller.request.UserRegisterReqDTO; import com.cloudshare.server.user.controller.request.UserUpdateReqDTO; @@ -21,7 +21,7 @@ public interface UserService { User findById(Long userId); - UserInfoRepDTO getUserInfo(); + UserInfoRepVO getUserInfo(); String login(LoginType loginType, AuthUser authUser); diff --git a/server/src/main/java/com/cloudshare/server/user/service/impl/UserServiceImpl.java b/server/src/main/java/com/cloudshare/server/user/service/impl/UserServiceImpl.java index 46c1145..59ebbd6 100644 --- a/server/src/main/java/com/cloudshare/server/user/service/impl/UserServiceImpl.java +++ b/server/src/main/java/com/cloudshare/server/user/service/impl/UserServiceImpl.java @@ -6,11 +6,14 @@ import com.cloudshare.lock.lock.ILock; import com.cloudshare.server.auth.UserContext; import com.cloudshare.server.auth.UserContextThreadHolder; -import com.cloudshare.server.user.controller.request.UserInfoRepDTO; +import com.cloudshare.server.common.constant.BizConstant; +import com.cloudshare.server.user.controller.request.UserInfoRepVO; import com.cloudshare.server.user.controller.request.UserLoginReqDTO; import com.cloudshare.server.user.controller.request.UserRegisterReqDTO; import com.cloudshare.server.user.controller.request.UserUpdateReqDTO; +import com.cloudshare.server.user.convert.UserConverter; import com.cloudshare.server.user.enums.LoginType; +import com.cloudshare.server.user.enums.PlanLevel; import com.cloudshare.server.user.model.User; import com.cloudshare.server.user.model.UserAuth; import com.cloudshare.server.user.repository.UserAuthRepository; @@ -23,7 +26,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Objects; import java.util.Optional; /** @@ -39,10 +41,14 @@ public class UserServiceImpl implements UserService { private final ILock lock; - public UserServiceImpl(UserRepository userRepository, UserAuthRepository userAuthRepository, ILock lock) { + private final UserConverter userConverter; + + public UserServiceImpl(UserRepository userRepository, UserAuthRepository userAuthRepository, ILock lock, + UserConverter userConverter) { this.userRepository = userRepository; this.userAuthRepository = userAuthRepository; this.lock = lock; + this.userConverter = userConverter; } @Override @@ -60,6 +66,9 @@ public Long register(UserRegisterReqDTO reqDTO) { String cryptPassword = SecureUtil.md5(salt + reqDTO.password()); user.setSalt(salt); user.setPassword(cryptPassword); + user.setPlan(PlanLevel.FREE); + user.setTotalQuota(BizConstant.FREE_PLAN_QUOTA); + user.setUsedQuota(0L); userRepository.save(user); return user.getId(); } finally { @@ -99,16 +108,10 @@ public User findById(Long userId) { } @Override - public UserInfoRepDTO getUserInfo() { + public UserInfoRepVO getUserInfo() { UserContext userContext = UserContextThreadHolder.getUserContext(); - UserInfoRepDTO repDTO = new UserInfoRepDTO( - userContext.id(), - userContext.username(), - userContext.phone(), - userContext.avatar(), - 0L, - "/"); - return repDTO; + UserInfoRepVO resp = userConverter.Context2VO(userContext); + return resp; } @Override