diff --git a/pom.xml b/pom.xml
index 2587f61..aa960d4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,6 +19,13 @@
spring-boot-starter
+
+
+ org.mybatis
+ mybatis
+ 3.5.10
+
+
org.springframework.boot
spring-boot-starter-web
@@ -103,6 +110,38 @@
0.2.8
+
+
+ io.jsonwebtoken
+ jjwt-api
+ 0.11.5
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ 0.11.5
+ runtime
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ 0.11.5
+ runtime
+
+
+
+
+ com.aliyun
+ dysmsapi20170525
+ 3.0.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
@@ -123,8 +162,8 @@
maven-compiler-plugin
3.8.1
- 1.8
- 1.8
+ 9
+ 9
UTF-8
diff --git a/src/main/java/com/bao/dating/common/Comments.java b/src/main/java/com/bao/dating/common/Comments.java
new file mode 100644
index 0000000..45e30b4
--- /dev/null
+++ b/src/main/java/com/bao/dating/common/Comments.java
@@ -0,0 +1,19 @@
+package com.bao.dating.common;
+
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+
+/**
+ * 评论表
+ */
+@Data
+public class Comments {
+ private Long comment_id; // 评论ID
+ private String content; // 评论内容
+ private Long user_id; // 评论人ID
+ private Long post_id; // 关联动态ID
+ private LocalDateTime created_at; // 评论时间
+}
diff --git a/src/main/java/com/bao/dating/common/Post.java b/src/main/java/com/bao/dating/common/Post.java
new file mode 100644
index 0000000..10293a3
--- /dev/null
+++ b/src/main/java/com/bao/dating/common/Post.java
@@ -0,0 +1,16 @@
+package com.bao.dating.common;
+
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+/**
+ * 动态表
+ */
+@Data
+public class Post {
+ private Long post_id; // 动态ID
+ private String content; // 动态内容
+ private Long user_id; // 发布人ID
+ private LocalDateTime created_at; // 创建时间
+}
diff --git a/src/main/java/com/bao/dating/common/ResultCode.java b/src/main/java/com/bao/dating/common/ResultCode.java
index baf6419..d577366 100644
--- a/src/main/java/com/bao/dating/common/ResultCode.java
+++ b/src/main/java/com/bao/dating/common/ResultCode.java
@@ -8,7 +8,8 @@ public enum ResultCode {
UNAUTHORIZED(401, "未登录或 Token 失效"),
FORBIDDEN(403, "无权限"),
NOT_FOUND(404, "数据不存在"),
- SYSTEM_ERROR(500, "系统异常");
+ SYSTEM_ERROR(500, "系统异常"),
+ FAIL(500, "操作失败");
private final int code;
private final String msg;
diff --git a/src/main/java/com/bao/dating/util/AliOssUtil.java b/src/main/java/com/bao/dating/common/aliyun/AliOssUtil.java
similarity index 89%
rename from src/main/java/com/bao/dating/util/AliOssUtil.java
rename to src/main/java/com/bao/dating/common/aliyun/AliOssUtil.java
index f4035b3..f0f49fb 100644
--- a/src/main/java/com/bao/dating/util/AliOssUtil.java
+++ b/src/main/java/com/bao/dating/common/aliyun/AliOssUtil.java
@@ -1,4 +1,4 @@
-package com.bao.dating.util;
+package com.bao.dating.common.aliyun;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
@@ -7,12 +7,15 @@ import com.aliyun.oss.OSSException;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
@Data
-@AllArgsConstructor
@Slf4j
+@Component
+@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOssUtil {
private String endpoint;
diff --git a/src/main/java/com/bao/dating/common/aliyun/GreenImageScan.java b/src/main/java/com/bao/dating/common/aliyun/GreenImageScan.java
index 75cacec..cd6c7c2 100644
--- a/src/main/java/com/bao/dating/common/aliyun/GreenImageScan.java
+++ b/src/main/java/com/bao/dating/common/aliyun/GreenImageScan.java
@@ -61,19 +61,24 @@ public class GreenImageScan {
if (scanImageResponse.getStatusCode() == 200) {
- List subResults = scanImageResponse.body.data.results.get(0).getSubResults();
+ List results = scanImageResponse.body.data.results;
- ListIterator listIterator = subResults.listIterator();
- while (listIterator.hasNext()) {
- ScanImageResponseBody.ScanImageResponseBodyDataResultsSubResults item = listIterator.next();
-
- if (!item.suggestion.equals("pass")) {
- resultMap.put("suggestion", item.suggestion);
- resultMap.put("label", item.label);
- return resultMap;
+ // 遍历每一张图片的审核结果
+ for (ScanImageResponseBody.ScanImageResponseBodyDataResults result : results) {
+ List subResults = result.getSubResults();
+
+ // 检查这张图片的所有子审核项
+ for (ScanImageResponseBody.ScanImageResponseBodyDataResultsSubResults subResult : subResults) {
+ // 如果有任何一项未通过审核,则整个审核不通过
+ if (!subResult.suggestion.equals("pass")) {
+ resultMap.put("suggestion", subResult.suggestion);
+ resultMap.put("label", subResult.label);
+ return resultMap;
+ }
}
}
- // 所有审核项都通过时,返回pass结果
+
+ // 所有图片的所有审核项都通过时,返回pass结果
resultMap.put("suggestion", "pass");
resultMap.put("label", "normal");
return resultMap;
@@ -94,4 +99,4 @@ public class GreenImageScan {
return null;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java b/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java
new file mode 100644
index 0000000..1083218
--- /dev/null
+++ b/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java
@@ -0,0 +1,149 @@
+package com.bao.dating.common.aliyun;
+
+import com.aliyun.dysmsapi20170525.Client;
+import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
+import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
+import com.aliyun.teaopenapi.models.Config;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 阿里云短信服务工具类
+ * @author KilLze
+ */
+@Data
+@Slf4j
+@Component
+@ConfigurationProperties(prefix = "aliyun.sms")
+public class SmsUtil {
+
+ /**
+ * 访问密钥ID
+ */
+ private String accessKeyId;
+
+ /**
+ * 访问密钥Secret
+ */
+ private String accessKeySecret;
+
+ /**
+ * 短信服务区域节点
+ */
+ private String regionId = "cn-hangzhou";
+
+ /**
+ * 默认签名名称
+ */
+ private String signName;
+
+ /**
+ * 默认模板代码
+ */
+ private String templateCode;
+
+ /**
+ * 创建短信客户端
+ * @return Client对象
+ * @throws Exception 创建失败时抛出异常
+ */
+ private Client createClient() throws Exception {
+ Config config = new Config()
+ .setAccessKeyId(accessKeyId)
+ .setAccessKeySecret(accessKeySecret)
+ .setEndpoint("dysmsapi.aliyuncs.com");
+ return new Client(config);
+ }
+
+ /**
+ * 发送短信
+ * @param phoneNumber 手机号码
+ * @param templateCode 模板代码(如果为空则使用默认模板代码)
+ * @param templateParam 模板参数(JSON格式字符串,如:{"code":"123456"})
+ * @return 是否发送成功
+ */
+ public boolean sendSms(String phoneNumber, String templateCode, String templateParam) {
+ try {
+ Client client = createClient();
+ SendSmsRequest sendSmsRequest = new SendSmsRequest()
+ .setPhoneNumbers(phoneNumber)
+ .setSignName(signName)
+ .setTemplateCode(templateCode != null ? templateCode : this.templateCode)
+ .setTemplateParam(templateParam);
+
+ SendSmsResponse response = client.sendSms(sendSmsRequest);
+
+ if ("OK".equals(response.getBody().getCode())) {
+ log.info("短信发送成功,手机号:{},请求ID:{}", phoneNumber, response.getBody().getRequestId());
+ return true;
+ } else {
+ log.error("短信发送失败,手机号:{},错误码:{},错误信息:{}",
+ phoneNumber, response.getBody().getCode(), response.getBody().getMessage());
+ return false;
+ }
+ } catch (Exception e) {
+ log.error("发送短信异常,手机号:{},异常信息:{}", phoneNumber, e.getMessage(), e);
+ return false;
+ }
+ }
+
+ /**
+ * 发送短信(使用默认模板代码)
+ * @param phoneNumber 手机号码
+ * @param templateParam 模板参数(JSON格式字符串)
+ * @return 是否发送成功
+ */
+ public boolean sendSms(String phoneNumber, String templateParam) {
+ return sendSms(phoneNumber, null, templateParam);
+ }
+
+ /**
+ * 发送验证码短信
+ * @param phoneNumber 手机号码
+ * @param code 验证码
+ * @return 是否发送成功
+ */
+ public boolean sendVerificationCode(String phoneNumber, String code) {
+ String templateParam = String.format("{\"code\":\"%s\"}", code);
+ return sendSms(phoneNumber, templateParam);
+ }
+
+ /**
+ * 发送验证码短信(使用指定模板代码)
+ * @param phoneNumber 手机号码
+ * @param code 验证码
+ * @param templateCode 模板代码
+ * @return 是否发送成功
+ */
+ public boolean sendVerificationCode(String phoneNumber, String code, String templateCode) {
+ String templateParam = String.format("{\"code\":\"%s\"}", code);
+ return sendSms(phoneNumber, templateCode, templateParam);
+ }
+
+ /**
+ * 发送短信(使用Map参数)
+ * @param phoneNumber 手机号码
+ * @param templateCode 模板代码
+ * @param params 模板参数Map
+ * @return 是否发送成功
+ */
+ public boolean sendSmsWithParams(String phoneNumber, String templateCode, Map params) {
+ StringBuilder jsonBuilder = new StringBuilder("{");
+ boolean first = true;
+ for (Map.Entry entry : params.entrySet()) {
+ if (!first) {
+ jsonBuilder.append(",");
+ }
+ jsonBuilder.append("\"").append(entry.getKey()).append("\":\"")
+ .append(entry.getValue()).append("\"");
+ first = false;
+ }
+ jsonBuilder.append("}");
+ return sendSms(phoneNumber, templateCode, jsonBuilder.toString());
+ }
+}
+
diff --git a/src/main/java/com/bao/dating/config/OssConfiguration.java b/src/main/java/com/bao/dating/config/OssConfiguration.java
deleted file mode 100644
index 01189d1..0000000
--- a/src/main/java/com/bao/dating/config/OssConfiguration.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.bao.dating.config;
-
-
-import com.bao.dating.properties.AliOssProperties;
-import com.bao.dating.util.AliOssUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * 配置类,用于创建AliOssUtil对象
- */
-@Configuration
-@Slf4j
-public class OssConfiguration {
- @Bean
- @ConditionalOnMissingBean
- public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){
- log.info("开始创建阿里云文件上传工具类对象:{}",aliOssProperties);
- return new AliOssUtil(aliOssProperties.getEndpoint(),
- aliOssProperties.getAccessKeyId(),
- aliOssProperties.getAccessKeySecret(),
- aliOssProperties.getBucketName());
- }
-}
diff --git a/src/main/java/com/bao/dating/controller/CommentController.java b/src/main/java/com/bao/dating/controller/CommentController.java
new file mode 100644
index 0000000..4f49f00
--- /dev/null
+++ b/src/main/java/com/bao/dating/controller/CommentController.java
@@ -0,0 +1,52 @@
+package com.bao.dating.controller;
+
+import com.bao.dating.common.Comments;
+import com.bao.dating.common.Result;
+import com.bao.dating.common.ResultCode;
+import com.bao.dating.service.CommentsService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/comments")
+@CrossOrigin
+public class CommentController {
+ @Resource
+ private CommentsService commentsService;
+
+ /**
+ * 添加评论
+ * @param comment 评论对象(含content、userId、dynamicId)
+ */
+ @PostMapping("/add")
+ public Result addComment(@RequestBody Comments comment) {
+ boolean success = commentsService.addComment(comment);
+ return success ?
+ Result.success(ResultCode.SUCCESS, "评论成功") :
+ Result.error(ResultCode.FAIL, "评论失败");
+ }
+
+ /**
+ * 删除评论
+ * @param user_id 评论ID
+ */
+ @DeleteMapping("/delete/{user_id}")
+ public Result deleteComment(@PathVariable Long user_id) {
+ boolean success = commentsService.deleteComment(user_id);
+ return success ?
+ Result.success(ResultCode.SUCCESS, "删除成功") :
+ Result.error(ResultCode.FAIL, "删除失败");
+ }
+
+ /**
+ * 根据动态ID查询评论列表
+ * @param post_id 动态ID
+ */
+ @GetMapping("/list/{post_id}")
+ public Result> getCommentList(@PathVariable Long post_id) {
+ List commentList = commentsService.getCommentByPostId(post_id);
+ return Result.success(ResultCode.SUCCESS, commentList);
+ }
+}
diff --git a/src/main/java/com/bao/dating/controller/PostController.java b/src/main/java/com/bao/dating/controller/PostController.java
index 5343553..ee337d3 100644
--- a/src/main/java/com/bao/dating/controller/PostController.java
+++ b/src/main/java/com/bao/dating/controller/PostController.java
@@ -5,6 +5,7 @@ import com.bao.dating.common.Result;
import com.bao.dating.common.ResultCode;
import com.bao.dating.pojo.dto.PostRequestDTO;
import com.bao.dating.pojo.entity.Post;
+import com.bao.dating.pojo.vo.PostEditVO;
import com.bao.dating.service.PostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -20,7 +21,7 @@ public class PostController {
private PostService postService;
/**
- * 上传媒体文件接口 123321
+ * 上传媒体文件接口
* @param files 媒体文件数组
* @return 上传后的文件URL列表
*/
@@ -53,4 +54,27 @@ public class PostController {
postService.deletePostById(postId);
return Result.success(ResultCode.SUCCESS_DELETE, "动态删除成功", null);
}
+
+ /**
+ * 根据ID查询动态接口
+ * @param postId 动态ID
+ * @return 动态对象
+ */
+ @GetMapping("/{postId}")
+ public Result getPostById(@PathVariable Long postId) {
+ PostEditVO postEditVO = postService.getPostForEdit(postId);
+ return Result.success(ResultCode.SUCCESS,"查询成功", postEditVO);
+ }
+
+ /**
+ * 更新动态接口
+ * @param postId 动态ID
+ * @param postRequestDTO 动态信息
+ * @return 更新后的动态对象
+ */
+ @PutMapping("/{postId}")
+ public Result updatePost(@PathVariable Long postId, @RequestBody PostRequestDTO postRequestDTO) {
+ PostEditVO result = postService.updatePost(postId, postRequestDTO);
+ return Result.success(ResultCode.SUCCESS_REVIEW, "动态更新成功", result);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/bao/dating/controller/PostFavoriteController.java b/src/main/java/com/bao/dating/controller/PostFavoriteController.java
new file mode 100644
index 0000000..fd44e56
--- /dev/null
+++ b/src/main/java/com/bao/dating/controller/PostFavoriteController.java
@@ -0,0 +1,34 @@
+package com.bao.dating.controller;
+
+import com.bao.dating.common.Result;
+import com.bao.dating.common.ResultCode;
+import com.bao.dating.pojo.entity.User;
+import com.bao.dating.service.PostFavoriteService;
+import com.bao.dating.service.PostService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping("/posts")
+public class PostFavoriteController {
+ @Autowired
+ private PostFavoriteService postFavoriteService;
+ @PostMapping("/{post_id}/favorites")
+ public Result