befly-tpl 3.9.49 → 3.9.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -37,12 +37,14 @@ bunx befly init
37
37
 
38
38
  ```typescript
39
39
  // main.ts
40
- import { Server } from 'befly';
40
+ import { Befly } from 'befly';
41
41
 
42
- await Server({
43
- name: 'My API',
44
- port: 3000
42
+ const app = new Befly({
43
+ appName: 'My API',
44
+ appPort: 3000
45
45
  });
46
+
47
+ await app.start();
46
48
  ```
47
49
 
48
50
  运行项目:
@@ -55,7 +57,7 @@ bun run main.ts
55
57
 
56
58
  ```typescript
57
59
  // apis/user/hello.ts
58
- import type { ApiRoute } from 'befly';
60
+ import type { ApiRoute } from 'befly/types/index';
59
61
 
60
62
  export default {
61
63
  name: '问候接口',
@@ -79,7 +81,7 @@ export default {
79
81
  ### TypeScript 全面支持
80
82
 
81
83
  ```typescript
82
- import type { ApiRoute, BeflyContext } from 'befly';
84
+ import type { ApiRoute, BeflyContext } from 'befly/types/index';
83
85
  import type { User } from './types/models';
84
86
 
85
87
  export default {
@@ -0,0 +1,150 @@
1
+ /**
2
+ * DbHelper 泛型类型使用示例
3
+ *
4
+ * 本文件演示如何使用类型安全的数据库操作
5
+ * 通过扩展 DatabaseTables 接口,可以获得完整的类型推断和智能提示
6
+ */
7
+
8
+ import type { BaseTable, TypedWhereConditions } from 'befly/types/table';
9
+
10
+ // ============================================
11
+ // 步骤 1: 定义表类型
12
+ // ============================================
13
+
14
+ /**
15
+ * 用户表类型定义
16
+ * 只需定义业务字段,系统字段(id, state, createdAt 等)由 BaseTable 自动添加
17
+ */
18
+ interface UserFields {
19
+ email: string;
20
+ username: string;
21
+ password: string;
22
+ nickname: string | null;
23
+ avatar: string | null;
24
+ roleId: number;
25
+ lastLoginAt: number | null;
26
+ }
27
+
28
+ /**
29
+ * 完整的用户表类型(包含系统字段)
30
+ */
31
+ type UserTable = BaseTable<UserFields>;
32
+
33
+ // ============================================
34
+ // 步骤 2: 扩展 DatabaseTables(可选,推荐)
35
+ // ============================================
36
+
37
+ /**
38
+ * 在项目的 types/index.d.ts 中添加以下声明:
39
+ *
40
+ * declare module 'befly/types/table' {
41
+ * interface DatabaseTables {
42
+ * user: BaseTable<{
43
+ * email: string;
44
+ * username: string;
45
+ * password: string;
46
+ * nickname: string | null;
47
+ * avatar: string | null;
48
+ * roleId: number;
49
+ * lastLoginAt: number | null;
50
+ * }>;
51
+ * }
52
+ * }
53
+ *
54
+ * 扩展后,db.getOne({ table: 'user' }) 的返回类型会自动推断
55
+ */
56
+
57
+ // ============================================
58
+ // 步骤 3: 在 API 中使用类型安全的数据库操作
59
+ // ============================================
60
+
61
+ export default {
62
+ name: '类型安全示例',
63
+ auth: false,
64
+ handler: async (befly, ctx) => {
65
+ // ----------------------------------------
66
+ // 示例 1: 类型安全的 WHERE 条件
67
+ // ----------------------------------------
68
+
69
+ // 定义类型安全的查询条件
70
+ const where: TypedWhereConditions<UserTable> = {
71
+ state: 1, // 精确匹配
72
+ roleId$in: [1, 2, 3], // IN 数组(必须是 number[])
73
+ email$like: '%@gmail.com', // LIKE 匹配(必须是 string)
74
+ lastLoginAt$gte: Date.now() - 86400000 // 大于等于(必须是 number)
75
+ // roleId$in: 'invalid', // ❌ 类型错误:应为 number[]
76
+ // email$like: 123, // ❌ 类型错误:应为 string
77
+ };
78
+
79
+ // ----------------------------------------
80
+ // 示例 2: 使用泛型指定返回类型
81
+ // ----------------------------------------
82
+
83
+ // 方式 A: 手动指定泛型
84
+ const user = await befly.db.getOne<UserTable>({
85
+ table: 'user',
86
+ where: { id: ctx.body.id }
87
+ });
88
+
89
+ if (user) {
90
+ // 有完整的类型提示
91
+ const email = user.email; // string
92
+ const createdAt = user.createdAt; // number(系统字段)
93
+ const nickname = user.nickname; // string | null
94
+ }
95
+
96
+ // ----------------------------------------
97
+ // 示例 3: 类型安全的列表查询
98
+ // ----------------------------------------
99
+
100
+ const result = await befly.db.getList<UserTable>({
101
+ table: 'user',
102
+ fields: ['id', 'email', 'nickname', 'createdAt'],
103
+ where: where,
104
+ orderBy: ['createdAt#DESC'],
105
+ page: 1,
106
+ limit: 10
107
+ });
108
+
109
+ // result.lists 类型为 UserTable[]
110
+ for (const item of result.lists) {
111
+ // 完整的类型提示
112
+ console.log(item.email, item.createdAt);
113
+ }
114
+
115
+ // ----------------------------------------
116
+ // 示例 4: 复杂 WHERE 条件($or, $and)
117
+ // ----------------------------------------
118
+
119
+ const complexWhere: TypedWhereConditions<UserTable> = {
120
+ state: 1,
121
+ $or: [{ email$like: '%@gmail.com' }, { email$like: '%@qq.com' }],
122
+ $and: [{ roleId$in: [1, 2] }, { lastLoginAt$notNull: true }]
123
+ };
124
+
125
+ const activeUsers = await befly.db.getAll<UserTable>({
126
+ table: 'user',
127
+ where: complexWhere,
128
+ orderBy: ['lastLoginAt#DESC']
129
+ });
130
+
131
+ // ----------------------------------------
132
+ // 示例 5: BETWEEN 范围查询
133
+ // ----------------------------------------
134
+
135
+ const rangeWhere: TypedWhereConditions<UserTable> = {
136
+ state: 1,
137
+ createdAt$between: [
138
+ Date.now() - 7 * 86400000, // 7天前
139
+ Date.now() // 现在
140
+ ],
141
+ roleId$between: [1, 10] // 角色 ID 1-10
142
+ };
143
+
144
+ return befly.tool.Yes('类型安全示例', {
145
+ user: user,
146
+ total: result.total,
147
+ activeCount: activeUsers.length
148
+ });
149
+ }
150
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "befly-tpl",
3
- "version": "3.9.49",
3
+ "version": "3.9.50",
4
4
  "description": "Befly 3.0 TypeScript Template",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -28,11 +28,11 @@
28
28
  ],
29
29
  "type": "module",
30
30
  "dependencies": {
31
- "@befly-addon/admin": "^1.0.54",
32
- "befly": "^3.8.29"
31
+ "@befly-addon/admin": "^1.0.55",
32
+ "befly": "^3.8.30"
33
33
  },
34
34
  "engines": {
35
35
  "bun": ">=1.3.0"
36
36
  },
37
- "gitHead": "1f3cacbe4134ee60654b75338bcaeda535898a84"
37
+ "gitHead": "2031550167896390ac58c50aeb52b8c23426844e"
38
38
  }