diff --git a/src/main/java/com/ptp/ptplatform/config/MybatisPlusConfig.java b/src/main/java/com/ptp/ptplatform/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..5b34097
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/config/MybatisPlusConfig.java
@@ -0,0 +1,19 @@
+package com.ptp.ptplatform.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MybatisPlusConfig {
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(
+                new PaginationInnerInterceptor(DbType.MYSQL)
+        );
+        return interceptor;
+    }
+}
diff --git a/src/main/java/com/ptp/ptplatform/controller/HelpCommentController.java b/src/main/java/com/ptp/ptplatform/controller/HelpCommentController.java
new file mode 100644
index 0000000..15504be
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/controller/HelpCommentController.java
@@ -0,0 +1,24 @@
+package com.ptp.ptplatform.controller;
+
+import com.ptp.ptplatform.service.HelpCommentService;
+import com.ptp.ptplatform.utils.Result;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/help/comments")
+@AllArgsConstructor
+public class HelpCommentController {
+
+    private final HelpCommentService commentService;
+
+    /**
+     * 点赞评论
+     * POST /help/comments/{commentId}/like
+     */
+    @PostMapping("/{commentId}/like")
+    public Result like(@PathVariable int commentId) {
+        commentService.incrementLike(commentId);
+        return Result.ok();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/controller/HelpPostController.java b/src/main/java/com/ptp/ptplatform/controller/HelpPostController.java
new file mode 100644
index 0000000..5fb626c
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/controller/HelpPostController.java
@@ -0,0 +1,83 @@
+package com.ptp.ptplatform.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ptp.ptplatform.entity.HelpComment;
+import com.ptp.ptplatform.entity.HelpPost;
+import com.ptp.ptplatform.entity.SeedPost;
+import com.ptp.ptplatform.service.HelpCommentService;
+import com.ptp.ptplatform.service.HelpPostService;
+import com.ptp.ptplatform.utils.Result;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import java.util.List;
+
+@RestController
+@RequestMapping("/help/posts")
+@AllArgsConstructor
+public class HelpPostController {
+    private final HelpPostService postService;
+    private final HelpCommentService commentService;
+
+    // 创建帖子
+    @PostMapping
+    public Result createPost(@RequestBody HelpPost post) {
+        postService.save(post);
+        return Result.ok().data("post", post);
+    }
+
+
+
+    // 列表分页
+    @GetMapping
+    public Result listPosts(@RequestParam(defaultValue = "1") int page,
+                            @RequestParam(defaultValue = "10") int size) {
+        IPage<HelpPost> ipage = postService.page(
+                new Page<>(page, size),
+                new QueryWrapper<HelpPost>().orderByDesc("create_time")
+        );
+        return Result.ok()
+                .data("records", ipage.getRecords())
+                .data("total",    ipage.getTotal());
+    }
+
+    // 帖子详情 + 评论
+    @GetMapping("/{postId}")
+    public Result getPost(@PathVariable int postId) {
+        HelpPost post = postService.getById(postId);
+        List<HelpComment> comments = commentService.list(
+                new QueryWrapper<HelpComment>()
+                        .eq("post_id", postId)
+                        .orderByAsc("create_time")
+        );
+        return Result.ok()
+                .data("post",     post)
+                .data("comments", comments);
+    }
+
+    // 点赞帖子
+    @PostMapping("/{postId}/like")
+    public Result likePost(@PathVariable int postId) {
+        postService.incrementLike(postId);
+        return Result.ok();
+    }
+    // 发布评论
+    @PostMapping("/{postId}/comments")
+    public Result comment(@PathVariable int postId,
+                          @RequestBody HelpComment comment) {
+        comment.setPostId(postId);
+        commentService.save(comment);
+        postService.incrementReplyCount(postId);
+        return Result.ok()
+                .data("commentId", comment.getId());
+    }
+
+    @Data
+    @AllArgsConstructor
+    static class HelpDetailResponse {
+        private HelpPost post;
+        private List<HelpComment> comments;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/controller/SeedCommentController.java b/src/main/java/com/ptp/ptplatform/controller/SeedCommentController.java
new file mode 100644
index 0000000..635080f
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/controller/SeedCommentController.java
@@ -0,0 +1,19 @@
+package com.ptp.ptplatform.controller;
+
+import com.ptp.ptplatform.service.SeedCommentService;
+import com.ptp.ptplatform.utils.Result;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/seed/comments")
+@AllArgsConstructor
+public class SeedCommentController {
+    private final SeedCommentService commentService;
+
+    @PostMapping("/{commentId}/like")
+    public Result like(@PathVariable int commentId) {
+        commentService.incrementLike(commentId);
+        return Result.ok();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/controller/SeedPostController.java b/src/main/java/com/ptp/ptplatform/controller/SeedPostController.java
new file mode 100644
index 0000000..f481b9b
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/controller/SeedPostController.java
@@ -0,0 +1,82 @@
+package com.ptp.ptplatform.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ptp.ptplatform.entity.HelpPost;
+import com.ptp.ptplatform.entity.SeedComment;
+import com.ptp.ptplatform.entity.SeedPost;
+import com.ptp.ptplatform.service.SeedCommentService;
+import com.ptp.ptplatform.service.SeedPostService;
+import com.ptp.ptplatform.utils.Result;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import java.util.List;
+
+@RestController
+@RequestMapping("/seed/posts")
+@AllArgsConstructor
+public class SeedPostController {
+    private final SeedPostService postService;
+    private final SeedCommentService commentService;
+
+    // 创建帖子
+    @PostMapping
+    public Result createPost(@RequestBody SeedPost post) {
+        postService.save(post);
+        return Result.ok().data("post", post);
+    }
+
+
+    // 列表分页
+    @GetMapping
+    public Result listPosts(@RequestParam(defaultValue = "1") int page,
+                            @RequestParam(defaultValue = "10") int size) {
+        IPage<SeedPost> ipage = postService.page(
+                new Page<>(page, size),
+                new QueryWrapper<SeedPost>().orderByDesc("create_time")
+        );
+        return Result.ok()
+                .data("records", ipage.getRecords())
+                .data("total",    ipage.getTotal());
+    }
+
+    // 帖子详情 + 评论
+    @GetMapping("/{postId}")
+    public Result getPost(@PathVariable int postId) {
+        SeedPost post = postService.getById(postId);
+        List<SeedComment> comments = commentService.list(
+                new QueryWrapper<SeedComment>()
+                        .eq("post_id", postId)
+                        .orderByAsc("create_time")
+        );
+        return Result.ok()
+                .data("post",     post)
+                .data("comments", comments);
+    }
+
+    // 点赞帖子
+    @PostMapping("/{postId}/like")
+    public Result likePost(@PathVariable int postId) {
+        postService.incrementLike(postId);
+        return Result.ok();
+    }
+    // 发布评论
+    @PostMapping("/{postId}/comments")
+    public Result comment(@PathVariable int postId,
+                          @RequestBody SeedComment comment) {
+        comment.setPostId(postId);
+        commentService.save(comment);
+        postService.incrementReplyCount(postId);
+        return Result.ok()
+                .data("commentId", comment.getId());
+    }
+
+    @Data
+    @AllArgsConstructor
+    static class SeedDetailResponse {
+        private SeedPost post;
+        private List<SeedComment> comments;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/entity/HelpComment.java b/src/main/java/com/ptp/ptplatform/entity/HelpComment.java
new file mode 100644
index 0000000..405e91d
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/entity/HelpComment.java
@@ -0,0 +1,19 @@
+package com.ptp.ptplatform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("help_comments")
+public class HelpComment {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;        // 使用包装类型以支持 null
+    private Integer postId;
+    private Integer authorId;
+    private String content;
+    private Integer likeCount;
+    private LocalDateTime createTime;
+}
diff --git a/src/main/java/com/ptp/ptplatform/entity/HelpPost.java b/src/main/java/com/ptp/ptplatform/entity/HelpPost.java
new file mode 100644
index 0000000..b77fe0b
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/entity/HelpPost.java
@@ -0,0 +1,20 @@
+package com.ptp.ptplatform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("help_posts")
+public class HelpPost {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;        // 使用包装类型以支持 null
+    private Integer authorId;
+    private String title;
+    private String content;
+    private Integer likeCount;
+    private Integer replyCount;
+    private LocalDateTime createTime;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/entity/SeedComment.java b/src/main/java/com/ptp/ptplatform/entity/SeedComment.java
new file mode 100644
index 0000000..48121b5
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/entity/SeedComment.java
@@ -0,0 +1,19 @@
+package com.ptp.ptplatform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("seed_comments")
+public class SeedComment {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;        // 使用包装类型以支持 null
+    private Integer postId;
+    private Integer authorId;
+    private String content;
+    private Integer likeCount;
+    private LocalDateTime createTime;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/entity/SeedPost.java b/src/main/java/com/ptp/ptplatform/entity/SeedPost.java
new file mode 100644
index 0000000..b8f74ef
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/entity/SeedPost.java
@@ -0,0 +1,20 @@
+package com.ptp.ptplatform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("seed_posts")
+public class SeedPost {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;        // 使用包装类型以支持 null
+    private Integer authorId;
+    private String title;
+    private String content;
+    private Integer likeCount;
+    private Integer replyCount;
+    private LocalDateTime createTime;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/mapper/HelpCommentMapper.java b/src/main/java/com/ptp/ptplatform/mapper/HelpCommentMapper.java
new file mode 100644
index 0000000..00ed3e3
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/mapper/HelpCommentMapper.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ptp.ptplatform.entity.HelpComment;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface HelpCommentMapper extends BaseMapper<HelpComment> {}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/mapper/HelpPostMapper.java b/src/main/java/com/ptp/ptplatform/mapper/HelpPostMapper.java
new file mode 100644
index 0000000..29260da
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/mapper/HelpPostMapper.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ptp.ptplatform.entity.HelpPost;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface HelpPostMapper extends BaseMapper<HelpPost> {}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/mapper/SeedCommentMapper.java b/src/main/java/com/ptp/ptplatform/mapper/SeedCommentMapper.java
new file mode 100644
index 0000000..d72619b
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/mapper/SeedCommentMapper.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ptp.ptplatform.entity.SeedComment;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SeedCommentMapper extends BaseMapper<SeedComment> {}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/mapper/SeedPostMapper.java b/src/main/java/com/ptp/ptplatform/mapper/SeedPostMapper.java
new file mode 100644
index 0000000..134212d
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/mapper/SeedPostMapper.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ptp.ptplatform.entity.SeedPost;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SeedPostMapper extends BaseMapper<SeedPost> {}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/HelpCommentService.java b/src/main/java/com/ptp/ptplatform/service/HelpCommentService.java
new file mode 100644
index 0000000..dcab060
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/HelpCommentService.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ptp.ptplatform.entity.HelpComment;
+
+public interface HelpCommentService extends IService<HelpComment> {
+    void incrementLike(int commentId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/HelpPostService.java b/src/main/java/com/ptp/ptplatform/service/HelpPostService.java
new file mode 100644
index 0000000..541f927
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/HelpPostService.java
@@ -0,0 +1,9 @@
+package com.ptp.ptplatform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ptp.ptplatform.entity.HelpPost;
+
+public interface HelpPostService extends IService<HelpPost> {
+    void incrementLike(int postId);
+    void incrementReplyCount(int postId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/SeedCommentService.java b/src/main/java/com/ptp/ptplatform/service/SeedCommentService.java
new file mode 100644
index 0000000..dec7f16
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/SeedCommentService.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ptp.ptplatform.entity.SeedComment;
+
+public interface SeedCommentService extends IService<SeedComment> {
+    void incrementLike(int commentId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/SeedPostService.java b/src/main/java/com/ptp/ptplatform/service/SeedPostService.java
new file mode 100644
index 0000000..40605a8
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/SeedPostService.java
@@ -0,0 +1,9 @@
+package com.ptp.ptplatform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ptp.ptplatform.entity.SeedPost;
+
+public interface SeedPostService extends IService<SeedPost> {
+    void incrementLike(int postId);
+    void incrementReplyCount(int postId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/impl/HelpCommentServiceImpl.java b/src/main/java/com/ptp/ptplatform/service/impl/HelpCommentServiceImpl.java
new file mode 100644
index 0000000..dbaed2a
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/impl/HelpCommentServiceImpl.java
@@ -0,0 +1,21 @@
+package com.ptp.ptplatform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ptp.ptplatform.entity.HelpComment;
+import com.ptp.ptplatform.mapper.HelpCommentMapper;
+import com.ptp.ptplatform.service.HelpCommentService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class HelpCommentServiceImpl extends ServiceImpl<HelpCommentMapper, HelpComment> implements HelpCommentService {
+    @Override
+    @Transactional
+    public void incrementLike(int commentId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<HelpComment>()
+                        .eq("id", commentId)
+                        .setSql("like_count = like_count + 1")
+        );
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/impl/HelpPostServiceImpl.java b/src/main/java/com/ptp/ptplatform/service/impl/HelpPostServiceImpl.java
new file mode 100644
index 0000000..5e8d5d0
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/impl/HelpPostServiceImpl.java
@@ -0,0 +1,31 @@
+package com.ptp.ptplatform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ptp.ptplatform.entity.HelpPost;
+import com.ptp.ptplatform.mapper.HelpPostMapper;
+import com.ptp.ptplatform.service.HelpPostService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class HelpPostServiceImpl extends ServiceImpl<HelpPostMapper, HelpPost> implements HelpPostService {
+    @Override
+    @Transactional
+    public void incrementLike(int postId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<HelpPost>()
+                        .eq("id", postId)
+                        .setSql("like_count = like_count + 1")
+        );
+    }
+
+    @Override
+    @Transactional
+    public void incrementReplyCount(int postId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<HelpPost>()
+                        .eq("id", postId)
+                        .setSql("reply_count = reply_count + 1")
+        );
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/impl/SeedCommentServiceImpl.java b/src/main/java/com/ptp/ptplatform/service/impl/SeedCommentServiceImpl.java
new file mode 100644
index 0000000..537194a
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/impl/SeedCommentServiceImpl.java
@@ -0,0 +1,21 @@
+package com.ptp.ptplatform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ptp.ptplatform.entity.SeedComment;
+import com.ptp.ptplatform.mapper.SeedCommentMapper;
+import com.ptp.ptplatform.service.SeedCommentService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class SeedCommentServiceImpl extends ServiceImpl<SeedCommentMapper, SeedComment> implements SeedCommentService {
+    @Override
+    @Transactional
+    public void incrementLike(int commentId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<SeedComment>()
+                        .eq("id", commentId)
+                        .setSql("like_count = like_count + 1")
+        );
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/impl/SeedPostServiceImpl.java b/src/main/java/com/ptp/ptplatform/service/impl/SeedPostServiceImpl.java
new file mode 100644
index 0000000..05cf06c
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/impl/SeedPostServiceImpl.java
@@ -0,0 +1,31 @@
+package com.ptp.ptplatform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ptp.ptplatform.entity.SeedPost;
+import com.ptp.ptplatform.mapper.SeedPostMapper;
+import com.ptp.ptplatform.service.SeedPostService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class SeedPostServiceImpl extends ServiceImpl<SeedPostMapper, SeedPost> implements SeedPostService {
+    @Override
+    @Transactional
+    public void incrementLike(int postId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<SeedPost>()
+                        .eq("id", postId)
+                        .setSql("like_count = like_count + 1")
+        );
+    }
+
+    @Override
+    @Transactional
+    public void incrementReplyCount(int postId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<SeedPost>()
+                        .eq("id", postId)
+                        .setSql("reply_count = reply_count + 1")
+        );
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/utils/resultCode.java b/src/main/java/com/ptp/ptplatform/utils/resultCode.java
index abd93d9..70afcb7 100644
--- a/src/main/java/com/ptp/ptplatform/utils/resultCode.java
+++ b/src/main/java/com/ptp/ptplatform/utils/resultCode.java
@@ -4,5 +4,4 @@
 public interface resultCode {
     public static Integer SUCCESS = 200;
     public static Integer ERROR = 500;
-
 }
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index e1226b0..588221c 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -17,7 +17,8 @@
 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 spring.datasource.url=jdbc:mysql://localhost:3306/ptpdata?useUnicode=true&characterEncoding=utf8
 spring.datasource.username=root
-spring.datasource.password=yumu1412
+#spring.datasource.password=yumu1412
+spring.datasource.password=root
 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
 
 # Hibernate properties
diff --git a/src/test/java/com/ptp/ptplatform/controller/HelpPostControllerTest.java b/src/test/java/com/ptp/ptplatform/controller/HelpPostControllerTest.java
new file mode 100644
index 0000000..61d6aff
--- /dev/null
+++ b/src/test/java/com/ptp/ptplatform/controller/HelpPostControllerTest.java
@@ -0,0 +1,104 @@
+// src/test/java/com/ptp/ptplatform/controller/HelpPostControllerTest.java
+package com.ptp.ptplatform.controller;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ptp.ptplatform.entity.HelpComment;
+import com.ptp.ptplatform.entity.HelpPost;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+
+import java.util.List;
+
+import static org.hamcrest.Matchers.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+@SpringBootTest
+@AutoConfigureMockMvc
+public class HelpPostControllerTest {
+
+    @Autowired MockMvc mockMvc;
+    @Autowired ObjectMapper objectMapper;
+
+    private int postId;
+
+    @BeforeEach
+    void setup() throws Exception {
+        // 1. 创建一个帖子
+        HelpPost post = new HelpPost();
+        post.setAuthorId(1001);
+        post.setTitle("测试帮助帖");
+        post.setContent("帮助区内容示例");
+        String body = objectMapper.writeValueAsString(post);
+
+        // 2. 调接口，拿到完整的 JSON
+        String json = mockMvc.perform(post("/help/posts")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(body))
+                .andExpect(status().isOk())
+                .andReturn().getResponse().getContentAsString();
+
+        // 3. 解析 JSON，取到 data.post.id
+        JsonNode node = objectMapper.readTree(json);
+        postId = node.path("data").path("post").path("id").asInt();
+    }
+
+    @Test
+    void testHelpPostLifecycle() throws Exception {
+        // —— 列表分页 ——
+        mockMvc.perform(get("/help/posts")
+                        .param("page", "1")
+                        .param("size", "5"))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.data.records[0].id", is(postId)));
+
+        // —— 详情（此时无评论） ——
+        mockMvc.perform(get("/help/posts/{id}", postId))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.data.post.id", is(postId)))
+                .andExpect(jsonPath("$.data.comments", hasSize(0)));
+
+        // —— 点赞帖子 ——
+        mockMvc.perform(post("/help/posts/{id}/like", postId))
+                .andExpect(status().isOk());
+
+        mockMvc.perform(get("/help/posts/{id}", postId))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.data.post.likeCount", is(1)));
+
+        // —— 发布评论 ——
+        HelpComment comment = new HelpComment();
+        comment.setAuthorId(2002);
+        comment.setContent("测试帮助评论");
+        String cbody = objectMapper.writeValueAsString(comment);
+
+        String cres = mockMvc.perform(post("/help/posts/{id}/comments", postId)
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(cbody))
+                .andExpect(status().isOk())
+                .andReturn().getResponse().getContentAsString();
+
+        // 解析 commentId
+        JsonNode cnode = objectMapper.readTree(cres);
+        int commentId = cnode.path("data").path("commentId").asInt();
+
+        // 列详情确认评论出现
+        mockMvc.perform(get("/help/posts/{id}", postId))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.data.comments[0].id", is(commentId)));
+
+        // —— 评论点赞 ——
+        mockMvc.perform(post("/help/comments/{id}/like", commentId))
+                .andExpect(status().isOk());
+
+        mockMvc.perform(get("/help/posts/{id}", postId))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.data.comments[0].likeCount", is(1)));
+    }
+}
diff --git a/src/test/java/com/ptp/ptplatform/controller/SeedPostControllerTest.java b/src/test/java/com/ptp/ptplatform/controller/SeedPostControllerTest.java
new file mode 100644
index 0000000..95c431f
--- /dev/null
+++ b/src/test/java/com/ptp/ptplatform/controller/SeedPostControllerTest.java
@@ -0,0 +1,105 @@
+package com.ptp.ptplatform.controller;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ptp.ptplatform.entity.SeedComment;
+import com.ptp.ptplatform.entity.SeedPost;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+
+import static org.hamcrest.Matchers.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+@SpringBootTest
+@AutoConfigureMockMvc
+public class SeedPostControllerTest {
+
+    @Autowired
+    private MockMvc mockMvc;
+
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    private int postId;
+
+    @BeforeEach
+    void setup() throws Exception {
+        SeedPost post = new SeedPost();
+        post.setAuthorId(3003);
+        post.setTitle("测试求种帖");
+        post.setContent("求种区内容示例");
+        String json = objectMapper.writeValueAsString(post);
+
+        String result = mockMvc.perform(post("/seed/posts")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(json))
+                .andExpect(status().isOk())
+                .andReturn()
+                .getResponse()
+                .getContentAsString();
+
+        // 从 Result.data.post.id 里取出刚创建的 postId
+        JsonNode node = objectMapper.readTree(result);
+        postId = node.path("data").path("post").path("id").asInt();
+    }
+
+    @Test
+    void testSeedPostLifecycle() throws Exception {
+        // 列表分页
+        mockMvc.perform(get("/seed/posts")
+                        .param("page", "1")
+                        .param("size", "5"))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.data.records[0].id", is(postId)));
+
+        // 详情（无评论）
+        mockMvc.perform(get("/seed/posts/{id}", postId))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.data.post.id", is(postId)))
+                .andExpect(jsonPath("$.data.comments", hasSize(0)));
+
+        // 点赞
+        mockMvc.perform(post("/seed/posts/{id}/like", postId))
+                .andExpect(status().isOk());
+
+        mockMvc.perform(get("/seed/posts/{id}", postId))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.data.post.likeCount", is(1)));
+
+        // 发布评论
+        SeedComment comment = new SeedComment();
+        comment.setAuthorId(4004);
+        comment.setContent("测试求种评论");
+        String cjson = objectMapper.writeValueAsString(comment);
+
+        String cres = mockMvc.perform(post("/seed/posts/{id}/comments", postId)
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(cjson))
+                .andExpect(status().isOk())
+                .andReturn()
+                .getResponse()
+                .getContentAsString();
+
+        // 从 Result.data.commentId 中取出 commentId
+        JsonNode cnode = objectMapper.readTree(cres);
+        int commentId = cnode.path("data").path("commentId").asInt();
+
+        mockMvc.perform(get("/seed/posts/{id}", postId))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.data.comments[0].id", is(commentId)));
+
+        // 点赞评论
+        mockMvc.perform(post("/seed/comments/{id}/like", commentId))
+                .andExpect(status().isOk());
+
+        mockMvc.perform(get("/seed/posts/{id}", postId))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.data.comments[0].likeCount", is(1)));
+    }
+}
diff --git a/src/test/resources/application-test.yml b/src/test/resources/application-test.yml
index 45122fa..45b607b 100644
--- a/src/test/resources/application-test.yml
+++ b/src/test/resources/application-test.yml
@@ -2,7 +2,14 @@
 spring:
   application:
     name: PTPlatform-test  # 区分测试环境
-  
+
+  spring:
+    sql:
+      init:
+        mode: always             # 一定要始终执行，不论你用的是哪个 profile
+        schema-locations: classpath:schema.sql
+
+
   # 数据源配置 (H2 内存数据库)
   datasource:
     url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=MYSQL  # 模拟MySQL语法
@@ -10,7 +17,6 @@
     username: sa
     password:
 
-  
   # JPA/Hibernate 配置
   jpa:
     hibernate:
diff --git a/src/test/resources/schema.sql b/src/test/resources/schema.sql
new file mode 100644
index 0000000..677d41c
--- /dev/null
+++ b/src/test/resources/schema.sql
@@ -0,0 +1,40 @@
+CREATE TABLE IF NOT EXISTS help_posts (
+                                          id INT AUTO_INCREMENT PRIMARY KEY,
+                                          author_id INT NOT NULL,
+                                          title VARCHAR(255) NOT NULL,
+                                          content TEXT NOT NULL,
+                                          like_count INT NOT NULL DEFAULT 0,
+                                          reply_count INT NOT NULL DEFAULT 0,
+                                          create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP()
+);
+
+
+CREATE TABLE IF NOT EXISTS help_comments (
+                               id INT AUTO_INCREMENT PRIMARY KEY,
+                               post_id INT NOT NULL,
+                               author_id INT NOT NULL,
+                               content TEXT NOT NULL,
+                               like_count INT NOT NULL DEFAULT 0,
+                               create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
+                               CONSTRAINT fk_help_comments_post FOREIGN KEY (post_id) REFERENCES help_posts(id) ON DELETE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS seed_posts (
+                            id INT AUTO_INCREMENT PRIMARY KEY,
+                            author_id INT NOT NULL,
+                            title VARCHAR(255) NOT NULL,
+                            content TEXT NOT NULL,
+                            like_count INT NOT NULL DEFAULT 0,
+                            reply_count INT NOT NULL DEFAULT 0,
+                            create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP()
+);
+
+CREATE TABLE IF NOT EXISTS seed_comments (
+                               id INT AUTO_INCREMENT PRIMARY KEY,
+                               post_id INT NOT NULL,
+                               author_id INT NOT NULL,
+                               content TEXT NOT NULL,
+                               like_count INT NOT NULL DEFAULT 0,
+                               create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
+                               CONSTRAINT fk_seed_comments_post FOREIGN KEY (post_id) REFERENCES seed_posts(id) ON DELETE CASCADE
+);
