feat: 开发中...

This commit is contained in:
2023-04-03 17:24:21 +08:00
parent d1054590cd
commit e2bdd6a674
29 changed files with 386 additions and 218 deletions

View File

@@ -28,7 +28,7 @@ public class AuthenticationFilter extends OncePerRequestFilter {
filterChain.doFilter(request, response);
return;
}
Authentication authentication = (Authentication) session.getAttribute("authenticate");
Authentication authentication = (Authentication) session.getAttribute("Authentication");
if (authentication == null) {
filterChain.doFilter(request, response);
return;

View File

@@ -8,7 +8,7 @@ import org.springframework.web.multipart.MultipartFile;
@Tag(name = "AttachController", description = "附件相关接口")
@RestController
@RequestMapping(value = "/api/v1/attach",produces = MediaType.APPLICATION_JSON_VALUE)
@RequestMapping(value = "/api/v1/attach", produces = MediaType.APPLICATION_JSON_VALUE)
public class AttachController {
@PostMapping("/")
public ResponseVO<Void> createAttach(@RequestBody MultipartFile file) {

View File

@@ -28,6 +28,12 @@ public class UserController {
@Resource
private IUserService userService;
@PostMapping("/")
@Operation(summary = "注册用户")
public ResponseVO<UserInfoResponseVO> registerUser(HttpServletRequest request, @RequestBody @Valid UserCreateRequireVO requireVO) {
return userService.registerUser(request, requireVO);
}
@PostMapping("/login")
@Operation(summary = "登录用户")
public ResponseVO<Void> loginUser(HttpServletRequest request, @RequestBody @Valid UserLoginRequireVO requireVO) {
@@ -40,18 +46,11 @@ public class UserController {
return userService.getCurrentUserInfo();
}
@PostMapping("/")
@Operation(summary = "注册用户")
public ResponseVO<UserInfoResponseVO> register(@RequestBody @Valid UserCreateRequireVO requireVO) {
return userService.createUser(requireVO);
}
@PutMapping("/{userID}/")
@Operation(summary = "更新用户信息")
public ResponseVO<Void> updateUser(
@Parameter(description = "用户ID") @PathVariable UUID userID,
@Parameter(description = "用户信息") @RequestBody @Valid UserUpdateRequireVO requireVO
) {
@Parameter(description = "用户信息") @RequestBody @Valid UserUpdateRequireVO requireVO) {
return userService.updateUser(userID, requireVO);
}
@@ -59,8 +58,7 @@ public class UserController {
@Operation(summary = "查询用户列表")
public ResponseVO<PageableVO<UserInfoResponseVO>> getAllUserInfo(
@Parameter(description = "页码", example = "0") int page,
@Parameter(description = "大小", example = "10") int size
) {
@Parameter(description = "大小", example = "10") int size) {
return userService.getAllUserInfo(PageRequest.of(page, Math.min(size, 100)));
}
@@ -75,8 +73,7 @@ public class UserController {
public ResponseVO<PageableVO<BlogInfoResponseVO>> getUserBlogList(
@Parameter(description = "用户ID") @PathVariable UUID userID,
@Parameter(description = "页码", example = "0") int page,
@Parameter(description = "大小", example = "10") int size
) {
@Parameter(description = "大小", example = "10") int size) {
return userService.getUserBlogList(userID, PageRequest.of(page, Math.min(size, 100)));
}
@@ -85,8 +82,7 @@ public class UserController {
public ResponseVO<PageableVO<AttachInfoResponseVO>> getUserAttachList(
@Parameter(description = "用户ID") @PathVariable UUID userID,
@Parameter(description = "页码", example = "0") int page,
@Parameter(description = "大小", example = "10") int size
) {
@Parameter(description = "大小", example = "10") int size) {
return userService.getUserAttachList(userID, PageRequest.of(page, Math.min(size, 100)));
}
}

View File

@@ -4,6 +4,7 @@ import cn.hamster3.application.blog.entity.BlogEntity;
import cn.hamster3.application.blog.entity.UserEntity;
import cn.hamster3.application.blog.vo.blog.BlogInfoResponseVO;
import cn.hamster3.application.blog.vo.blog.BlogUpdateRequireVO;
import cn.hamster3.application.blog.vo.user.UserInfoResponseVO;
import org.jetbrains.annotations.NotNull;
import org.mapstruct.Mapper;
import org.mapstruct.MappingConstants;
@@ -19,7 +20,18 @@ public interface BlogMapper {
@NotNull
@SuppressWarnings("unused")
default UUID map(@NotNull UserEntity value) {
default UUID mapToUUID(@NotNull UserEntity value) {
return value.getId();
}
default UserInfoResponseVO mapToInfoVO(@NotNull UserEntity value) {
return new UserInfoResponseVO(
value.getId(),
value.getEmail(),
value.getNickname(),
value.getRole(),
value.getCreateTime(),
value.getUpdateTime()
);
}
}

View File

@@ -15,12 +15,12 @@ import org.springframework.data.domain.Pageable;
import java.util.UUID;
public interface IUserService {
@NotNull ResponseVO<UserInfoResponseVO> registerUser(@NotNull HttpServletRequest request, @NotNull UserCreateRequireVO requireVO);
@NotNull ResponseVO<Void> loginUser(@NotNull HttpServletRequest request, @NotNull UserLoginRequireVO requireVO);
@NotNull ResponseVO<UserInfoResponseVO> getCurrentUserInfo();
@NotNull ResponseVO<UserInfoResponseVO> createUser(@NotNull UserCreateRequireVO requireVO);
@NotNull ResponseVO<Void> updateUser(@NotNull UUID userID, @NotNull UserUpdateRequireVO requireVO);
@NotNull ResponseVO<PageableVO<UserInfoResponseVO>> getAllUserInfo(@NotNull Pageable pageable);

View File

@@ -56,34 +56,7 @@ public class UserService implements IUserService {
private AuthenticationManager authenticationManager;
@Override
public @NotNull ResponseVO<Void> loginUser(@NotNull HttpServletRequest request, @NotNull UserLoginRequireVO requireVO) {
Authentication authenticate = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(requireVO.getEmail(), requireVO.getPassword())
);
log.info("authenticate: {}", authenticate);
if (!authenticate.isAuthenticated()) {
return ResponseVO.failed("login failed.");
}
HttpSession session = request.getSession();
session.setAttribute("authenticate", authenticate);
return ResponseVO.success();
}
@Override
public @NotNull ResponseVO<UserInfoResponseVO> getCurrentUserInfo() {
UUID uuid = BlogUtils.getCurrentUserUUID().orElse(null);
if (uuid == null) {
return ResponseVO.unauthorized();
}
return ResponseVO.success(
userRepo.findById(uuid)
.map(o -> userMapper.entityToInfoVO(o))
.orElse(null)
);
}
@Override
public @NotNull ResponseVO<UserInfoResponseVO> createUser(@NotNull UserCreateRequireVO requireVO) {
public @NotNull ResponseVO<UserInfoResponseVO> registerUser(@NotNull HttpServletRequest request, @NotNull UserCreateRequireVO requireVO) {
UserEntity entity = userMapper.voToEntity(requireVO);
entity.setEmail(entity.getEmail().toLowerCase());
@@ -100,9 +73,40 @@ public class UserService implements IUserService {
log.info("prepare to save userinfo: {}", entity);
UserEntity save = userRepo.save(entity);
Authentication authenticate = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(requireVO.getEmail(), requireVO.getPassword())
);
HttpSession session = request.getSession();
session.setAttribute("Authentication", authenticate);
return ResponseVO.success("注册成功!", userMapper.entityToInfoVO(save));
}
@Override
public @NotNull ResponseVO<Void> loginUser(@NotNull HttpServletRequest request, @NotNull UserLoginRequireVO requireVO) {
Authentication authenticate = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(requireVO.getEmail(), requireVO.getPassword())
);
log.info("authenticate: {}", authenticate);
if (!authenticate.isAuthenticated()) {
return ResponseVO.failed("authenticate failed.");
}
HttpSession session = request.getSession();
session.setAttribute("Authentication", authenticate);
return ResponseVO.success("登录成功!", null);
}
@Override
public @NotNull ResponseVO<UserInfoResponseVO> getCurrentUserInfo() {
UUID uuid = BlogUtils.getCurrentUserUUID().orElse(null);
if (uuid == null) {
return ResponseVO.unauthorized();
}
return ResponseVO.success(
userRepo.findById(uuid)
.map(o -> userMapper.entityToInfoVO(o))
.orElse(null));
}
@Override
public @NotNull ResponseVO<Void> updateUser(@NotNull UUID uuid, @NotNull UserUpdateRequireVO requireVO) {
UserEntity userEntity = userRepo.findById(uuid).orElse(null);
@@ -150,8 +154,7 @@ public class UserService implements IUserService {
@Override
public @NotNull ResponseVO<PageableVO<UserInfoResponseVO>> getAllUserInfo(@NotNull Pageable pageable) {
return PageableVO.success(
userRepo.findAll(pageable).map(o -> userMapper.entityToInfoVO(o))
);
userRepo.findAll(pageable).map(o -> userMapper.entityToInfoVO(o)));
}
@Override
@@ -165,15 +168,13 @@ public class UserService implements IUserService {
public @NotNull ResponseVO<PageableVO<BlogInfoResponseVO>> getUserBlogList(@NotNull UUID userID, @NotNull Pageable pageable) {
return PageableVO.success(
blogRepo.findByCreator_IdOrderByCreateTimeDesc(userID, pageable)
.map(o -> blogMapper.entityToInfoVO(o))
);
.map(o -> blogMapper.entityToInfoVO(o)));
}
@Override
public @NotNull ResponseVO<PageableVO<AttachInfoResponseVO>> getUserAttachList(@NotNull UUID userID, @NotNull Pageable pageable) {
return PageableVO.success(
attachRepo.findByCreator_IdOrderByCreateTimeDesc(userID, pageable)
.map(o -> attachMapper.entityToInfoVO(o))
);
.map(o -> attachMapper.entityToInfoVO(o)));
}
}

View File

@@ -1,12 +1,10 @@
package cn.hamster3.application.blog.vo.blog;
import cn.hamster3.application.blog.entity.BlogAttachEntity;
import cn.hamster3.application.blog.entity.UserEntity;
import cn.hamster3.application.blog.vo.user.UserInfoResponseVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.Date;
import java.util.List;
import java.util.Set;
@Data
@@ -15,14 +13,14 @@ public class BlogInfoResponseVO {
private Long id;
private String title;
private String abstracts;
private String password;
// private String password;
private String content;
private Boolean top;
private Boolean publish;
private Set<String> tags;
private List<BlogAttachEntity> attachEntities;
private UserEntity creator;
private UserEntity updater;
// private List<BlogAttachEntity> attachEntities;
private UserInfoResponseVO creator;
private UserInfoResponseVO updater;
private Date createTime;
private Date updateTime;
}

View File

@@ -30,6 +30,6 @@ public class BlogUpdateRequireVO {
private Boolean publish;
@NotNull
@NotNull(message = "标签不能为 null")
private Set<String> tags;
}

View File

@@ -14,8 +14,9 @@ public class UserCreateRequireVO {
@Length(max = 64, message = "邮箱地址最大长度不能超过 64 字符!")
private String email;
@NotBlank(message = "昵称不能为空!")
@Length(min = 1, max = 32, message = "用户昵称不能超过 32 个字符!")
@Length(max = 32, message = "用户昵称不能超过 32 个字符!")
private String nickname;
@NotBlank(message = "密码不能为空!")
@Length(min = 8, max = 32, message = "密码长度必须在 8~32 个字符之间!")
private String password;
}

View File

@@ -1,13 +1,10 @@
package cn.hamster3.application.blog.vo.user;
import cn.hamster3.application.blog.constant.UserRole;
import cn.hamster3.application.blog.entity.AttachEntity;
import cn.hamster3.application.blog.entity.BlogEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@Data
@@ -17,8 +14,8 @@ public class UserInfoResponseVO {
private String email;
private String nickname;
private UserRole role;
private List<BlogEntity> blogEntities;
private List<AttachEntity> attachEntities;
// private List<BlogEntity> blogEntities;
// private List<AttachEntity> attachEntities;
private Date createTime;
private Date updateTime;
}