diff --git a/my-project-backend/src/main/java/com/example/controller/ForumController.java b/my-project-backend/src/main/java/com/example/controller/ForumController.java index 4f8b9df..d799956 100644 --- a/my-project-backend/src/main/java/com/example/controller/ForumController.java +++ b/my-project-backend/src/main/java/com/example/controller/ForumController.java @@ -3,6 +3,7 @@ package com.example.controller; import com.example.entity.RestBean; import com.example.entity.dto.Interact; import com.example.entity.vo.request.TopicCreateVO; +import com.example.entity.vo.request.TopicUpdateVO; import com.example.entity.vo.response.*; import com.example.service.TopicService; import com.example.service.WeatherService; @@ -67,8 +68,9 @@ public class ForumController { } @GetMapping("/topic") - public RestBean topic(@RequestParam @Min(0) int tid){ - return RestBean.success(topicService.getTopic(tid)); + public RestBean topic(@RequestParam @Min(0) int tid, + @RequestAttribute(Const.ATTR_USER_ID) int id){ + return RestBean.success(topicService.getTopic(tid, id)); } @GetMapping("/interact") @@ -84,4 +86,11 @@ public class ForumController { public RestBean> collects(@RequestAttribute(Const.ATTR_USER_ID) int id){ return RestBean.success(topicService.listCollectTopic(id)); } + + @PostMapping("/update-topic") + public RestBean updateTopic(@Valid @RequestBody TopicUpdateVO vo, + @RequestAttribute(Const.ATTR_USER_ID) int id) { + topicService.updateTopic(id, vo); + return RestBean.success(); + } } diff --git a/my-project-backend/src/main/java/com/example/entity/vo/request/TopicUpdateVO.java b/my-project-backend/src/main/java/com/example/entity/vo/request/TopicUpdateVO.java new file mode 100644 index 0000000..876d0ed --- /dev/null +++ b/my-project-backend/src/main/java/com/example/entity/vo/request/TopicUpdateVO.java @@ -0,0 +1,19 @@ +package com.example.entity.vo.request; + +import com.alibaba.fastjson2.JSONObject; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +@Data +public class TopicUpdateVO { + @Min(0) + int id; + @Min(1) + @Max(5) + int type; + @Length(max = 30) + String title; + JSONObject content; +} diff --git a/my-project-backend/src/main/java/com/example/entity/vo/response/AccountVO.java b/my-project-backend/src/main/java/com/example/entity/vo/response/AccountVO.java index 8c4169e..e5beeda 100644 --- a/my-project-backend/src/main/java/com/example/entity/vo/response/AccountVO.java +++ b/my-project-backend/src/main/java/com/example/entity/vo/response/AccountVO.java @@ -6,6 +6,7 @@ import java.util.Date; @Data public class AccountVO { + int id; String username; String email; String role; diff --git a/my-project-backend/src/main/java/com/example/service/TopicService.java b/my-project-backend/src/main/java/com/example/service/TopicService.java index 5ddc28c..8861713 100644 --- a/my-project-backend/src/main/java/com/example/service/TopicService.java +++ b/my-project-backend/src/main/java/com/example/service/TopicService.java @@ -5,6 +5,7 @@ import com.example.entity.dto.Interact; import com.example.entity.dto.Topic; import com.example.entity.dto.TopicType; import com.example.entity.vo.request.TopicCreateVO; +import com.example.entity.vo.request.TopicUpdateVO; import com.example.entity.vo.response.TopicPreviewVO; import com.example.entity.vo.response.TopicTopVO; import com.example.entity.vo.response.TopicDetailVO; @@ -14,9 +15,10 @@ import java.util.List; public interface TopicService extends IService { List listType(); String createTopic(int uid, TopicCreateVO vo); + void updateTopic(int uid, TopicUpdateVO vo); List listTopicByPage(int pageNumber, int type); List topTopics(); - TopicDetailVO getTopic(int tid); + TopicDetailVO getTopic(int tid, int uid); void interact(Interact interact, boolean state); List listCollectTopic(int uid); } diff --git a/my-project-backend/src/main/java/com/example/service/impl/TopicServiceImpl.java b/my-project-backend/src/main/java/com/example/service/impl/TopicServiceImpl.java index c228eeb..baddf0b 100644 --- a/my-project-backend/src/main/java/com/example/service/impl/TopicServiceImpl.java +++ b/my-project-backend/src/main/java/com/example/service/impl/TopicServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.entity.dto.*; import com.example.entity.vo.request.TopicCreateVO; +import com.example.entity.vo.request.TopicUpdateVO; import com.example.entity.vo.response.TopicDetailVO; import com.example.entity.vo.response.TopicPreviewVO; import com.example.entity.vo.response.TopicTopVO; @@ -54,6 +55,17 @@ public class TopicServiceImpl extends ServiceImpl implements return typeMapper.selectList(null); } + @Override + public void updateTopic(int uid, TopicUpdateVO vo) { + baseMapper.update(null, Wrappers.update() + .eq("uid", uid) + .eq("id", vo.getId()) + .set("title", vo.getTitle()) + .set("content", vo.getContent().toString()) + .set("type", vo.getType()) + ); + } + @Override public String createTopic(int uid, TopicCreateVO vo) { if(!this.textLimitCheck(vo.getContent())) @@ -116,13 +128,13 @@ public class TopicServiceImpl extends ServiceImpl implements } @Override - public TopicDetailVO getTopic(int tid) { + public TopicDetailVO getTopic(int tid, int uid) { TopicDetailVO vo = new TopicDetailVO(); Topic topic = baseMapper.selectById(tid); BeanUtils.copyProperties(topic, vo); TopicDetailVO.Interact interact = new TopicDetailVO.Interact( - hasInteract(tid, topic.getUid(), "like"), - hasInteract(tid, topic.getUid(), "collect") + hasInteract(tid, uid, "like"), + hasInteract(tid, uid, "collect") ); vo.setInteract(interact); TopicDetailVO.User user = new TopicDetailVO.User(); diff --git a/my-project-frontend/src/components/TopicEditor.vue b/my-project-frontend/src/components/TopicEditor.vue index 00da360..41ec637 100644 --- a/my-project-frontend/src/components/TopicEditor.vue +++ b/my-project-frontend/src/components/TopicEditor.vue @@ -1,6 +1,6 @@