chore: api 采用v1版本控制方式
This commit is contained in:
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -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
14
src/routes/index.ts
Normal 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;
|
||||||
@@ -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
8
src/routes/v1/index.ts
Normal 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;
|
||||||
@@ -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;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
// src/security.ts
|
// src/routes/v1/services/security.ts
|
||||||
import { Elysia, Context } from 'elysia';
|
import { Elysia, Context } from 'elysia';
|
||||||
|
|
||||||
// 脱敏规则配置
|
// 脱敏规则配置
|
||||||
Reference in New Issue
Block a user