nicot 1.1.38 → 1.2.1
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 +66 -12
- package/dist/index.cjs +650 -270
- package/dist/index.cjs.map +4 -4
- package/dist/index.mjs +579 -220
- package/dist/index.mjs.map +4 -4
- package/dist/src/bases/base-restful-controller.d.ts +1 -1
- package/dist/src/crud-base.d.ts +1 -0
- package/dist/src/decorators/access.d.ts +1 -0
- package/dist/src/decorators/get-mutator.d.ts +17 -0
- package/dist/src/decorators/index.d.ts +1 -0
- package/dist/src/decorators/pipes.d.ts +6 -4
- package/dist/src/decorators/property.d.ts +3 -3
- package/dist/src/decorators/query.d.ts +26 -6
- package/dist/src/restful.d.ts +33 -27
- package/dist/src/utility/memorize.d.ts +1 -0
- package/dist/src/utility/metadata.d.ts +7 -5
- package/dist/src/utility/mutate-pipe.d.ts +8 -0
- package/dist/src/utility/omit-from-class.d.ts +3 -0
- package/dist/src/utility/omit-type-exclude.d.ts +1 -0
- package/dist/src/utility/parse-bool.d.ts +0 -7
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -208,18 +208,23 @@ NICOT 提供了一套查询装饰器,用于在 Entity 字段上声明支持的
|
|
|
208
208
|
|
|
209
209
|
### ✅ 内建查询装饰器
|
|
210
210
|
|
|
211
|
-
| 装饰器名
|
|
212
|
-
|
|
213
|
-
| `@QueryEqual()`
|
|
214
|
-
| `@QueryLike()`
|
|
215
|
-
| `@QuerySearch()`
|
|
216
|
-
| `@QueryMatchBoolean()`
|
|
217
|
-
| `@QueryEqualZeroNullable()`
|
|
218
|
-
| `@
|
|
219
|
-
| `@
|
|
220
|
-
| `@
|
|
221
|
-
| `@
|
|
222
|
-
| `@
|
|
211
|
+
| 装饰器名 | 查询效果 |
|
|
212
|
+
|------------------------------------------------------|-------------------------------------------------|
|
|
213
|
+
| `@QueryEqual()` | 精确匹配:`WHERE field = :value` |
|
|
214
|
+
| `@QueryLike()` | 前缀模糊匹配:`WHERE field LIKE :value%` |
|
|
215
|
+
| `@QuerySearch()` | 宽泛模糊搜索:`WHERE field LIKE %:value%` |
|
|
216
|
+
| `@QueryMatchBoolean()` | `true/false/1/0` 转换为布尔类型查询 |
|
|
217
|
+
| `@QueryEqualZeroNullable()` | `0 → IS NULL`,否则 `= :value`(适合 nullable) |
|
|
218
|
+
| `@QueryIn()` | 包含查询:`WHERE field IN (:...value)`,value 可以数组或者逗号分隔 |
|
|
219
|
+
| `@QueryNotIn()` | 不包含查询:`WHERE field NOT IN (:...value)` |
|
|
220
|
+
| `@QueryGreater(field)` | 大于查询:`WHERE field > :value` |
|
|
221
|
+
| `@QueryLess(field)` | 小于查询:`WHERE field < :value` |
|
|
222
|
+
| `@QueryGreaterOrEqual(field)` | 大于等于查询:`WHERE field >= :value` |
|
|
223
|
+
| `@QueryLessOrEqual(field)` | 小于等于查询:`WHERE field <= :value` |
|
|
224
|
+
| `@QueryJsonbHas()` | JSONB 包含键查询:`WHERE field ? :value` |
|
|
225
|
+
| `@QueryOperator('=')` | 自定义操作符查询:`WHERE field <operator> :value` |
|
|
226
|
+
| `@QueryWrap((entExpr, valExpr) => `${entExpr} = ${valExpr}`) | 自定义查询片段 |
|
|
227
|
+
| `@QueryFullText(options)` | 全文搜索查询,只支持 PostgreSQL,会自动建索引 |
|
|
223
228
|
|
|
224
229
|
---
|
|
225
230
|
|
|
@@ -304,6 +309,35 @@ viewsOrderBy?: 'ASC' | 'DESC';
|
|
|
304
309
|
|
|
305
310
|
---
|
|
306
311
|
|
|
312
|
+
## GetMutator
|
|
313
|
+
|
|
314
|
+
GET 方法的参数只能是 URL 参数,因此数据类型只能是 string,具有局限性。
|
|
315
|
+
|
|
316
|
+
NICOT 提供了 `GetMutator` 装饰器,允许你在实体字段上定义一个转换函数,将 URL 参数转换为正确的数据类型,并把 OpenAPI 文档中 GET 接口的数据类型改为目标类型。
|
|
317
|
+
|
|
318
|
+
### 示例
|
|
319
|
+
|
|
320
|
+
```ts
|
|
321
|
+
@JsonColumn(SomeObject)
|
|
322
|
+
@GetMutator((val: string) => JSON.parse(val)) // GET 参数不会体现为 SomeObject,而是 string
|
|
323
|
+
@QueryOperator('@>') // JSONB 包含查询
|
|
324
|
+
meta: SomeObject;
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### 内建 GetMutator
|
|
328
|
+
|
|
329
|
+
- `@GetMutatorBool()`
|
|
330
|
+
- `@GetMutatorInt()`
|
|
331
|
+
- `@GetMutatorFloat()`
|
|
332
|
+
- `@GetMutatorStringSeparated(',')`
|
|
333
|
+
- `@GetMutatorIntSeparated()`
|
|
334
|
+
- `@GetMutatorFloatSeparated()`
|
|
335
|
+
- `@GetMutatorJson()`
|
|
336
|
+
|
|
337
|
+
> `@BoolColumn()` 已经内建了 `@GetMutatorBool()`
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
307
341
|
## 🧩 实体关系示例
|
|
308
342
|
|
|
309
343
|
```ts
|
|
@@ -486,6 +520,26 @@ isActive: boolean;
|
|
|
486
520
|
|
|
487
521
|
---
|
|
488
522
|
|
|
523
|
+
### RestfulFactory 配置项
|
|
524
|
+
|
|
525
|
+
```ts
|
|
526
|
+
export interface RestfulFactoryOptions<T> {
|
|
527
|
+
fieldsToOmit?: (keyof T)[]; // 不出现在任何输入 DTO 中的字段
|
|
528
|
+
writeFieldsToOmit?: (keyof T)[]; // 不出现在创建与更新 DTO 中的字段
|
|
529
|
+
createFieldsToOmit?: (keyof T)[]; // 不出现在创建 DTO 中的字段
|
|
530
|
+
updateFieldsToOmit?: (keyof T)[]; // 不出现在更新 DTO 中的字段
|
|
531
|
+
findAllFieldsToOmit?: (keyof T)[]; // 不出现在查询 DTO 中的字段
|
|
532
|
+
outputFieldsToOmit?: (keyof T)[]; // 不出现在任何输出 DTO 中的字段
|
|
533
|
+
prefix?: string; // 接口的路由前缀
|
|
534
|
+
keepEntityVersioningDates?: boolean; // 在返回结果中保留实体的 createTime / updateTime 字段
|
|
535
|
+
entityClassName?: string; // 实体类名称,如果存在同一 Entity 的多个 RestfulFactory 实例时需要指定,避免 OpenAPI 类型冲突
|
|
536
|
+
relations?: (string | RelationDef)[]; // 关联加载的关系字段,传给 CrudService 的 relations 参数,以及用于生成关系 DTO
|
|
537
|
+
skipNonQueryableFields?: boolean; // 在查询 DTO 中跳过所有没有 @QueryXXX() 装饰器的字段
|
|
538
|
+
}
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
489
543
|
### 示例 Controller
|
|
490
544
|
|
|
491
545
|
```ts
|