chore: api 采用v1版本控制方式

This commit is contained in:
2025-11-28 14:40:43 +08:00
parent 8003e9edc8
commit dce01b2a20
7 changed files with 45 additions and 23 deletions

View File

@@ -17,7 +17,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"商家 测试商家 昨天的 GMV 是多少?\"}" "raw": "{\"question\": \"商家 测试商家 昨天的 GMV 是多少?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -32,7 +32,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"订单 2025052215583773001 的状态是什么?\"}" "raw": "{\"question\": \"订单 2025052215583773001 的状态是什么?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -47,7 +47,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"用户 3750 的信息?\"}" "raw": "{\"question\": \"用户 3750 的信息?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -62,7 +62,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"商品 气密性通风口门及不锈锈钢通风圆管 卖了多少件?\"}" "raw": "{\"question\": \"商品 气密性通风口门及不锈锈钢通风圆管 卖了多少件?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -77,7 +77,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"商家 测试商家 的退款率是多少?\"}" "raw": "{\"question\": \"商家 测试商家 的退款率是多少?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -92,7 +92,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"列出所有未发货订单\"}" "raw": "{\"question\": \"列出所有未发货订单\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -107,7 +107,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"列出所有正常营业的商户\"}" "raw": "{\"question\": \"列出所有正常营业的商户\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -122,7 +122,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"商户 测试商家 的提现记录有哪些?\"}" "raw": "{\"question\": \"商户 测试商家 的提现记录有哪些?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -137,7 +137,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"用户 3750 的充值记录有哪些?\"}" "raw": "{\"question\": \"用户 3750 的充值记录有哪些?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -152,7 +152,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"用户 3750 的邀请奖励有哪些?\"}" "raw": "{\"question\": \"用户 3750 的邀请奖励有哪些?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -167,7 +167,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"最近的系统公告有哪些?\"}" "raw": "{\"question\": \"最近的系统公告有哪些?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -182,7 +182,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"最近的店铺笔记有哪些?\"}" "raw": "{\"question\": \"最近的店铺笔记有哪些?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -197,7 +197,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"商家 测试商家 的 uniacid 是多少?\"}" "raw": "{\"question\": \"商家 测试商家 的 uniacid 是多少?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -212,7 +212,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"用户 1 的 uniacid 是多少?\"}" "raw": "{\"question\": \"用户 1 的 uniacid 是多少?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
}, },
{ {
@@ -227,7 +227,7 @@
"mode": "raw", "mode": "raw",
"raw": "{\"question\": \"当前有多少商家用户?\"}" "raw": "{\"question\": \"当前有多少商家用户?\"}"
}, },
"url": "{{base_url}}/admin/query" "url": "{{base_url}}/api/v1/admin/query"
} }
} }
], ],

View File

@@ -1,11 +1,11 @@
// src/index.ts // src/index.ts
import { Elysia } from 'elysia'; import { Elysia } from 'elysia';
import adminRoutes from './routes/admin'; import routes from './routes';
import { config } from 'dotenv'; import { config } from 'dotenv';
config(); config();
const app = new Elysia() const app = new Elysia()
.use(adminRoutes) .use(routes)
.get('/', () => 'SaaS Admin API - Ready for Dify Agent') .get('/', () => 'SaaS Admin API - Ready for Dify Agent')
.listen(process.env.PORT || 8080); .listen(process.env.PORT || 8080);

14
src/routes/index.ts Normal file
View File

@@ -0,0 +1,14 @@
// src/routes/index.ts
import { Elysia } from 'elysia';
import v1Routes from './v1';
// 主路由配置,支持多版本管理
const routes = new Elysia()
// v1 版本路由
.group('/api/v1', (app) => app.use(v1Routes))
// 未来可以在这里添加 v2, v3 等版本路由
// .group('/api/v2', (app) => app.use(v2Routes))
// .group('/api/v3', (app) => app.use(v3Routes))
;
export default routes;

View File

@@ -1,7 +1,7 @@
// src/routes/admin.ts // src/routes/v1/admin.ts
import { Elysia } from 'elysia'; import { Elysia } from 'elysia';
import { verifyApiKey, sanitizeResult } from '../security'; import { verifyApiKey, sanitizeResult } from './services/security';
import { executeNaturalLanguageQuery } from '../queryEngine'; import { executeNaturalLanguageQuery } from './services/queryEngine';
const adminRoutes = new Elysia({ prefix: '/admin' }) const adminRoutes = new Elysia({ prefix: '/admin' })
.use(verifyApiKey) .use(verifyApiKey)

8
src/routes/v1/index.ts Normal file
View File

@@ -0,0 +1,8 @@
// src/routes/v1/index.ts
import { Elysia } from 'elysia';
import adminRoutes from './admin';
const v1Routes = new Elysia()
.use(adminRoutes);
export default v1Routes;

View File

@@ -1,5 +1,5 @@
// src/queryEngine.ts // src/routes/v1/services/queryEngine.ts
import pool from './db'; import pool from '../../../db';
type QueryContext = { type QueryContext = {
current_tenant_id?: string; current_tenant_id?: string;

View File

@@ -1,4 +1,4 @@
// src/security.ts // src/routes/v1/services/security.ts
import { Elysia, Context } from 'elysia'; import { Elysia, Context } from 'elysia';
// 脱敏规则配置 // 脱敏规则配置