diff --git a/apps/frontend/app/console/(with-menu)/user/list/components/create-user-editor.tsx b/apps/frontend/app/console/(with-menu)/user/list/components/create-user-editor.tsx index 07898a0..ccd9b7a 100644 --- a/apps/frontend/app/console/(with-menu)/user/list/components/create-user-editor.tsx +++ b/apps/frontend/app/console/(with-menu)/user/list/components/create-user-editor.tsx @@ -11,9 +11,9 @@ import { DrawerTitle, } from "@/components/ui/drawer" import { useState } from "react"; -import { AdminApi } from "@/lib/api"; import { toast } from "sonner"; import { ApiError } from "next/dist/server/api-utils"; +import { AdminAPI } from "@/lib/api/client"; interface CreateUserEditorProps { children: React.ReactNode; @@ -26,7 +26,7 @@ export function CreateUserEditor({ children, onRefresh }: CreateUserEditorProps) event.preventDefault(); const formData = new FormData(event.currentTarget); try { - await AdminApi.user.create({ + await AdminAPI.createUser({ username: formData.get("username")?.toString() || null, nickname: formData.get("nickname")?.toString() || null, email: formData.get("email")?.toString() || null, diff --git a/apps/frontend/app/console/(with-menu)/user/list/components/user-info-editor.tsx b/apps/frontend/app/console/(with-menu)/user/list/components/user-info-editor.tsx index d1a6463..8d26210 100644 --- a/apps/frontend/app/console/(with-menu)/user/list/components/user-info-editor.tsx +++ b/apps/frontend/app/console/(with-menu)/user/list/components/user-info-editor.tsx @@ -17,7 +17,6 @@ import { Label } from "@/components/ui/label" import { useUser } from "@/hooks/admin/user/use-user"; import { User } from "@/lib/types/user"; import { Skeleton } from "@/components/ui/skeleton"; -import { AdminApi } from "@/lib/api"; import { toast } from "sonner"; import { Alert, @@ -27,6 +26,7 @@ import { import { AlertCircle } from "lucide-react"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from "@/components/ui/alert-dialog"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; +import { AdminAPI } from "@/lib/api/client"; export function UserInfoEditor({ onClose, @@ -50,7 +50,7 @@ export function UserInfoEditor({ }) => { try { // setSaveLoading(true); - const res = await AdminApi.user.update(userId, user); + const res = await AdminAPI.updateUser(userId, user); if (res) { toast.success("保存成功"); onUserUpdate(res); @@ -69,7 +69,7 @@ export function UserInfoEditor({ const handleRemove = async (userId: string) => { try { // setRemoveLoading(true); - await AdminApi.user.remove(userId, true); + await AdminAPI.removeUser(userId, true); toast.success("注销成功"); onUserSoftDelete(userId); onClose(); @@ -85,7 +85,7 @@ export function UserInfoEditor({ const handleSetPassword = async (userId: string, password: string) => { try { // setSetPasswordLoading(true); - await AdminApi.user.setPassword(userId, password); + await AdminAPI.setUserPassword(userId, password); toast.success("密码修改成功"); setPasswordDialogOpen(false); } catch (error) { diff --git a/apps/frontend/app/console/(with-menu)/web/blog/components/AddBlog.tsx b/apps/frontend/app/console/(with-menu)/web/blog/components/AddBlog.tsx index 563820b..8c98c0b 100644 --- a/apps/frontend/app/console/(with-menu)/web/blog/components/AddBlog.tsx +++ b/apps/frontend/app/console/(with-menu)/web/blog/components/AddBlog.tsx @@ -12,11 +12,11 @@ import { } from "@/components/ui/dialog" import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; -import { AdminApi } from "@/lib/api"; import { BlogPermission } from "@/lib/types/Blog.Permission.enum"; import { useState } from "react"; import { toast } from "sonner"; import { BlogPermissionCheckBoxs } from "./BlogPermissionCheckBoxs"; +import { AdminAPI } from "@/lib/api/client"; interface AddBlogProps { children: React.ReactNode; @@ -35,7 +35,7 @@ export default function AddBlog({ children, onRefresh }: AddBlogProps) { const handleSubmit = async () => { try { - const res = await AdminApi.web.blog.create({ + const res = await AdminAPI.createBlog({ ...blog, }); if (res) { @@ -62,7 +62,7 @@ export default function AddBlog({ children, onRefresh }: AddBlogProps) { {children} - + 添加博客 diff --git a/apps/frontend/app/console/(with-menu)/web/blog/components/BlogEdit.tsx b/apps/frontend/app/console/(with-menu)/web/blog/components/BlogEdit.tsx index e1ceef9..e7aabe6 100644 --- a/apps/frontend/app/console/(with-menu)/web/blog/components/BlogEdit.tsx +++ b/apps/frontend/app/console/(with-menu)/web/blog/components/BlogEdit.tsx @@ -14,12 +14,12 @@ import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Button } from "@/components/ui/button" import { toast } from "sonner" -import { AdminApi } from "@/lib/api" import useSWR from "swr" import { ApiError } from "next/dist/server/api-utils" import { BlogPermissionCheckBoxs } from "./BlogPermissionCheckBoxs" import { BlogPermission } from "@/lib/types/Blog.Permission.enum" import { SetPasswordDialog } from "./SetPasswordDialog" +import { AdminAPI } from "@/lib/api/client" interface BlogEditProps { id: string; @@ -31,7 +31,7 @@ export default function BlogEdit({ id, children, onRefresh }: BlogEditProps) { const [open, setOpen] = useState(false) const { data: blog, mutate } = useSWR( open ? `/api/admin/web/blog/${id}` : null, - () => AdminApi.web.blog.get(id), + () => AdminAPI.getBlog(id), { revalidateOnFocus: false, revalidateOnReconnect: false, @@ -43,7 +43,7 @@ export default function BlogEdit({ id, children, onRefresh }: BlogEditProps) { const handleSubmit = async () => { if (!blog) return; try { - await AdminApi.web.blog.update(id, { + await AdminAPI.updateBlog(id, { title: blog.title, description: blog.description, contentUrl: blog.contentUrl, @@ -59,7 +59,7 @@ export default function BlogEdit({ id, children, onRefresh }: BlogEditProps) { const handleDelete = async () => { try { - await AdminApi.web.blog.remove(id); + await AdminAPI.removeBlog(id); toast.success("删除成功") setOpen(false); onRefresh(); @@ -73,7 +73,7 @@ export default function BlogEdit({ id, children, onRefresh }: BlogEditProps) { {children} - + 编辑博客 diff --git a/apps/frontend/app/console/(with-menu)/web/blog/components/BlogTable.tsx b/apps/frontend/app/console/(with-menu)/web/blog/components/BlogTable.tsx index a593a63..d7ba560 100644 --- a/apps/frontend/app/console/(with-menu)/web/blog/components/BlogTable.tsx +++ b/apps/frontend/app/console/(with-menu)/web/blog/components/BlogTable.tsx @@ -28,7 +28,7 @@ export default function BlogTable({ blogs, error, onRefresh }: BlogTableProps) { } - Id + Id 标题 描述 文章URL diff --git a/apps/frontend/app/console/(with-menu)/web/blog/components/SetPasswordDialog.tsx b/apps/frontend/app/console/(with-menu)/web/blog/components/SetPasswordDialog.tsx index e12d101..3acbc99 100644 --- a/apps/frontend/app/console/(with-menu)/web/blog/components/SetPasswordDialog.tsx +++ b/apps/frontend/app/console/(with-menu)/web/blog/components/SetPasswordDialog.tsx @@ -13,7 +13,7 @@ import { } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" -import { AdminApi } from "@/lib/api"; +import { AdminAPI } from "@/lib/api/client"; import { base62 } from "@/lib/utils"; import React, { useEffect, useState } from "react"; import { toast } from "sonner"; @@ -32,7 +32,7 @@ export function SetPasswordDialog({ id, children }: SetPasswordDialogProps) { return toast.error('请输入密码'); } - await AdminApi.web.blog.setPassword(id, password).then(() => { + await AdminAPI.setBlogPassword(id, password).then(() => { toast.success('修改成功'); setOpen(false); }).catch(e => { diff --git a/apps/frontend/hooks/admin/user/use-user-list.ts b/apps/frontend/hooks/admin/user/use-user-list.ts index 9b9dbca..1f9cab6 100644 --- a/apps/frontend/hooks/admin/user/use-user-list.ts +++ b/apps/frontend/hooks/admin/user/use-user-list.ts @@ -1,6 +1,7 @@ "use client" -import { list, UserListParams, UserListResponse } from '@/lib/api/admin/user' +import { AdminAPI } from '@/lib/api/client' +import { UserListParams, UserListResponse } from '@/lib/api/endpoints/admin.client' import { useCallback } from 'react' import { toast } from 'sonner' import useSWR from 'swr' @@ -8,7 +9,7 @@ import useSWR from 'swr' export function useUserList(params?: UserListParams) { const { data, error, isLoading, mutate } = useSWR( ['/api/admin/user', params], - () => list(params), + () => AdminAPI.listUsers(params), { onError: (e) => { toast.error(`${e.message || e}`) diff --git a/apps/frontend/hooks/admin/user/use-user.ts b/apps/frontend/hooks/admin/user/use-user.ts index 54d563f..c6bf194 100644 --- a/apps/frontend/hooks/admin/user/use-user.ts +++ b/apps/frontend/hooks/admin/user/use-user.ts @@ -1,4 +1,4 @@ -import { AdminApi } from "@/lib/api"; +import { AdminAPI } from "@/lib/api/client"; import { User } from "@/lib/types/user"; import { toast } from "sonner"; import useSWR from "swr"; @@ -6,7 +6,7 @@ import useSWR from "swr"; export function useUser(userId: string) { const { data, error, isLoading, mutate } = useSWR( ['/api/admin/user', userId], - () => AdminApi.user.get(userId), + () => AdminAPI.getUser(userId), { revalidateOnReconnect: false, revalidateIfStale: false, diff --git a/apps/frontend/hooks/admin/web/blog/use-blog-list.ts b/apps/frontend/hooks/admin/web/blog/use-blog-list.ts index 5289e73..fc28993 100644 --- a/apps/frontend/hooks/admin/web/blog/use-blog-list.ts +++ b/apps/frontend/hooks/admin/web/blog/use-blog-list.ts @@ -1,6 +1,6 @@ "use client" -import { AdminApi } from "@/lib/api"; +import { AdminAPI } from "@/lib/api/client"; import { useCallback } from "react"; import { toast } from "sonner"; import useSWR from "swr"; @@ -8,7 +8,7 @@ import useSWR from "swr"; export function useBlogList() { const { data, error, isLoading, mutate } = useSWR( ['/admin/web/blog'], - () => AdminApi.web.blog.list(), + () => AdminAPI.listBlogs(), { onError: (e) => { toast.error(`${e.message || e}`) diff --git a/apps/frontend/hooks/admin/web/blog/use-oss-store.ts b/apps/frontend/hooks/admin/web/blog/use-oss-store.ts index 0caa88d..4667877 100644 --- a/apps/frontend/hooks/admin/web/blog/use-oss-store.ts +++ b/apps/frontend/hooks/admin/web/blog/use-oss-store.ts @@ -1,5 +1,5 @@ import { useOssSts } from "@/hooks/oss/use-oss-sts"; -import { StsToken } from "@/lib/api/oss"; +import { StsToken } from "@/lib/api/endpoints/oss.client"; import { useEffect } from "react"; export function useOssStore(options: { onStsTokenDataChanged?: (data: StsToken | undefined) => void; } = {}) { diff --git a/apps/frontend/hooks/oss/use-oss-sts.ts b/apps/frontend/hooks/oss/use-oss-sts.ts index 9b5f840..86a05dc 100644 --- a/apps/frontend/hooks/oss/use-oss-sts.ts +++ b/apps/frontend/hooks/oss/use-oss-sts.ts @@ -1,11 +1,11 @@ -// import { OssApi } from "@/lib/api"; +import { OSSAPI } from "@/lib/api/client"; import { toast } from "sonner"; import useSWR from "swr"; export function useOssSts() { const { data: stsTokenData, isLoading, error, mutate } = useSWR( '/api/oss/sts', - // () => OssApi.getStsToken(), + () => OSSAPI.getStsToken(), { shouldRetryOnError: false, // refreshInterval: 59 * 60 * 1000, diff --git a/apps/frontend/lib/api/client.ts b/apps/frontend/lib/api/client.ts index e98a4f8..cc57496 100644 --- a/apps/frontend/lib/api/client.ts +++ b/apps/frontend/lib/api/client.ts @@ -48,4 +48,5 @@ export async function clientFetch( 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' \ No newline at end of file +export * as AdminAPI from './endpoints/admin.client' +export * as OSSAPI from './endpoints/oss.client' \ No newline at end of file diff --git a/apps/frontend/lib/api/endpoints/oss.client.ts b/apps/frontend/lib/api/endpoints/oss.client.ts new file mode 100644 index 0000000..fa39bac --- /dev/null +++ b/apps/frontend/lib/api/endpoints/oss.client.ts @@ -0,0 +1,13 @@ +import { clientFetch } from "../client"; + +export interface StsToken { + AccessKeyId: string; + AccessKeySecret: string; + Expiration: string;// ISO 8601 格式 + SecurityToken: string; + userId: string; +} + +export async function getStsToken() { + return clientFetch('/api/oss/sts'); +} \ No newline at end of file