finish postTagService and test, modify sth in postService

Change-Id: I76b5982f578b5bffe3c48b0afeda219e01307455
diff --git a/src/main/java/com/example/g8backend/service/IPostService.java b/src/main/java/com/example/g8backend/service/IPostService.java
index f81053e..f914946 100644
--- a/src/main/java/com/example/g8backend/service/IPostService.java
+++ b/src/main/java/com/example/g8backend/service/IPostService.java
@@ -2,11 +2,13 @@
 
 import com.example.g8backend.entity.Post;
 import com.baomidou.mybatisplus.extension.service.IService;
+
 import java.util.List;
 
 public interface IPostService extends IService<Post> {
     List<Post> getPostsByUserId(Long userId);
-    Post createPost(Post post);
+    void createPost(Post post);
+    void createPost(Post post, Long[] tagIds);
     Post updatePost(Post post);
     List<Post> getPostsByType(String postType);
     Long getPostLikeCount(Long postId);
diff --git a/src/main/java/com/example/g8backend/service/IPostTagService.java b/src/main/java/com/example/g8backend/service/IPostTagService.java
new file mode 100644
index 0000000..03b16fa
--- /dev/null
+++ b/src/main/java/com/example/g8backend/service/IPostTagService.java
@@ -0,0 +1,16 @@
+package com.example.g8backend.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.example.g8backend.entity.Tag;
+import com.example.g8backend.entity.Post;
+import com.example.g8backend.entity.PostTag;
+
+import java.util.List;
+
+public interface IPostTagService extends IService<PostTag> {
+    boolean save(PostTag postTag);
+    List<Post> getPostsByTagIds(Long[] tagIds);
+    List<Tag> getTagsByPostId(Long postId);
+    boolean removeByIds(PostTag postTag);
+}
diff --git a/src/main/java/com/example/g8backend/service/ITagService.java b/src/main/java/com/example/g8backend/service/ITagService.java
new file mode 100644
index 0000000..0fc589f
--- /dev/null
+++ b/src/main/java/com/example/g8backend/service/ITagService.java
@@ -0,0 +1,7 @@
+package com.example.g8backend.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.example.g8backend.entity.Tag;
+
+public interface ITagService extends IService<Tag> {
+}
diff --git a/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java b/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java
index 09a471e..d40ddd6 100644
--- a/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java
+++ b/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java
@@ -3,9 +3,11 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.g8backend.entity.Post;
+import com.example.g8backend.entity.PostTag;
 import com.example.g8backend.mapper.PostMapper;
 import com.example.g8backend.service.IPostService;
-import jakarta.annotation.Resource;
+import com.example.g8backend.service.IPostTagService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import java.sql.Timestamp;
 import java.util.List;
@@ -15,6 +17,9 @@
     
     private final PostMapper postMapper;
 
+    @Autowired
+    private IPostTagService postTagService;
+
     public PostServiceImpl(PostMapper postMapper) {
         this.postMapper = postMapper;
         this.baseMapper = postMapper; // 重要:设置 baseMapper
@@ -26,10 +31,18 @@
     }
 
     @Override
-    public Post createPost(Post post) {
+    public void createPost(Post post) {
         post.setCreatedAt(new Timestamp(System.currentTimeMillis()));
         save(post);
-        return post;
+    }
+
+    @Override
+    public void createPost(Post post, Long[] tagIds) {
+        post.setCreatedAt(new Timestamp(System.currentTimeMillis()));
+        save(post);
+        for (long tagId : tagIds) {
+            postTagService.save(new PostTag(post.getPostId(), tagId));
+        }
     }
 
     @Override 
diff --git a/src/main/java/com/example/g8backend/service/impl/PostTagServiceImpl.java b/src/main/java/com/example/g8backend/service/impl/PostTagServiceImpl.java
new file mode 100644
index 0000000..0aa0647
--- /dev/null
+++ b/src/main/java/com/example/g8backend/service/impl/PostTagServiceImpl.java
@@ -0,0 +1,42 @@
+package com.example.g8backend.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.g8backend.entity.Post;
+import com.example.g8backend.entity.PostTag;
+import com.example.g8backend.entity.Tag;
+import com.example.g8backend.mapper.PostTagMapper;
+import com.example.g8backend.service.IPostTagService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class PostTagServiceImpl extends ServiceImpl<PostTagMapper, PostTag> implements IPostTagService {
+
+    @Autowired
+    private PostTagMapper postTagMapper;
+
+    @Override
+    public boolean save(PostTag postTag) {
+        return postTagMapper.insert(postTag) > 0;
+    }
+
+    @Override
+    public List<Post> getPostsByTagIds(Long[] tagIds) {
+        if (tagIds == null || tagIds.length == 0) return new ArrayList<>();
+        return postTagMapper.getPostsByTagIds(tagIds);
+    }
+
+    @Override
+    public List<Tag> getTagsByPostId(Long postId) {
+        if (postId == null) return new ArrayList<>();
+        return postTagMapper.getTagsByPostId(postId);
+    }
+
+    @Override
+    public boolean removeByIds(PostTag postTag) {
+        return postTagMapper.deleteByIds(postTag.getPostId(), postTag.getTagId()) > 0;
+    }
+}
diff --git a/src/main/java/com/example/g8backend/service/impl/TagServiceImpl.java b/src/main/java/com/example/g8backend/service/impl/TagServiceImpl.java
new file mode 100644
index 0000000..41b95a3
--- /dev/null
+++ b/src/main/java/com/example/g8backend/service/impl/TagServiceImpl.java
@@ -0,0 +1,12 @@
+package com.example.g8backend.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.g8backend.entity.Tag;
+import com.example.g8backend.mapper.TagMapper;
+import com.example.g8backend.service.ITagService;
+import jakarta.annotation.Resource;
+
+public class TagServiceImpl extends ServiceImpl<TagMapper, Tag> implements ITagService {
+    @Resource
+    private TagMapper tagMapper;
+}