This commit is contained in:
xuzhenjun
2023-04-14 12:24:03 +08:00
parent b750002a56
commit 7cfa29dcb2
4 changed files with 78 additions and 5 deletions

View File

@@ -1,6 +1,7 @@
import { createParser } from "eventsource-parser";
import { NextRequest } from "next/server";
import { requestOpenai } from "../common";
import clientPromise from "../../db/mongdb";
async function createStream(req: NextRequest) {
const encoder = new TextEncoder();
@@ -48,7 +49,55 @@ async function createStream(req: NextRequest) {
}
export async function POST(req: NextRequest) {
const accessCode = req.headers.get("access-code");
try {
// 使用 clientPromise 连接到 MongoDB 数据库
const client = await clientPromise;
// 选择数据库和集合
const db = client.db("chat_db");
const usersCollection = db.collection("users");
// 查询用户数据
const user = await usersCollection.findOne({ key: accessCode });
const tips =
"您的链接授权已过期,为了避免恶意盗刷,\n 关注微信公众号【coder思维】\n回复关键词`ai` 获取授权链接 \n ![](/wx.png)";
if (!user) {
return new Response(tips);
}
if (user["expire"] < new Date().getTime()) {
// 判断用户是否过期
return new Response(tips);
}
// 创建查询条件
// 计算24小时前的时间戳
const currentTime = new Date();
const startTime = new Date(currentTime.getTime() - 24 * 60 * 60 * 1000);
// 创建查询条件
const query = {
username: user["username"],
create_time: { $gte: startTime },
};
const collection = db.collection("chat_logs");
// 根据查询条件查询记录数
const recordCount = await collection.countDocuments(query);
if (recordCount > 1000) {
// 判断用户是否超过1000条记录
return new Response(
"您的聊天提问已超过1000条为了避免恶意盗刷请过稍后再试24小时内只能提问1000条",
);
}
// 创建聊天记录
const chatLog = {
username: user["username"],
create_time: new Date().getTime(),
content: req.body,
};
collection.insertOne(chatLog).then(() => {
client.close();
});
const stream = await createStream(req);
return new Response(stream);
} catch (error) {
@@ -58,7 +107,3 @@ export async function POST(req: NextRequest) {
);
}
}
export const config = {
runtime: "edge",
};