refactor(community): extract comment store and post/comment API adapters

This commit is contained in:
zetaloop
2026-02-23 11:04:40 +08:00
parent 8e62b15403
commit 77d23d0c9d
9 changed files with 201 additions and 63 deletions
+50 -3
View File
@@ -1,9 +1,56 @@
import { mockComments } from "@/lib/mock"
import { allow, deny } from "@/lib/policy/assert"
import { addNotification } from "@/lib/api/notifications"
import { useAuthStore } from "@/store/auth"
import { useCommentStore } from "@/store/comments"
import { usePostStore } from "@/store/posts"
export function listComments() {
return mockComments
return useCommentStore.getState().comments
}
export function listCommentsByPost(postId: string) {
return mockComments.filter((comment) => comment.postId === postId)
return useCommentStore.getState().comments.filter((comment) => comment.postId === postId)
}
export function addComment(postId: string, content: string) {
const user = useAuthStore.getState().user
if (!user) {
return deny("AUTH_REQUIRED", "请先登录")
}
const post = usePostStore.getState().posts.find((item) => item.id === postId)
if (!post) {
return deny("NOT_FOUND", "帖子不存在")
}
const comment = useCommentStore.getState().addComment(postId, user, content)
if (!comment) {
return deny("VALIDATION_FAILED", "评论内容不能为空")
}
usePostStore.getState().incrementCommentCount(postId)
addNotification({
type: "community",
title: "帖子收到新评论",
content: `${post.title}》有新的评论`,
link: `/post/${post.id}`,
})
return allow()
}
export function toggleCommentLike(commentId: string) {
const user = useAuthStore.getState().user
if (!user) {
return deny("AUTH_REQUIRED", "请先登录")
}
const comment = useCommentStore.getState().comments.find((item) => item.id === commentId)
if (!comment) {
return deny("NOT_FOUND", "评论不存在")
}
useCommentStore.getState().toggleCommentLike(commentId)
return allow()
}