添加注释,优化代码,减少魔法值

This commit is contained in:
KilLze
2025-12-29 17:58:40 +08:00
parent cc88ec820c
commit 70a1d0012e
24 changed files with 133 additions and 50 deletions

View File

@@ -2,6 +2,7 @@ package com.bao.dating.common;
/** /**
* 响应状态码枚举 * 响应状态码枚举
* @author KilLze
*/ */
public enum ResultCode { public enum ResultCode {
/** 成功 */ /** 成功 */

View File

@@ -4,16 +4,17 @@ import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS; import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException; import com.aliyun.oss.OSSException;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* 阿里云OSS工具类
* @author KilLze
*/
@Data @Data
@Slf4j @Slf4j
@Component @Component

View File

@@ -0,0 +1,11 @@
package com.bao.dating.common.result;
/**
* 阿里云 OSS 文件上传结果
* @author KilLze
*/
public class AliOssResult {
public static final String IMAGE = "image";
public static final String VIDEO = "video";
}

View File

@@ -0,0 +1,15 @@
package com.bao.dating.common.result;
/**
* 文件上传结果
* @author KilLze
*/
public class FileResult {
public static final String JPG = "jpg";
public static final String JPEG = "jpeg";
public static final String PNG = "png";
public static final String GIF = "gif";
public static final String MP4 = "mp4";
public static final String AVI = "avi";
public static final String MOV = "mov";
}

View File

@@ -0,0 +1,11 @@
package com.bao.dating.common.result;
/**
* 阿里云敏感内容审核结果
* @author KilLze
*/
public class GreenAuditResult {
public static final String PASS = "pass";
public static final String REVIEW = "review";
public static final String BLOCK = "block";
}

View File

@@ -7,6 +7,10 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* WebMvc配置类
* @author KilLze
*/
@Configuration @Configuration
public class WebConfig implements WebMvcConfigurer { public class WebConfig implements WebMvcConfigurer {

View File

@@ -6,14 +6,14 @@ package com.bao.dating.context;
*/ */
public class UserContext { public class UserContext {
private static final ThreadLocal<Long> userHolder = new ThreadLocal<>(); private static final ThreadLocal<Long> USER_HOLDER = new ThreadLocal<>();
/** /**
* 设置当前线程的用户ID * 设置当前线程的用户ID
* @param userId 用户ID * @param userId 用户ID
*/ */
public static void setUserId(Long userId) { public static void setUserId(Long userId) {
userHolder.set(userId); USER_HOLDER.set(userId);
} }
/** /**
@@ -21,13 +21,13 @@ public class UserContext {
* @return 当前用户ID如果未设置则返回null * @return 当前用户ID如果未设置则返回null
*/ */
public static Long getUserId() { public static Long getUserId() {
return userHolder.get(); return USER_HOLDER.get();
} }
/** /**
* 清除当前线程的用户ID * 清除当前线程的用户ID
*/ */
public static void clear() { public static void clear() {
userHolder.remove(); USER_HOLDER.remove();
} }
} }

View File

@@ -13,6 +13,11 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
/**
* 动态接口
*
* @author KilLze
*/
@RestController @RestController
@RequestMapping("/posts") @RequestMapping("/posts")
public class PostController { public class PostController {

View File

@@ -12,6 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
/**
* 用户接口
*
* @author KilLze
*/
@RestController @RestController
@RequestMapping("/user") @RequestMapping("/user")
public class UserController { public class UserController {

View File

@@ -13,11 +13,16 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
@MappedJdbcTypes(JdbcType.VARCHAR) // 也可以使用JdbcType.JSON如果数据库支持的话
/**
* List类型转换成JSON类型
* @author KilLze
*/
@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class) @MappedTypes(List.class)
public class ListToJsonTypeHandler implements TypeHandler<List<String>> { public class ListToJsonTypeHandler implements TypeHandler<List<String>> {
private static final ObjectMapper objectMapper = new ObjectMapper(); private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@Override @Override
public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException { public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
@@ -26,7 +31,7 @@ public class ListToJsonTypeHandler implements TypeHandler<List<String>> {
return; return;
} }
try { try {
String json = objectMapper.writeValueAsString(parameter); String json = OBJECT_MAPPER.writeValueAsString(parameter);
ps.setString(i, json); ps.setString(i, json);
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
throw new SQLException("Error converting list to JSON", e); throw new SQLException("Error converting list to JSON", e);
@@ -56,7 +61,7 @@ public class ListToJsonTypeHandler implements TypeHandler<List<String>> {
return null; return null;
} }
try { try {
return objectMapper.readValue(json, new TypeReference<List<String>>() {}); return OBJECT_MAPPER.readValue(json, new TypeReference<List<String>>() {});
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
throw new SQLException("Error converting JSON to list", e); throw new SQLException("Error converting JSON to list", e);
} }

View File

@@ -5,7 +5,6 @@ import javax.servlet.http.HttpServletResponse;
import com.bao.dating.context.UserContext; import com.bao.dating.context.UserContext;
import com.bao.dating.util.JwtUtil; import com.bao.dating.util.JwtUtil;
import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
@@ -14,6 +13,7 @@ import org.springframework.web.servlet.HandlerInterceptor;
/** /**
* HttpToken拦截器类 * HttpToken拦截器类
* 用于拦截请求并验证JWT token的有效性同时从token中解析用户信息 * 用于拦截请求并验证JWT token的有效性同时从token中解析用户信息
* @author KilLze
*/ */
@Slf4j @Slf4j
@Component @Component

View File

@@ -6,12 +6,17 @@ import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
/**
* 动态Mapper
*
* @author KilLze lanyangyang-yzx
*/
@Mapper @Mapper
public interface PostMapper { public interface PostMapper {
/** /**
* 插入动态 * 插入动态
* *
* @param post * @param post 动态
*/ */
void insert(Post post); void insert(Post post);
@@ -25,24 +30,23 @@ public interface PostMapper {
/** /**
* 根据ID查询动态 * 根据ID查询动态
* *
* @param postId * @param postId 动态ID
* @return * @return 动态
*/ */
Post selectById(Long postId); Post selectById(Long postId);
/** /**
* 根据ID更新动态 * 根据ID更新动态
* *
* @param post * @param post 动态
* @return
*/ */
void updateById(Post post); void updateById(Post post);
/** /**
* 查询点赞数 * 查询点赞数
* *
* @param postId * @param postId 动态ID
* @return * @return 点赞数
*/ */
int selectLikeCount(Long postId); int selectLikeCount(Long postId);
@@ -72,8 +76,8 @@ public interface PostMapper {
/** /**
* 查询点赞数 * 查询点赞数
* *
* @param postId * @param postId 动态ID
* @return * @return 点赞数
*/ */
int selectFavoriteCount(Long postId); int selectFavoriteCount(Long postId);

View File

@@ -1,10 +1,13 @@
package com.bao.dating.mapper; package com.bao.dating.mapper;
import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.dto.UserInfoUpdateDTO;
import com.bao.dating.pojo.entity.Post;
import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.entity.User;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/**
* 用户Mapper
* @author KilLze
*/
@Mapper @Mapper
public interface UserMapper { public interface UserMapper {
@@ -26,7 +29,7 @@ public interface UserMapper {
/** /**
* 更新用户信息 * 更新用户信息
* @param userInfoUpdateDTO * @param userInfoUpdateDTO 用户信息更新参数
*/ */
void updateUserInfoByUserId(UserInfoUpdateDTO userInfoUpdateDTO); void updateUserInfoByUserId(UserInfoUpdateDTO userInfoUpdateDTO);

View File

@@ -7,6 +7,7 @@ import java.util.List;
/** /**
* 动态数据传输对象 * 动态数据传输对象
* @author KilLze
*/ */
@Data @Data
public class PostRequestDTO implements Serializable{ public class PostRequestDTO implements Serializable{

View File

@@ -6,6 +6,10 @@ import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
/**
* 用户信息更新数据传输对象
* @author KilLze
*/
@Data @Data
public class UserInfoUpdateDTO { public class UserInfoUpdateDTO {
private Long userId; private Long userId;
@@ -18,6 +22,4 @@ public class UserInfoUpdateDTO {
private List<String> hobbies; private List<String> hobbies;
private String signature; private String signature;
private LocalDateTime updatedAt; private LocalDateTime updatedAt;
/** 需要清空的字段 */
private List<String> clearFields;
} }

View File

@@ -6,6 +6,7 @@ import java.io.Serializable;
/** /**
* 用户登录数据传输对象 * 用户登录数据传输对象
* @author KilLze
*/ */
@Data @Data
public class UserLoginDTO implements Serializable { public class UserLoginDTO implements Serializable {

View File

@@ -8,6 +8,7 @@ import java.util.List;
/** /**
* 修改内容查询返回数据 * 修改内容查询返回数据
* @author KilLze
*/ */
@Data @Data
public class PostEditVO implements Serializable { public class PostEditVO implements Serializable {

View File

@@ -2,15 +2,17 @@ package com.bao.dating.pojo.vo;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
/** /**
* 用户信息VO * 用户信息VO
* @author KilLze
*/ */
@Data @Data
public class UserInfoVO { public class UserInfoVO implements Serializable {
private Long userId; private Long userId;
private String userName; private String userName;
private String nickname; private String nickname;

View File

@@ -5,6 +5,7 @@ import java.io.Serializable;
/** /**
* 登录返回数据 * 登录返回数据
* @author KilLze
*/ */
@Data @Data
public class UserLoginVO implements Serializable { public class UserLoginVO implements Serializable {

View File

@@ -7,6 +7,10 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
/**
* 动态服务
* @author bao KilLze lanyangyang-yzx yang
*/
public interface PostService { public interface PostService {
/** /**
* 上传媒体文件 * 上传媒体文件
@@ -33,6 +37,7 @@ public interface PostService {
/** /**
* 查询动态详情(用于编辑) * 查询动态详情(用于编辑)
* @param postId 动态ID * @param postId 动态ID
* @return 动态详情
*/ */
PostEditVO getPostForEdit(Long postId); PostEditVO getPostForEdit(Long postId);

View File

@@ -2,13 +2,14 @@ package com.bao.dating.service;
import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.dto.UserInfoUpdateDTO;
import com.bao.dating.pojo.dto.UserLoginDTO; import com.bao.dating.pojo.dto.UserLoginDTO;
import com.bao.dating.pojo.vo.PostEditVO;
import com.bao.dating.pojo.vo.UserInfoVO; import com.bao.dating.pojo.vo.UserInfoVO;
import com.bao.dating.pojo.vo.UserLoginVO; import com.bao.dating.pojo.vo.UserLoginVO;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.List; /**
* 用户服务接口
* @author KilLze
*/
public interface UserService { public interface UserService {
/** /**
* 登录 * 登录
@@ -20,6 +21,7 @@ public interface UserService {
/** /**
* 查询个人信息 * 查询个人信息
* @param userId 动态ID * @param userId 动态ID
* @return 个人信息
*/ */
UserInfoVO getUserInfo(Long userId); UserInfoVO getUserInfo(Long userId);
@@ -40,6 +42,7 @@ public interface UserService {
/** /**
* 更新用户信息 * 更新用户信息
* @param userInfoUpdateDTO 用户信息 * @param userInfoUpdateDTO 用户信息
* @return 更新后的用户信息
*/ */
UserInfoVO updateUserInfo(UserInfoUpdateDTO userInfoUpdateDTO); UserInfoVO updateUserInfo(UserInfoUpdateDTO userInfoUpdateDTO);
} }

View File

@@ -2,6 +2,7 @@ package com.bao.dating.service.impl;
import com.bao.dating.common.aliyun.GreenImageScan; import com.bao.dating.common.aliyun.GreenImageScan;
import com.bao.dating.common.aliyun.GreenTextScan; import com.bao.dating.common.aliyun.GreenTextScan;
import com.bao.dating.common.result.GreenAuditResult;
import com.bao.dating.context.UserContext; import com.bao.dating.context.UserContext;
import com.bao.dating.mapper.PostMapper; import com.bao.dating.mapper.PostMapper;
import com.bao.dating.pojo.dto.PostRequestDTO; import com.bao.dating.pojo.dto.PostRequestDTO;
@@ -25,7 +26,7 @@ import java.util.*;
/** /**
* 动态服务实现类 * 动态服务实现类
* *
* @author KilLze * @author KilLze yang
*/ */
@Service @Service
public class PostServiceImpl implements PostService { public class PostServiceImpl implements PostService {
@@ -144,10 +145,10 @@ public class PostServiceImpl implements PostService {
String imageSuggestion = (String) imageResult.get("suggestion"); String imageSuggestion = (String) imageResult.get("suggestion");
// 根据审核结果设置状态 // 根据审核结果设置状态
if ("block".equals(textSuggestion) || "block".equals(imageSuggestion)) { if (GreenAuditResult.BLOCK.equals(textSuggestion) || GreenAuditResult.BLOCK.equals(imageSuggestion)) {
// 审核未通过,允许用户修改 // 审核未通过,允许用户修改
post.setIsPublic(2); post.setIsPublic(2);
} else if ("review".equals(textSuggestion) || "review".equals(imageSuggestion)) { } else if (GreenAuditResult.REVIEW.equals(textSuggestion) || GreenAuditResult.REVIEW.equals(imageSuggestion)) {
// 待审核,需人工审核 // 待审核,需人工审核
post.setIsPublic(1); post.setIsPublic(1);
} else { } else {
@@ -156,10 +157,10 @@ public class PostServiceImpl implements PostService {
} }
} else { } else {
// 只有文本内容的情况 // 只有文本内容的情况
if ("block".equals(textSuggestion)) { if (GreenAuditResult.BLOCK.equals(textSuggestion)) {
// 审核未通过,允许用户修改 // 审核未通过,允许用户修改
post.setIsPublic(2); post.setIsPublic(2);
} else if ("review".equals(textSuggestion)) { } else if (GreenAuditResult.REVIEW.equals(textSuggestion)) {
// 待审核,需人工审核 // 待审核,需人工审核
post.setIsPublic(1); post.setIsPublic(1);
} else { } else {
@@ -268,10 +269,10 @@ public class PostServiceImpl implements PostService {
String imageSuggestion = (String) imageResult.get("suggestion"); String imageSuggestion = (String) imageResult.get("suggestion");
// 根据审核结果设置状态 // 根据审核结果设置状态
if ("block".equals(textSuggestion) || "block".equals(imageSuggestion)) { if (GreenAuditResult.BLOCK.equals(textSuggestion) || GreenAuditResult.BLOCK.equals(imageSuggestion)) {
// 审核未通过,允许用户修改 // 审核未通过,允许用户修改
post.setIsPublic(2); post.setIsPublic(2);
} else if ("review".equals(textSuggestion) || "review".equals(imageSuggestion)) { } else if (GreenAuditResult.REVIEW.equals(textSuggestion) || GreenAuditResult.REVIEW.equals(imageSuggestion)) {
// 待审核,需人工审核 // 待审核,需人工审核
post.setIsPublic(1); post.setIsPublic(1);
} else { } else {
@@ -280,10 +281,10 @@ public class PostServiceImpl implements PostService {
} }
} else { } else {
// 只有文本内容的情况 // 只有文本内容的情况
if ("block".equals(textSuggestion)) { if (GreenAuditResult.BLOCK.equals(textSuggestion)) {
// 审核未通过,允许用户修改 // 审核未通过,允许用户修改
post.setIsPublic(2); post.setIsPublic(2);
} else if ("review".equals(textSuggestion)) { } else if (GreenAuditResult.REVIEW.equals(textSuggestion)) {
// 待审核,需人工审核 // 待审核,需人工审核
post.setIsPublic(1); post.setIsPublic(1);
} else { } else {

View File

@@ -3,6 +3,8 @@ package com.bao.dating.service.impl;
import com.bao.dating.common.aliyun.AliOssUtil; import com.bao.dating.common.aliyun.AliOssUtil;
import com.bao.dating.common.aliyun.GreenImageScan; import com.bao.dating.common.aliyun.GreenImageScan;
import com.bao.dating.common.aliyun.GreenTextScan; import com.bao.dating.common.aliyun.GreenTextScan;
import com.bao.dating.common.result.AliOssResult;
import com.bao.dating.common.result.GreenAuditResult;
import com.bao.dating.context.UserContext; import com.bao.dating.context.UserContext;
import com.bao.dating.mapper.UserMapper; import com.bao.dating.mapper.UserMapper;
import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.dto.UserInfoUpdateDTO;
@@ -20,9 +22,7 @@ import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -120,12 +120,11 @@ public class UserServiceImpl implements UserService {
} }
String fileType = FileUtil.getFileType(originalFilename); String fileType = FileUtil.getFileType(originalFilename);
if (!"image".equals(fileType)) { if (!AliOssResult.IMAGE.equals(fileType)) {
throw new RuntimeException("仅支持图片上传"); throw new RuntimeException("仅支持图片上传");
} }
//生成 OSS 路径 //生成 OSS 路径
String dir = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM"));
String extension = FileUtil.getFileExtension(originalFilename); String extension = FileUtil.getFileExtension(originalFilename);
String fileName = UUID.randomUUID().toString().replace("-", "") + "." + extension; String fileName = UUID.randomUUID().toString().replace("-", "") + "." + extension;
Long userId = UserContext.getUserId(); Long userId = UserContext.getUserId();
@@ -165,7 +164,7 @@ public class UserServiceImpl implements UserService {
} }
String fileType = FileUtil.getFileType(originalFilename); String fileType = FileUtil.getFileType(originalFilename);
if (!"image".equals(fileType)) { if (!AliOssResult.IMAGE.equals(fileType)) {
throw new RuntimeException("仅支持图片上传"); throw new RuntimeException("仅支持图片上传");
} }
@@ -228,10 +227,10 @@ public class UserServiceImpl implements UserService {
String suggestion = (String) textResult.get("suggestion"); String suggestion = (String) textResult.get("suggestion");
if ("block".equals(suggestion)) { if (GreenAuditResult.BLOCK.equals(suggestion)) {
throw new RuntimeException("用户信息包含违规内容,修改失败"); throw new RuntimeException("用户信息包含违规内容,修改失败");
} }
if ("review".equals(suggestion)) { if (GreenAuditResult.REVIEW.equals(suggestion)) {
throw new RuntimeException("用户信息需要人工审核,暂无法修改"); throw new RuntimeException("用户信息需要人工审核,暂无法修改");
} }
} }
@@ -254,10 +253,10 @@ public class UserServiceImpl implements UserService {
String suggestion = (String) imageResult.get("suggestion"); String suggestion = (String) imageResult.get("suggestion");
if ("block".equals(suggestion)) { if (GreenAuditResult.BLOCK.equals(suggestion)) {
throw new RuntimeException("头像或背景图不合规,修改失败"); throw new RuntimeException("头像或背景图不合规,修改失败");
} }
if ("review".equals(suggestion)) { if (GreenAuditResult.REVIEW.equals(suggestion)) {
throw new RuntimeException("头像或背景图需要人工审核,暂无法修改"); throw new RuntimeException("头像或背景图需要人工审核,暂无法修改");
} }
} }

View File

@@ -1,5 +1,7 @@
package com.bao.dating.util; package com.bao.dating.util;
import com.bao.dating.common.result.FileResult;
/** /**
* 文件工具类 * 文件工具类
* @author KilLze * @author KilLze
@@ -13,9 +15,9 @@ public class FileUtil {
public static String getFileType(String fileUrl) { public static String getFileType(String fileUrl) {
String extension = getFileExtension(fileUrl); String extension = getFileExtension(fileUrl);
if (extension.equals("jpg") || extension.equals("jpeg") || extension.equals("png") || extension.equals("gif")) { if (FileResult.JPG.equals(extension) || FileResult.JPEG.equals(extension) || FileResult.PNG.equals(extension) || FileResult.GIF.equals(extension)) {
return "image"; return "image";
} else if (extension.equals("mp4") || extension.equals("avi") || extension.equals("mov")) { } else if (FileResult.MP4.equals(extension) || FileResult.AVI.equals(extension) || FileResult.MOV.equals(extension)) {
return "video"; return "video";
} }
return "unknown"; return "unknown";