Просмотр исходного кода

feature: add simple forums apis

ggbocoder 2 лет назад
Родитель
Сommit
bcf12a9d14

+ 7 - 0
db/forumpost.sql

@@ -0,0 +1,7 @@
+CREATE TABLE forum_posts (
+                             post_id BIGINT PRIMARY KEY AUTO_INCREMENT,
+                             user_id BIGINT NOT NULL,
+                             title VARCHAR(255) NOT NULL,
+                             content TEXT,
+                             created_at TIMESTAMP NOT NULL
+);

+ 41 - 0
src/main/java/cn/seecoder/fdroidrepository/Controller/ForumPostController.java

@@ -0,0 +1,41 @@
+package cn.seecoder.fdroidrepository.Controller;
+
+import cn.seecoder.fdroidrepository.DataObject.ForumPost;
+import cn.seecoder.fdroidrepository.Service.ForumPostService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/forum")
+public class ForumPostController {
+    @Autowired
+    private ForumPostService forumPostService;
+
+    @GetMapping("/posts")
+    public ResponseEntity<List<ForumPost>> getAllPosts() {
+        List<ForumPost> posts = forumPostService.getAllPosts();
+        return new ResponseEntity<>(posts, HttpStatus.OK);
+    }
+
+    @GetMapping("/posts/page/{page}")
+    public ResponseEntity<List<ForumPost>> getPostsWithPagination(@PathVariable int page) {
+        List<ForumPost> posts = forumPostService.getPostsWithPagination(page);
+        return new ResponseEntity<>(posts, HttpStatus.OK);
+    }
+
+    @GetMapping("/posts/{postId}")
+    public ResponseEntity<ForumPost> getPostById(@PathVariable Long postId) {
+        ForumPost post = forumPostService.getPostById(postId);
+        return new ResponseEntity<>(post, HttpStatus.OK);
+    }
+
+    @PostMapping("/posts")
+    public ResponseEntity<String> savePost(@RequestBody ForumPost post) {
+        forumPostService.savePost(post);
+        return new ResponseEntity<>("Post saved successfully", HttpStatus.OK);
+    }
+}

+ 20 - 0
src/main/java/cn/seecoder/fdroidrepository/DataObject/ForumPost.java

@@ -0,0 +1,20 @@
+package cn.seecoder.fdroidrepository.DataObject;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public class ForumPost {
+    private Long postId;
+    private Long userId;
+    private String title;
+    private String content;
+    private LocalDateTime createdAt;
+}

+ 45 - 0
src/main/java/cn/seecoder/fdroidrepository/Mapper/ForumPostMapper.java

@@ -0,0 +1,45 @@
+package cn.seecoder.fdroidrepository.Mapper;
+
+import cn.seecoder.fdroidrepository.DataObject.ForumPost;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+
+@Mapper
+public interface ForumPostMapper {
+
+    @Select("SELECT * FROM forum_posts")
+    @Results({
+        @Result(property = "postId", column = "post_id"),
+        @Result(property = "userId", column = "user_id"),
+        @Result(property = "title", column = "title"),
+        @Result(property = "content", column = "content"),
+        @Result(property = "createdAt", column = "created_at")
+    })
+    List<ForumPost> findAll();
+
+    @Select("SELECT * FROM forum_posts ORDER BY created_at DESC LIMIT #{offset}, #{limit}")
+    @Results({
+        @Result(property = "postId", column = "post_id"),
+        @Result(property = "userId", column = "user_id"),
+        @Result(property = "title", column = "title"),
+        @Result(property = "content", column = "content"),
+        @Result(property = "createdAt", column = "created_at")
+    })
+    List<ForumPost> findWithPagination(@Param("offset") int offset, @Param("limit") int limit);
+
+    @Select("SELECT * FROM forum_posts WHERE post_id = #{postId}")
+    @Results({
+        @Result(property = "postId", column = "post_id"),
+        @Result(property = "userId", column = "user_id"),
+        @Result(property = "title", column = "title"),
+        @Result(property = "content", column = "content"),
+        @Result(property = "createdAt", column = "created_at")
+    })
+    ForumPost findById(@Param("postId") Long postId);
+
+    @Insert("INSERT INTO forum_posts (user_id, title, content, created_at) " +
+        "VALUES (#{userId}, #{title}, #{content}, #{createdAt})")
+    void save(ForumPost post);
+}

+ 17 - 0
src/main/java/cn/seecoder/fdroidrepository/Service/ForumPostService.java

@@ -0,0 +1,17 @@
+package cn.seecoder.fdroidrepository.Service;
+
+import cn.seecoder.fdroidrepository.DataObject.ForumPost;
+
+import java.util.List;
+
+// ForumPostService.java
+public interface ForumPostService {
+    List<ForumPost> getAllPosts();
+
+    List<ForumPost> getPostsWithPagination(int page);
+
+    ForumPost getPostById(Long postId);
+
+    void savePost(ForumPost post);
+}
+

+ 40 - 0
src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/ForumPostServiceImpl.java

@@ -0,0 +1,40 @@
+package cn.seecoder.fdroidrepository.Service.ServiceImpl;
+
+import cn.seecoder.fdroidrepository.DataObject.ForumPost;
+import cn.seecoder.fdroidrepository.Mapper.ForumPostMapper;
+import cn.seecoder.fdroidrepository.Service.ForumPostService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+// ForumPostServiceImpl.java
+@Service
+public class ForumPostServiceImpl implements ForumPostService {
+    @Autowired
+    private ForumPostMapper forumPostMapper;
+
+    @Override
+    public List<ForumPost> getAllPosts() {
+        return forumPostMapper.findAll();
+    }
+
+    @Override
+    public List<ForumPost> getPostsWithPagination(int page) {
+        int offset = (page - 1) * 20; // 每页20条
+        int limit = 20;
+        return forumPostMapper.findWithPagination(offset, limit);
+    }
+
+    @Override
+    public ForumPost getPostById(Long postId) {
+        return forumPostMapper.findById(postId);
+    }
+
+    @Override
+    public void savePost(ForumPost post) {
+        post.setCreatedAt(LocalDateTime.now());
+        forumPostMapper.save(post);
+    }
+}