fix: 解决问题

This commit is contained in:
2025-12-28 10:52:04 +08:00
parent 868979a423
commit 9f51d27398
18 changed files with 57061 additions and 201 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
{
"version": "7",
"dialect": "postgresql",
"entries": [
{
"idx": 0,
"version": "7",
"when": 1766803308366,
"tag": "0000_groovy_red_skull",
"breakpoints": true
}
]
}

View File

@@ -0,0 +1,3 @@
import { relations } from "drizzle-orm/relations";
import { } from "./schema";

400
src/db/drizzle/schema.ts Normal file
View File

@@ -0,0 +1,400 @@
import { pgTable, serial, text, jsonb, varchar, timestamp, unique, uuid, doublePrecision, json, integer, boolean, index, uniqueIndex, pgEnum } from "drizzle-orm/pg-core"
import { sql } from "drizzle-orm"
export const enumCfRouterCodeType = pgEnum("enum_cf_router_code_type", ['route', 'middleware'])
export const testPromptTools = pgTable("TestPromptTools", {
id: serial().primaryKey().notNull(),
template: text().notNull(),
args: jsonb().notNull(),
process: jsonb().notNull(),
type: varchar({ length: 255 }).notNull(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
});
export const aiAgent = pgTable("ai_agent", {
id: uuid().primaryKey().notNull(),
type: varchar({ length: 255 }).notNull(),
baseUrl: varchar({ length: 255 }).notNull(),
apiKey: varchar({ length: 255 }).notNull(),
temperature: doublePrecision(),
cache: varchar({ length: 255 }),
cacheName: varchar({ length: 255 }),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
model: varchar({ length: 255 }).notNull(),
data: json().default({}),
status: varchar({ length: 255 }).default('open'),
key: varchar({ length: 255 }).notNull(),
description: text(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
}, (table) => [
unique("ai_agent_key_key").on(table.key),
]);
export const appsTrades = pgTable("apps_trades", {
id: uuid().primaryKey().notNull(),
outTradeNo: varchar("out_trade_no", { length: 255 }).notNull(),
money: integer().notNull(),
subject: text().notNull(),
status: varchar({ length: 255 }).default('WAIT_BUYER_PAY').notNull(),
type: varchar({ length: 255 }).default('alipay').notNull(),
data: jsonb().default({"list":[]}),
uid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
}, (table) => [
unique("apps_trades_out_trade_no_key").on(table.outTradeNo),
]);
export const cfOrgs = pgTable("cf_orgs", {
id: uuid().primaryKey().notNull(),
username: varchar({ length: 255 }).notNull(),
users: jsonb().default([]),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
description: varchar({ length: 255 }),
}, (table) => [
unique("cf_orgs_username_key").on(table.username),
]);
export const cfRouterCode = pgTable("cf_router_code", {
id: uuid().primaryKey().notNull(),
path: varchar({ length: 255 }).notNull(),
key: varchar({ length: 255 }).notNull(),
active: boolean().default(false),
project: varchar({ length: 255 }).default('default'),
code: text().default('),
type: enumCfRouterCodeType().default('route'),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
middleware: varchar({ length: 255 }).array().default(["RRAY[]::character varying[])::character varying(25"]),
next: varchar({ length: 255 }).default('),
exec: text().default('),
data: json().default({}),
validator: json().default({}),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
});
export const cfUser = pgTable("cf_user", {
id: uuid().primaryKey().notNull(),
username: varchar({ length: 255 }).notNull(),
password: varchar({ length: 255 }),
salt: varchar({ length: 255 }),
needChangePassword: boolean().default(false),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
description: text(),
data: jsonb().default({}),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
type: varchar({ length: 255 }).default('user'),
owner: uuid(),
orgId: uuid(),
email: varchar({ length: 255 }),
avatar: text(),
nickname: text(),
}, (table) => [
unique("cf_user_username_key").on(table.username),
]);
export const cfUserSecrets = pgTable("cf_user_secrets", {
id: uuid().primaryKey().notNull(),
description: text(),
status: varchar({ length: 255 }).default('active'),
title: text(),
expiredTime: timestamp({ withTimezone: true, mode: 'string' }),
token: varchar({ length: 255 }).default(').notNull(),
userId: uuid(),
data: jsonb().default({}),
orgId: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
});
export const chatHistories = pgTable("chat_histories", {
id: uuid().primaryKey().notNull(),
data: json(),
chatId: uuid(),
chatPromptId: uuid(),
root: boolean().default(false),
show: boolean().default(true),
uid: varchar({ length: 255 }),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
role: varchar({ length: 255 }).default('user'),
});
export const chatPrompts = pgTable("chat_prompts", {
id: uuid().primaryKey().notNull(),
title: varchar({ length: 255 }).notNull(),
description: text(),
data: json(),
key: varchar({ length: 255 }).default(').notNull(),
uid: varchar({ length: 255 }),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
});
export const chatSessions = pgTable("chat_sessions", {
id: uuid().primaryKey().notNull(),
data: json().default({}),
chatPromptId: uuid(),
type: varchar({ length: 255 }).default('production'),
uid: varchar({ length: 255 }),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
title: varchar({ length: 255 }).default('),
key: varchar({ length: 255 }),
});
export const fileSync = pgTable("file_sync", {
id: uuid().primaryKey().notNull(),
name: varchar({ length: 255 }),
hash: varchar({ length: 255 }),
stat: jsonb().default({}),
data: jsonb().default({}),
checkedAt: timestamp({ withTimezone: true, mode: 'string' }),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
}, (table) => [
index("file_sync_name_idx").using("btree", table.name.asc().nullsLast().op("text_ops")),
]);
export const kvAiChatHistory = pgTable("kv_ai_chat_history", {
id: uuid().primaryKey().notNull(),
username: varchar({ length: 255 }).default(').notNull(),
model: varchar({ length: 255 }).default(').notNull(),
group: varchar({ length: 255 }).default(').notNull(),
title: varchar({ length: 255 }).default(').notNull(),
messages: jsonb().default([]).notNull(),
promptTokens: integer("prompt_tokens").default(0),
totalTokens: integer("total_tokens").default(0),
completionTokens: integer("completion_tokens").default(0),
data: jsonb().default({}),
uid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
version: integer().default(0),
type: varchar({ length: 255 }).default('keep').notNull(),
});
export const kvApp = pgTable("kv_app", {
id: uuid().primaryKey().notNull(),
data: jsonb().default({}),
version: varchar({ length: 255 }).default('),
key: varchar({ length: 255 }),
uid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
title: varchar({ length: 255 }).default('),
description: varchar({ length: 255 }).default('),
user: varchar({ length: 255 }),
status: varchar({ length: 255 }).default('running'),
pid: uuid(),
proxy: boolean().default(false),
}, (table) => [
uniqueIndex("kv_app_key_uid").using("btree", table.key.asc().nullsLast().op("text_ops"), table.uid.asc().nullsLast().op("text_ops")),
unique("key_uid_unique").on(table.key, table.uid),
]);
export const kvAppDomain = pgTable("kv_app_domain", {
id: uuid().primaryKey().notNull(),
domain: varchar({ length: 255 }).notNull(),
appId: varchar({ length: 255 }),
uid: varchar({ length: 255 }),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
data: jsonb(),
status: varchar({ length: 255 }).default('running').notNull(),
}, (table) => [
unique("kv_app_domain_domain_key").on(table.domain),
]);
export const kvAppList = pgTable("kv_app_list", {
id: uuid().primaryKey().notNull(),
data: json().default({}),
version: varchar({ length: 255 }).default('),
uid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
key: varchar({ length: 255 }),
status: varchar({ length: 255 }).default('running'),
});
export const kvConfig = pgTable("kv_config", {
id: uuid().primaryKey().notNull(),
title: text().default('),
key: text().default('),
description: text().default('),
tags: jsonb().default([]),
data: jsonb().default({}),
uid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
hash: text().default('),
});
export const kvContainer = pgTable("kv_container", {
id: uuid().primaryKey().notNull(),
title: text().default('),
description: text().default('),
type: varchar({ length: 255 }).default('render-js'),
code: text().default('),
data: json().default({}),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
uid: uuid(),
publish: json().default({}),
tags: json().default([]),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
hash: text().default('),
});
export const kvGithub = pgTable("kv_github", {
id: uuid().primaryKey().notNull(),
title: varchar({ length: 255 }).default('),
githubToken: varchar({ length: 255 }).default('),
uid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
});
export const kvPackages = pgTable("kv_packages", {
id: uuid().primaryKey().notNull(),
title: text().default('),
description: text().default('),
tags: jsonb().default([]),
data: jsonb().default({}),
publish: jsonb().default({}),
expand: jsonb().default({}),
uid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
});
export const kvPage = pgTable("kv_page", {
id: uuid().primaryKey().notNull(),
title: varchar({ length: 255 }).default('),
description: text().default('),
type: varchar({ length: 255 }).default('),
data: json().default({}),
uid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
publish: json().default({}),
});
export const kvResource = pgTable("kv_resource", {
id: uuid().primaryKey().notNull(),
name: varchar({ length: 255 }).default('),
description: text().default('),
source: varchar({ length: 255 }).default('),
sourceId: varchar({ length: 255 }).default('),
version: varchar({ length: 255 }).default('0.0.0'),
data: json().default({}),
uid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
});
export const kvVip = pgTable("kv_vip", {
id: uuid().primaryKey().notNull(),
userId: uuid().notNull(),
level: varchar({ length: 255 }).default('free'),
category: varchar({ length: 255 }).notNull(),
startDate: timestamp({ withTimezone: true, mode: 'string' }),
endDate: timestamp({ withTimezone: true, mode: 'string' }),
data: jsonb().default({}),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
title: text().default(').notNull(),
description: text().default(').notNull(),
});
export const microAppsUpload = pgTable("micro_apps_upload", {
id: uuid().primaryKey().notNull(),
title: varchar({ length: 255 }).default('),
description: varchar({ length: 255 }).default('),
tags: jsonb().default([]),
type: varchar({ length: 255 }).default('),
source: varchar({ length: 255 }).default('),
data: jsonb().default({}),
share: boolean().default(false),
uname: varchar({ length: 255 }).default('),
uid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
});
export const microMark = pgTable("micro_mark", {
id: uuid().primaryKey().notNull(),
title: text().default('),
description: text().default('),
tags: jsonb().default([]),
data: jsonb().default({}),
uname: varchar({ length: 255 }).default('),
uid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
cover: text().default('),
thumbnail: text().default('),
link: text().default('),
summary: text().default('),
markType: text().default('md'),
config: jsonb().default({}),
puid: uuid(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
version: integer().default(1),
fileList: jsonb().default([]),
key: text().default('),
});
export const prompts = pgTable("prompts", {
id: uuid().primaryKey().notNull(),
title: varchar({ length: 255 }).notNull(),
description: text(),
presetData: json(),
key: varchar({ length: 255 }).notNull(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
}, (table) => [
unique("prompts_key_key").on(table.key),
]);
export const workShareMark = pgTable("work_share_mark", {
id: uuid().primaryKey().notNull(),
title: text().default('),
key: text().default('),
markType: text().default('md'),
description: text().default('),
cover: text().default('),
link: text().default('),
tags: jsonb().default([]),
summary: text().default('),
config: jsonb().default({}),
data: jsonb().default({}),
fileList: jsonb().default([]),
uname: varchar({ length: 255 }).default('),
version: integer().default(1),
markedAt: timestamp({ withTimezone: true, mode: 'string' }),
uid: uuid(),
puid: uuid(),
createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(),
deletedAt: timestamp({ withTimezone: true, mode: 'string' }),
});

14
src/db/schema.ts Normal file
View File

@@ -0,0 +1,14 @@
import { pgTable, serial, text, varchar, uuid, boolean, jsonb, timestamp } from "drizzle-orm/pg-core";
import { InferSelectModel, InferInsertModel } from "drizzle-orm";
export const aiUsages = pgTable('cf_ai_usage_cache', {
id: uuid('id').primaryKey().defaultRandom(),
owner: uuid('owner'),
data: jsonb('data').notNull().default({}),
createdAt: timestamp('createdAt').notNull().defaultNow(),
updatedAt: timestamp('updatedAt').notNull().defaultNow(),
deletedAt: timestamp('deletedAt'),
});
// 类型推断
export type AiUsage = InferSelectModel<typeof aiUsages>;

View File

@@ -1,6 +1,6 @@
import { User } from '@/models/user.ts';
import http from 'http';
import cookie from 'cookie';
import * as cookie from '@kevisual/router/src/server/cookie.ts';
import { logger } from './logger.ts';
export const error = (msg: string, code = 500) => {
return JSON.stringify({ code, message: msg });

View File

@@ -1,6 +1,6 @@
import { User } from '@/models/user.ts';
import http from 'http';
import cookie from 'cookie';
import { parse } from '@kevisual/router/src/server/cookie.ts';
export const error = (msg: string, code = 500) => {
return JSON.stringify({ code, message: msg });
};
@@ -16,7 +16,7 @@ export const checkAuth = async (req: http.IncomingMessage, res: http.ServerRespo
token = url.searchParams.get('token') || '';
}
if (!token) {
const parsedCookies = cookie.parse(req.headers.cookie || '');
const parsedCookies = parse(req.headers.cookie || '');
token = parsedCookies.token || '';
}
if (!token) {
@@ -44,9 +44,9 @@ export const getLoginUser = async (req: http.IncomingMessage) => {
token = url.searchParams.get('token') || '';
}
if (!token) {
const parsedCookies = cookie.parse(req.headers.cookie || '');
const parsedCookies = parse(req.headers.cookie || '');
token = parsedCookies.token || '';
}
}
if (token) {
token = token.replace('Bearer ', '');

View File

@@ -9,7 +9,7 @@ export {
}
export const config = useConfig();
export const token = config.TOKEN || '';
export const token = config.KEVISUAL_TOKEN || '';
export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
export const showRes = (res, ...args) => {