refactor: 重构并修复博客相关API

This commit is contained in:
2025-12-19 21:06:19 +08:00
parent b69d64f726
commit b0502d4d46
6 changed files with 72 additions and 48 deletions

View File

@@ -2,7 +2,7 @@
import { Button } from "@/components/ui/button";
import { Textarea } from "@/components/ui/textarea";
import { BlogApi } from "@/lib/api";
import { BlogAPI } from "@/lib/api/client";
import { BlogComment } from "@/lib/types/blogComment";
import { Send, Undo2 } from "lucide-react";
import { useEffect, useRef, useState } from "react";
@@ -34,7 +34,7 @@ export function BlogCommentTool({ blogId, onInsertComment, replayTarget, handleC
if (comment.trim().length === 0) return;
try {
const res = await BlogApi.createComment(blogId, comment, replayTarget ? replayTarget.id : undefined);
const res = await BlogAPI.createComment(blogId, comment, replayTarget ? replayTarget.id : undefined);
if (res) {
toast.success('发布成功');
setComment('');

View File

@@ -1,18 +1,18 @@
'use client';
import useSWR from "swr";
import { BlogCommentTool } from "./BlogCommentTool";
import { BlogApi } from "@/lib/api";
import { BlogComment } from "@/lib/types/blogComment";
import { useState } from "react";
import { useUserMe } from "@/hooks/user/use-user-me";
import { BlogAPI } from "@/lib/api/client";
import { useUserStore } from "@/store/useUserStore";
export function BlogComments({ blogId }: { blogId: string }) {
const { data, mutate } = useSWR(
`/api/blog/${blogId}/comments`,
() => BlogApi.getComments(blogId),
() => BlogAPI.getComments(blogId),
)
const { user } = useUserMe();
const { user } = useUserStore();
const insertComment = async (newOne: BlogComment) => {
await mutate(

View File

@@ -1,6 +1,5 @@
'use client';
import { BlogApi } from "@/lib/api";
import { base62 } from "@/lib/utils";
import { useParams, useSearchParams } from "next/navigation";
import useSWR from "swr";
@@ -14,6 +13,7 @@ import rehypeRaw from 'rehype-raw'
import { Skeleton } from "@/components/ui/skeleton";
import { BlogComments } from "./components/BlogComments";
import Image from "next/image";
import { BlogAPI } from "@/lib/api/client";
export default function Blog() {
const params = useParams();
@@ -31,9 +31,7 @@ export default function Blog() {
const password = searchParams.get('p');
const { data, error, isLoading } = useSWR(
`/api/blog/${id}`,
() => BlogApi.get(id, {
password: password || undefined,
}),
() => BlogAPI.getBlog(id, password || undefined),
)
return (

View File

@@ -1,41 +1,41 @@
import { UserApi } from "@/lib/api";
import useSWR from "swr";
// import { UserAPI } from "@/lib/api/client";
// import useSWR from "swr";
export function useUserMe({ onError }: { onError?: (e: any) => void } = {}) {
const isClientSide = typeof window !== 'undefined';
// export function useUserMe({ onError }: { onError?: (e: any) => void } = {}) {
// const isClientSide = typeof window !== 'undefined';
const { data: user, isLoading, error } = useSWR(
'/api/user/me',
async () => {
if (isClientSide && !localStorage.getItem('token')) {
throw Object.assign(new Error('未登录'), { statusCode: -1 });
}
return await UserApi.me();
},
{
onError: (error) => {
if (error.statusCode === 401) {
if (isClientSide) {
localStorage.removeItem('token');
}
}
// const { data: user, isLoading, error } = useSWR(
// '/api/user/me',
// async () => {
// if (isClientSide && !localStorage.getItem('token')) {
// throw Object.assign(new Error('未登录'), { statusCode: -1 });
// }
// return UserAPI.me();
// },
// {
// onError: (error) => {
// if (error.statusCode === 401) {
// if (isClientSide) {
// localStorage.removeItem('token');
// }
// }
onError?.(error);
},
revalidateIfStale: false,
revalidateOnFocus: false,
shouldRetryOnError: (err) => {
if ([-1, 401].includes(err.statusCode)) {
return false;
}
return true;
},
}
);
// onError?.(error);
// },
// revalidateIfStale: false,
// revalidateOnFocus: false,
// shouldRetryOnError: (err) => {
// if ([-1, 401].includes(err.statusCode)) {
// return false;
// }
// return true;
// },
// }
// );
return {
user,
isLoading,
error
}
}
// return {
// user,
// isLoading,
// error
// }
// }

View File

@@ -49,4 +49,5 @@ export * as AuthAPI from './endpoints/auth.client'
export * as UserAPI from './endpoints/user.client'
export * as SmsAPI from './endpoints/sms.client'
export * as AdminAPI from './endpoints/admin.client'
export * as OSSAPI from './endpoints/oss.client'
export * as OSSAPI from './endpoints/oss.client'
export * as BlogAPI from './endpoints/blog.client'

View File

@@ -0,0 +1,25 @@
import { BlogComment } from "@/lib/types/blogComment";
import { clientFetch } from "../client";
export async function getBlog(id: string, password?: string) {
return clientFetch<{
id: string;
title: string;
createdAt: string;
content: string;
}>(`/api/blog/${id}` + (password ? `?p=${password}` : ''));
}
export async function getComments(id: string) {
return clientFetch<BlogComment[]>(`/api/blog/${id}/comments`);
}
export async function createComment(blogId: string, content: string, parentId?: string) {
return clientFetch<BlogComment>(`/api/blog/${blogId}/comment`, {
method: 'POST',
body: JSON.stringify({
content,
parentId: parentId || null,
}),
});
}