From 1c8db69a5a400462726498c98de395ae8cba029f Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Mon, 22 May 2023 14:14:06 +0800 Subject: [PATCH] feat: limit export kb --- .../api/plugins/kb/data/exportModelData.ts | 27 +++++++++++++++++-- src/pages/kb/components/DataCard.tsx | 8 ++++-- src/service/models/user.ts | 12 ++++++--- src/types/mongoSchema.d.ts | 3 +++ 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/pages/api/plugins/kb/data/exportModelData.ts b/src/pages/api/plugins/kb/data/exportModelData.ts index 22f4dcdae..19527438b 100644 --- a/src/pages/api/plugins/kb/data/exportModelData.ts +++ b/src/pages/api/plugins/kb/data/exportModelData.ts @@ -1,6 +1,6 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; -import { connectToDatabase } from '@/service/mongo'; +import { connectToDatabase, User } from '@/service/mongo'; import { authUser } from '@/service/utils/auth'; import { PgClient } from '@/service/pg'; @@ -14,10 +14,28 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< throw new Error('缺少参数'); } + await connectToDatabase(); + // 凭证校验 const { userId } = await authUser({ req, authToken: true }); - await connectToDatabase(); + const thirtyMinutesAgo = new Date(Date.now() - 30 * 60 * 1000); + + // auth export times + const authTimes = await User.findOne( + { + _id: userId, + $or: [ + { 'limit.exportKbTime': { $exists: false } }, + { 'limit.exportKbTime': { $lte: thirtyMinutesAgo } } + ] + }, + '_id limit' + ); + + if (!authTimes) { + throw new Error('上次导出未到半小时,每半小时仅可导出一次。'); + } // 统计数据 const count = await PgClient.count('modelData', { @@ -36,6 +54,11 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< item.a.replace(/\n/g, '\\n') ]); + // update export time + await User.findByIdAndUpdate(userId, { + 'limit.exportKbTime': new Date() + }); + jsonRes(res, { data }); diff --git a/src/pages/kb/components/DataCard.tsx b/src/pages/kb/components/DataCard.tsx index de6bc46f3..6747c3f16 100644 --- a/src/pages/kb/components/DataCard.tsx +++ b/src/pages/kb/components/DataCard.tsx @@ -131,6 +131,10 @@ const DataCard = ({ kbId }: { kbId: string }) => { type: 'text/csv', filename: 'data.csv' }); + toast({ + title: '导出成功,下次导出需要半小时后', + status: 'success' + }); } catch (error) { error; } @@ -164,10 +168,10 @@ const DataCard = ({ kbId }: { kbId: string }) => { mr={2} size={'sm'} isLoading={isLoadingExport} - title={'换行数据导出时,会进行格式转换'} + title={'半小时仅能导出1次'} onClick={() => onclickExport()} > - 导出 + 导出csv