From c9407059308f31d812f3fa365a56b04218df3e6e Mon Sep 17 00:00:00 2001 From: heheer Date: Wed, 17 Dec 2025 14:51:50 +0800 Subject: [PATCH] zod --- packages/global/core/app/type.d.ts | 7 ----- packages/global/support/outLink/api.d.ts | 21 ++++++++++++++- packages/global/support/outLink/constant.ts | 2 +- packages/global/support/outLink/type.d.ts | 7 +++++ .../Publish/{Chat => Playground}/index.tsx | 21 ++++++++------- .../app/detail/Publish/index.tsx | 6 ++--- .../outLink/{chat => playground}/config.ts | 25 +++++++++-------- .../outLink/{chat => playground}/update.ts | 27 +++++++++---------- projects/app/src/pages/chat/index.tsx | 2 +- projects/app/src/web/support/outLink/api.ts | 16 +++++------ 10 files changed, 76 insertions(+), 58 deletions(-) rename projects/app/src/pageComponents/app/detail/Publish/{Chat => Playground}/index.tsx (86%) rename projects/app/src/pages/api/support/outLink/{chat => playground}/config.ts (58%) rename projects/app/src/pages/api/support/outLink/{chat => playground}/update.ts (65%) diff --git a/packages/global/core/app/type.d.ts b/packages/global/core/app/type.d.ts index 9251b57d5..7f2e789d4 100644 --- a/packages/global/core/app/type.d.ts +++ b/packages/global/core/app/type.d.ts @@ -251,10 +251,3 @@ export type TemplateTypeSchemaType = { typeId: string; typeOrder: number; }; - -export type ChatVisibilityConfigType = { - showNodeStatus: boolean; - responseDetail: boolean; - showFullText: boolean; - showRawSource: boolean; -}; diff --git a/packages/global/support/outLink/api.d.ts b/packages/global/support/outLink/api.d.ts index 141254577..04648156e 100644 --- a/packages/global/support/outLink/api.d.ts +++ b/packages/global/support/outLink/api.d.ts @@ -1,5 +1,7 @@ +import { z } from 'zod'; import type { HistoryItemType } from '../../core/chat/type.d'; -import type { OutLinkSchema } from './type.d'; +import type { OutLinkSchema, PlaygroundVisibilityConfigType } from './type.d'; +import { PlaygroundVisibilityConfigSchema } from './type.d'; export type AuthOutLinkInitProps = { outLinkUid: string; @@ -10,3 +12,20 @@ export type AuthOutLinkLimitProps = AuthOutLinkChatProps & { outLink: OutLinkSch export type AuthOutLinkResponse = { uid: string; }; + +export const UpdatePlaygroundVisibilityConfigBodySchema = PlaygroundVisibilityConfigSchema.extend({ + appId: z.string().min(1, 'App ID is required') +}); +export type UpdatePlaygroundVisibilityConfigBody = z.infer< + typeof UpdatePlaygroundVisibilityConfigBodySchema +>; + +export const PlaygroundVisibilityConfigQuerySchema = z.object({ + appId: z.string().min(1, 'App ID is required') +}); +export type PlaygroundVisibilityConfigQuery = z.infer; + +export const PlaygroundVisibilityConfigResponseSchema = PlaygroundVisibilityConfigSchema; +export type PlaygroundVisibilityConfigResponse = z.infer< + typeof PlaygroundVisibilityConfigResponseSchema +>; diff --git a/packages/global/support/outLink/constant.ts b/packages/global/support/outLink/constant.ts index b7b9158fa..872e6112f 100644 --- a/packages/global/support/outLink/constant.ts +++ b/packages/global/support/outLink/constant.ts @@ -6,5 +6,5 @@ export enum PublishChannelEnum { dingtalk = 'dingtalk', wecom = 'wecom', officialAccount = 'official_account', - chat = 'chat' + playground = 'playground' } diff --git a/packages/global/support/outLink/type.d.ts b/packages/global/support/outLink/type.d.ts index 9f866c2f4..80bad267a 100644 --- a/packages/global/support/outLink/type.d.ts +++ b/packages/global/support/outLink/type.d.ts @@ -106,3 +106,10 @@ export type OutLinkEditType = { // config for specific platform app?: T; }; + +export type PlaygroundVisibilityConfigType = { + showNodeStatus: boolean; + responseDetail: boolean; + showFullText: boolean; + showRawSource: boolean; +}; diff --git a/projects/app/src/pageComponents/app/detail/Publish/Chat/index.tsx b/projects/app/src/pageComponents/app/detail/Publish/Playground/index.tsx similarity index 86% rename from projects/app/src/pageComponents/app/detail/Publish/Chat/index.tsx rename to projects/app/src/pageComponents/app/detail/Publish/Playground/index.tsx index ad13a7168..8f84915e3 100644 --- a/projects/app/src/pageComponents/app/detail/Publish/Chat/index.tsx +++ b/projects/app/src/pageComponents/app/detail/Publish/Playground/index.tsx @@ -5,28 +5,31 @@ import { useForm } from 'react-hook-form'; import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel'; import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; -import { getChatVisibilityConfig, updateChatVisibilityConfig } from '@/web/support/outLink/api'; -import type { ChatVisibilityConfigType } from '@fastgpt/global/core/app/type'; +import { + getPlaygroundVisibilityConfig, + updatePlaygroundVisibilityConfig +} from '@/web/support/outLink/api'; +import type { PlaygroundVisibilityConfigType } from '@fastgpt/global/support/outLink/type'; -const defaultChatVisibilityForm: ChatVisibilityConfigType = { +const defaultPlaygroundVisibilityForm: PlaygroundVisibilityConfigType = { showNodeStatus: true, responseDetail: true, showFullText: true, showRawSource: true }; -const ChatVisibilityConfig = ({ appId }: { appId: string }) => { +const PlaygroundVisibilityConfig = ({ appId }: { appId: string }) => { const { t } = useTranslation(); const { register, watch, setValue, reset } = useForm({ - defaultValues: defaultChatVisibilityForm + defaultValues: defaultPlaygroundVisibilityForm }); const responseDetail = watch('responseDetail'); const showFullText = watch('showFullText'); const showRawSource = watch('showRawSource'); - useRequest2(() => getChatVisibilityConfig({ appId }), { + useRequest2(() => getPlaygroundVisibilityConfig({ appId }), { onSuccess: (data) => { reset({ showNodeStatus: data.showNodeStatus, @@ -39,8 +42,8 @@ const ChatVisibilityConfig = ({ appId }: { appId: string }) => { }); const { runAsync: saveConfig } = useRequest2( - async (data: ChatVisibilityConfigType) => { - return await updateChatVisibilityConfig({ + async (data: PlaygroundVisibilityConfigType) => { + return await updatePlaygroundVisibilityConfig({ appId, ...data }); @@ -139,4 +142,4 @@ const ChatVisibilityConfig = ({ appId }: { appId: string }) => { ); }; -export default ChatVisibilityConfig; +export default PlaygroundVisibilityConfig; diff --git a/projects/app/src/pageComponents/app/detail/Publish/index.tsx b/projects/app/src/pageComponents/app/detail/Publish/index.tsx index 48019b079..96a0a41dc 100644 --- a/projects/app/src/pageComponents/app/detail/Publish/index.tsx +++ b/projects/app/src/pageComponents/app/detail/Publish/index.tsx @@ -19,7 +19,7 @@ const FeiShu = dynamic(() => import('./FeiShu')); const DingTalk = dynamic(() => import('./DingTalk')); const Wecom = dynamic(() => import('./Wecom')); const OffiAccount = dynamic(() => import('./OffiAccount')); -const Chat = dynamic(() => import('./Chat')); +const Playground = dynamic(() => import('./Playground')); const OutLink = () => { const { t } = useTranslation(); @@ -91,7 +91,7 @@ const OutLink = () => { icon: 'core/chat/sidebar/home', title: t('common:navbar.Chat'), desc: t('app:publish.chat_desc'), - value: PublishChannelEnum.chat, + value: PublishChannelEnum.playground, isProFn: false } ]); @@ -149,7 +149,7 @@ const OutLink = () => { {linkType === PublishChannelEnum.dingtalk && } {linkType === PublishChannelEnum.wecom && } {linkType === PublishChannelEnum.officialAccount && } - {linkType === PublishChannelEnum.chat && } + {linkType === PublishChannelEnum.playground && } ); diff --git a/projects/app/src/pages/api/support/outLink/chat/config.ts b/projects/app/src/pages/api/support/outLink/playground/config.ts similarity index 58% rename from projects/app/src/pages/api/support/outLink/chat/config.ts rename to projects/app/src/pages/api/support/outLink/playground/config.ts index 9de316ba7..77e762681 100644 --- a/projects/app/src/pages/api/support/outLink/chat/config.ts +++ b/projects/app/src/pages/api/support/outLink/playground/config.ts @@ -2,32 +2,31 @@ import { MongoOutLink } from '@fastgpt/service/support/outLink/schema'; import { PublishChannelEnum } from '@fastgpt/global/support/outLink/constant'; import type { ApiRequestProps } from '@fastgpt/service/type/next'; import { NextAPI } from '@/service/middleware/entry'; -import type { ChatVisibilityConfigType } from '@fastgpt/global/core/app/type'; - -export type ChatVisibilityConfigQuery = { - appId: string; -}; - -export type ChatVisibilityConfigResponse = ChatVisibilityConfigType; +import { + type PlaygroundVisibilityConfigQuery, + type PlaygroundVisibilityConfigResponse, + PlaygroundVisibilityConfigQuerySchema, + PlaygroundVisibilityConfigResponseSchema +} from '@fastgpt/global/support/outLink/api'; async function handler( - req: ApiRequestProps<{}, ChatVisibilityConfigQuery> -): Promise { - const { appId } = req.query; + req: ApiRequestProps<{}, PlaygroundVisibilityConfigQuery> +): Promise { + const { appId } = PlaygroundVisibilityConfigQuerySchema.parse(req.query); const existingConfig = await MongoOutLink.findOne( { appId, - type: PublishChannelEnum.chat + type: PublishChannelEnum.playground }, 'showNodeStatus responseDetail showFullText showRawSource' ).lean(); - return { + return PlaygroundVisibilityConfigResponseSchema.parse({ showNodeStatus: existingConfig?.showNodeStatus ?? true, responseDetail: existingConfig?.responseDetail ?? true, showFullText: existingConfig?.showFullText ?? true, showRawSource: existingConfig?.showRawSource ?? true - }; + }); } export default NextAPI(handler); diff --git a/projects/app/src/pages/api/support/outLink/chat/update.ts b/projects/app/src/pages/api/support/outLink/playground/update.ts similarity index 65% rename from projects/app/src/pages/api/support/outLink/chat/update.ts rename to projects/app/src/pages/api/support/outLink/playground/update.ts index 2fb0f1aed..e75ca4d99 100644 --- a/projects/app/src/pages/api/support/outLink/chat/update.ts +++ b/projects/app/src/pages/api/support/outLink/playground/update.ts @@ -4,17 +4,14 @@ import { PublishChannelEnum } from '@fastgpt/global/support/outLink/constant'; import { ManagePermissionVal } from '@fastgpt/global/support/permission/constant'; import type { ApiRequestProps } from '@fastgpt/service/type/next'; import { NextAPI } from '@/service/middleware/entry'; +import { + type UpdatePlaygroundVisibilityConfigBody, + UpdatePlaygroundVisibilityConfigBodySchema +} from '@fastgpt/global/support/outLink/api'; -export type UpdateChatVisibilityConfigBody = { - appId: string; - showNodeStatus?: boolean; - responseDetail?: boolean; - showFullText?: boolean; - showRawSource?: boolean; -}; - -async function handler(req: ApiRequestProps) { - const { appId, showNodeStatus, responseDetail, showFullText, showRawSource } = req.body; +async function handler(req: ApiRequestProps) { + const { appId, showNodeStatus, responseDetail, showFullText, showRawSource } = + UpdatePlaygroundVisibilityConfigBodySchema.parse(req.body); const { teamId, tmbId } = await authApp({ req, @@ -23,18 +20,18 @@ async function handler(req: ApiRequestProps) per: ManagePermissionVal }); - await MongoOutLink.findOneAndUpdate( - { appId, type: PublishChannelEnum.chat }, + await MongoOutLink.updateOne( + { appId, type: PublishChannelEnum.playground }, { $setOnInsert: { - shareId: `chat-${appId}`, + shareId: `playground-${appId}`, teamId, tmbId, - name: 'Home Chat' + name: 'Playground Chat' }, $set: { appId, - type: PublishChannelEnum.chat, + type: PublishChannelEnum.playground, showNodeStatus: showNodeStatus ?? true, responseDetail: responseDetail ?? true, showFullText: showFullText ?? true, diff --git a/projects/app/src/pages/chat/index.tsx b/projects/app/src/pages/chat/index.tsx index 9b1b28bda..a4dd5f6c1 100644 --- a/projects/app/src/pages/chat/index.tsx +++ b/projects/app/src/pages/chat/index.tsx @@ -174,7 +174,7 @@ export async function getServerSideProps(context: any) { const config = await MongoOutLink.findOne( { appId, - type: PublishChannelEnum.chat + type: PublishChannelEnum.playground }, 'showNodeStatus responseDetail showFullText showRawSource' ).lean(); diff --git a/projects/app/src/web/support/outLink/api.ts b/projects/app/src/web/support/outLink/api.ts index 2192c4d46..6cc1ad60b 100644 --- a/projects/app/src/web/support/outLink/api.ts +++ b/projects/app/src/web/support/outLink/api.ts @@ -1,8 +1,8 @@ import type { - ChatVisibilityConfigQuery, - ChatVisibilityConfigResponse -} from '@/pages/api/support/outLink/chat/config'; -import type { UpdateChatVisibilityConfigBody } from '@/pages/api/support/outLink/chat/update'; + PlaygroundVisibilityConfigQuery, + PlaygroundVisibilityConfigResponse, + UpdatePlaygroundVisibilityConfigBody +} from '@fastgpt/global/support/outLink/api'; import { GET, POST, DELETE } from '@/web/common/api/request'; import type { OutlinkAppType, @@ -41,12 +41,12 @@ export function updateShareChat(data: OutLinkEditType< return POST(`/support/outLink/update`, data); } -export function getChatVisibilityConfig(data: ChatVisibilityConfigQuery) { - return GET('/support/outLink/chat/config', data); +export function getPlaygroundVisibilityConfig(data: PlaygroundVisibilityConfigQuery) { + return GET('/support/outLink/playground/config', data); } -export function updateChatVisibilityConfig(data: UpdateChatVisibilityConfigBody) { - return POST(`/support/outLink/chat/update`, data); +export function updatePlaygroundVisibilityConfig(data: UpdatePlaygroundVisibilityConfigBody) { + return POST(`/support/outLink/playground/update`, data); } // /**