vona-module-a-orm 5.0.96 → 5.1.2
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/LICENSE +0 -0
- package/cli/entity/metadata/generate.ts +2 -1
- package/cli/model/metadata/generate.ts +6 -2
- package/cli/model/metadata/magic.ts +15 -6
- package/dist/.metadata/index.d.ts +1 -0
- package/dist/.metadata/index.d.ts.map +1 -0
- package/dist/.metadata/locales.d.ts +1 -0
- package/dist/.metadata/locales.d.ts.map +1 -0
- package/dist/.metadata/this.d.ts +1 -0
- package/dist/.metadata/this.d.ts.map +1 -0
- package/dist/bean/aopMethod.transaction.d.ts +2 -1
- package/dist/bean/aopMethod.transaction.d.ts.map +1 -0
- package/dist/bean/bean.database.d.ts +2 -1
- package/dist/bean/bean.database.d.ts.map +1 -0
- package/dist/bean/bean.databaseDialectBase.d.ts +2 -1
- package/dist/bean/bean.databaseDialectBase.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_cache.d.ts +5 -1
- package/dist/bean/bean.model/bean.model_cache.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_crud.d.ts +1 -0
- package/dist/bean/bean.model/bean.model_crud.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_crud_inner.d.ts +3 -1
- package/dist/bean/bean.model/bean.model_crud_inner.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_crud_table.d.ts +1 -0
- package/dist/bean/bean.model/bean.model_crud_table.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_knex.d.ts +1 -0
- package/dist/bean/bean.model/bean.model_knex.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_meta.d.ts +3 -2
- package/dist/bean/bean.model/bean.model_meta.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_utils.d.ts +5 -3
- package/dist/bean/bean.model/bean.model_utils.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_view.d.ts +1 -0
- package/dist/bean/bean.model/bean.model_view.d.ts.map +1 -0
- package/dist/bean/bean.model.d.ts +1 -0
- package/dist/bean/bean.model.d.ts.map +1 -0
- package/dist/bean/bean.modelBase.d.ts +1 -0
- package/dist/bean/bean.modelBase.d.ts.map +1 -0
- package/dist/bean/broadcast.columnsClear.d.ts +2 -1
- package/dist/bean/broadcast.columnsClear.d.ts.map +1 -0
- package/dist/bean/event.clientNameReal.d.ts +2 -1
- package/dist/bean/event.clientNameReal.d.ts.map +1 -0
- package/dist/bean/event.columnsClear.d.ts +2 -1
- package/dist/bean/event.columnsClear.d.ts.map +1 -0
- package/dist/bean/hmr.entity.d.ts +1 -0
- package/dist/bean/hmr.entity.d.ts.map +1 -0
- package/dist/bean/hmr.model.d.ts +1 -0
- package/dist/bean/hmr.model.d.ts.map +1 -0
- package/dist/bean/queue.doubleDelete.d.ts +2 -1
- package/dist/bean/queue.doubleDelete.d.ts.map +1 -0
- package/dist/bean/schedule.softDeletionPrune.d.ts +1 -0
- package/dist/bean/schedule.softDeletionPrune.d.ts.map +1 -0
- package/dist/common/buildWhere.d.ts +1 -0
- package/dist/common/buildWhere.d.ts.map +1 -0
- package/dist/common/checkWhere.d.ts +1 -0
- package/dist/common/checkWhere.d.ts.map +1 -0
- package/dist/common/index.d.ts +1 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/utils.d.ts +2 -1
- package/dist/common/utils.d.ts.map +1 -0
- package/dist/config/config.d.ts +1 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/errors.d.ts +1 -0
- package/dist/config/errors.d.ts.map +1 -0
- package/dist/config/locale/en-us.d.ts +1 -0
- package/dist/config/locale/en-us.d.ts.map +1 -0
- package/dist/config/locale/zh-cn.d.ts +1 -0
- package/dist/config/locale/zh-cn.d.ts.map +1 -0
- package/dist/extend/index.d.ts +1 -0
- package/dist/extend/index.d.ts.map +1 -0
- package/dist/extend/schemaBuilder.d.ts +1 -0
- package/dist/extend/schemaBuilder.d.ts.map +1 -0
- package/dist/extend/tableBuilder.d.ts +1 -0
- package/dist/extend/tableBuilder.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +94 -15
- package/dist/index.js.map +1 -0
- package/dist/lib/const.d.ts +1 -0
- package/dist/lib/const.d.ts.map +1 -0
- package/dist/lib/databaseDialect.d.ts +1 -0
- package/dist/lib/databaseDialect.d.ts.map +1 -0
- package/dist/lib/dto/dto.d.ts +3 -0
- package/dist/lib/dto/dto.d.ts.map +1 -0
- package/dist/lib/dto/dtoAggregate.d.ts +3 -2
- package/dist/lib/dto/dtoAggregate.d.ts.map +1 -0
- package/dist/lib/dto/dtoCreate.d.ts +2 -1
- package/dist/lib/dto/dtoCreate.d.ts.map +1 -0
- package/dist/lib/dto/dtoGet.d.ts +2 -1
- package/dist/lib/dto/dtoGet.d.ts.map +1 -0
- package/dist/lib/dto/dtoGroup.d.ts +2 -1
- package/dist/lib/dto/dtoGroup.d.ts.map +1 -0
- package/dist/lib/dto/dtoListAndCount.d.ts +4 -0
- package/dist/lib/dto/dtoListAndCount.d.ts.map +1 -0
- package/dist/lib/dto/dtoMutate.d.ts +3 -2
- package/dist/lib/dto/dtoMutate.d.ts.map +1 -0
- package/dist/lib/dto/dtoQuery.d.ts +1 -0
- package/dist/lib/dto/dtoQuery.d.ts.map +1 -0
- package/dist/lib/dto/dtoQueryPage.d.ts +1 -0
- package/dist/lib/dto/dtoQueryPage.d.ts.map +1 -0
- package/dist/lib/dto/dtoSelectAndCount.d.ts +2 -1
- package/dist/lib/dto/dtoSelectAndCount.d.ts.map +1 -0
- package/dist/lib/dto/dtoUpdate.d.ts +2 -1
- package/dist/lib/dto/dtoUpdate.d.ts.map +1 -0
- package/dist/lib/dto/index.d.ts +1 -0
- package/dist/lib/dto/index.d.ts.map +1 -0
- package/dist/lib/entity.d.ts +1 -0
- package/dist/lib/entity.d.ts.map +1 -0
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/model.d.ts +1 -0
- package/dist/lib/model.d.ts.map +1 -0
- package/dist/lib/modelCacheBase.d.ts +2 -1
- package/dist/lib/modelCacheBase.d.ts.map +1 -0
- package/dist/lib/relations.d.ts +5 -4
- package/dist/lib/relations.d.ts.map +1 -0
- package/dist/lib/relationsDynamic.d.ts +5 -4
- package/dist/lib/relationsDynamic.d.ts.map +1 -0
- package/dist/lib/relationsMutate.d.ts +4 -3
- package/dist/lib/relationsMutate.d.ts.map +1 -0
- package/dist/lib/relationsStatic.d.ts +1 -0
- package/dist/lib/relationsStatic.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +1 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/main.d.ts +2 -1
- package/dist/main.d.ts.map +1 -0
- package/dist/service/cacheEntity_.d.ts +1 -0
- package/dist/service/cacheEntity_.d.ts.map +1 -0
- package/dist/service/cacheQuery_.d.ts +1 -0
- package/dist/service/cacheQuery_.d.ts.map +1 -0
- package/dist/service/columnsCache_.d.ts +2 -1
- package/dist/service/columnsCache_.d.ts.map +1 -0
- package/dist/service/columns_.d.ts +2 -1
- package/dist/service/columns_.d.ts.map +1 -0
- package/dist/service/database.d.ts +2 -1
- package/dist/service/database.d.ts.map +1 -0
- package/dist/service/databaseAsyncLocalStorage_.d.ts +1 -0
- package/dist/service/databaseAsyncLocalStorage_.d.ts.map +1 -0
- package/dist/service/databaseClient_.d.ts +2 -1
- package/dist/service/databaseClient_.d.ts.map +1 -0
- package/dist/service/db_.d.ts +2 -1
- package/dist/service/db_.d.ts.map +1 -0
- package/dist/service/entityResolver_.d.ts +1 -0
- package/dist/service/entityResolver_.d.ts.map +1 -0
- package/dist/service/modelResolver_.d.ts +1 -0
- package/dist/service/modelResolver_.d.ts.map +1 -0
- package/dist/service/relations_.d.ts +2 -1
- package/dist/service/relations_.d.ts.map +1 -0
- package/dist/service/transactionAsyncLocalStorage_.d.ts +1 -0
- package/dist/service/transactionAsyncLocalStorage_.d.ts.map +1 -0
- package/dist/service/transactionConsistency/342/200/214_.d.ts +1 -0
- package/dist/service/transactionConsistency/342/200/214_.d.ts.map +1 -0
- package/dist/service/transactionFiber_.d.ts +1 -0
- package/dist/service/transactionFiber_.d.ts.map +1 -0
- package/dist/service/transactionState_.d.ts +2 -1
- package/dist/service/transactionState_.d.ts.map +1 -0
- package/dist/service/transaction_.d.ts +2 -1
- package/dist/service/transaction_.d.ts.map +1 -0
- package/dist/types/columns.d.ts +1 -0
- package/dist/types/columns.d.ts.map +1 -0
- package/dist/types/config.d.ts +1 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/database.d.ts +1 -0
- package/dist/types/database.d.ts.map +1 -0
- package/dist/types/depth.d.ts +1 -0
- package/dist/types/depth.d.ts.map +1 -0
- package/dist/types/dialect.d.ts +1 -0
- package/dist/types/dialect.d.ts.map +1 -0
- package/dist/types/dto/dtoAggregate.d.ts +1 -0
- package/dist/types/dto/dtoAggregate.d.ts.map +1 -0
- package/dist/types/dto/dtoGet.d.ts +3 -2
- package/dist/types/dto/dtoGet.d.ts.map +1 -0
- package/dist/types/dto/dtoGroup.d.ts +1 -0
- package/dist/types/dto/dtoGroup.d.ts.map +1 -0
- package/dist/types/dto/dtoListAndCount.d.ts +8 -0
- package/dist/types/dto/dtoListAndCount.d.ts.map +1 -0
- package/dist/types/dto/dtoMutate.d.ts +8 -9
- package/dist/types/dto/dtoMutate.d.ts.map +1 -0
- package/dist/types/dto/dtoQueryBase.d.ts +1 -0
- package/dist/types/dto/dtoQueryBase.d.ts.map +1 -0
- package/dist/types/dto/dtoQueryPageBase.d.ts +1 -0
- package/dist/types/dto/dtoQueryPageBase.d.ts.map +1 -0
- package/dist/types/dto/dtoSelectAndCount.d.ts +2 -1
- package/dist/types/dto/dtoSelectAndCount.d.ts.map +1 -0
- package/dist/types/dto/index.d.ts +2 -0
- package/dist/types/dto/index.d.ts.map +1 -0
- package/dist/types/entity.d.ts +1 -0
- package/dist/types/entity.d.ts.map +1 -0
- package/dist/types/entityBase.d.ts +1 -0
- package/dist/types/entityBase.d.ts.map +1 -0
- package/dist/types/entityBaseEmpty.d.ts +1 -0
- package/dist/types/entityBaseEmpty.d.ts.map +1 -0
- package/dist/types/entityBaseInner.d.ts +1 -0
- package/dist/types/entityBaseInner.d.ts.map +1 -0
- package/dist/types/entityBaseSimple.d.ts +1 -0
- package/dist/types/entityBaseSimple.d.ts.map +1 -0
- package/dist/types/extra.d.ts +1 -0
- package/dist/types/extra.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/logger.d.ts +1 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/model.d.ts +3 -2
- package/dist/types/model.d.ts.map +1 -0
- package/dist/types/modelAggr.d.ts +2 -1
- package/dist/types/modelAggr.d.ts.map +1 -0
- package/dist/types/modelCount.d.ts +2 -1
- package/dist/types/modelCount.d.ts.map +1 -0
- package/dist/types/modelGeneral.d.ts +4 -3
- package/dist/types/modelGeneral.d.ts.map +1 -0
- package/dist/types/modelGroup.d.ts +2 -1
- package/dist/types/modelGroup.d.ts.map +1 -0
- package/dist/types/modelIncrement.d.ts +19 -0
- package/dist/types/modelIncrement.d.ts.map +1 -0
- package/dist/types/modelWhere.d.ts +2 -1
- package/dist/types/modelWhere.d.ts.map +1 -0
- package/dist/types/onion/databaseDialect.d.ts +1 -0
- package/dist/types/onion/databaseDialect.d.ts.map +1 -0
- package/dist/types/onion/entity.d.ts +1 -0
- package/dist/types/onion/entity.d.ts.map +1 -0
- package/dist/types/onion/index.d.ts +1 -0
- package/dist/types/onion/index.d.ts.map +1 -0
- package/dist/types/onion/model.d.ts +1 -0
- package/dist/types/onion/model.d.ts.map +1 -0
- package/dist/types/onion/table.d.ts +1 -0
- package/dist/types/onion/table.d.ts.map +1 -0
- package/dist/types/relations.d.ts +10 -11
- package/dist/types/relations.d.ts.map +1 -0
- package/dist/types/relationsAggr.d.ts +2 -1
- package/dist/types/relationsAggr.d.ts.map +1 -0
- package/dist/types/relationsColumns.d.ts +5 -4
- package/dist/types/relationsColumns.d.ts.map +1 -0
- package/dist/types/relationsDef.d.ts +5 -4
- package/dist/types/relationsDef.d.ts.map +1 -0
- package/dist/types/relationsDefDynamic.d.ts +6 -5
- package/dist/types/relationsDefDynamic.d.ts.map +1 -0
- package/dist/types/relationsDefMutate.d.ts +1 -0
- package/dist/types/relationsDefMutate.d.ts.map +1 -0
- package/dist/types/relationsGroup.d.ts +1 -0
- package/dist/types/relationsGroup.d.ts.map +1 -0
- package/dist/types/relationsMutate.d.ts +4 -3
- package/dist/types/relationsMutate.d.ts.map +1 -0
- package/dist/types/relationsTables.d.ts +1 -0
- package/dist/types/relationsTables.d.ts.map +1 -0
- package/dist/types/transaction.d.ts +1 -0
- package/dist/types/transaction.d.ts.map +1 -0
- package/dist-cli/entity/metadata/generate.js +1 -1
- package/dist-cli/model/metadata/generate.js +4 -2
- package/dist-cli/model/metadata/magic.js +2 -2
- package/package.json +40 -36
- package/src/.metadata/index.ts +348 -0
- package/src/.metadata/locales.ts +13 -0
- package/src/.metadata/this.ts +2 -0
- package/src/bean/aopMethod.transaction.ts +18 -0
- package/src/bean/bean.database.ts +57 -0
- package/src/bean/bean.databaseDialectBase.ts +149 -0
- package/src/bean/bean.model/bean.model_cache.ts +815 -0
- package/src/bean/bean.model/bean.model_crud.ts +46 -0
- package/src/bean/bean.model/bean.model_crud_inner.ts +281 -0
- package/src/bean/bean.model/bean.model_crud_table.ts +59 -0
- package/src/bean/bean.model/bean.model_knex.ts +60 -0
- package/src/bean/bean.model/bean.model_meta.ts +204 -0
- package/src/bean/bean.model/bean.model_utils.ts +275 -0
- package/src/bean/bean.model/bean.model_view.ts +129 -0
- package/src/bean/bean.model.ts +8 -0
- package/src/bean/bean.modelBase.ts +8 -0
- package/src/bean/broadcast.columnsClear.ts +24 -0
- package/src/bean/event.clientNameReal.ts +10 -0
- package/src/bean/event.columnsClear.ts +13 -0
- package/src/bean/hmr.entity.ts +12 -0
- package/src/bean/hmr.model.ts +16 -0
- package/src/bean/queue.doubleDelete.ts +29 -0
- package/src/bean/schedule.softDeletionPrune.ts +45 -0
- package/src/common/buildWhere.ts +238 -0
- package/src/common/checkWhere.ts +128 -0
- package/src/common/index.ts +3 -0
- package/src/common/utils.ts +74 -0
- package/src/config/config.ts +60 -0
- package/src/config/errors.ts +3 -0
- package/src/config/locale/en-us.ts +8 -0
- package/src/config/locale/zh-cn.ts +8 -0
- package/src/extend/index.ts +12 -0
- package/src/extend/schemaBuilder.ts +29 -0
- package/src/extend/tableBuilder.ts +87 -0
- package/src/index.ts +10 -0
- package/src/lib/const.ts +58 -0
- package/src/lib/databaseDialect.ts +7 -0
- package/src/lib/dto/dto.ts +21 -0
- package/src/lib/dto/dtoAggregate.ts +51 -0
- package/src/lib/dto/dtoCreate.ts +14 -0
- package/src/lib/dto/dtoGet.ts +159 -0
- package/src/lib/dto/dtoGroup.ts +57 -0
- package/src/lib/dto/dtoListAndCount.ts +16 -0
- package/src/lib/dto/dtoMutate.ts +82 -0
- package/src/lib/dto/dtoQuery.ts +9 -0
- package/src/lib/dto/dtoQueryPage.ts +9 -0
- package/src/lib/dto/dtoSelectAndCount.ts +20 -0
- package/src/lib/dto/dtoUpdate.ts +16 -0
- package/src/lib/dto/index.ts +1 -0
- package/src/lib/entity.ts +25 -0
- package/src/lib/index.ts +9 -0
- package/src/lib/model.ts +7 -0
- package/src/lib/modelCacheBase.ts +98 -0
- package/src/lib/relations.ts +118 -0
- package/src/lib/relationsDynamic.ts +75 -0
- package/src/lib/relationsMutate.ts +60 -0
- package/src/lib/relationsStatic.ts +18 -0
- package/src/lib/utils.ts +45 -0
- package/src/main.ts +79 -0
- package/src/service/cacheEntity_.ts +37 -0
- package/src/service/cacheQuery_.ts +20 -0
- package/src/service/columnsCache_.ts +69 -0
- package/src/service/columns_.ts +64 -0
- package/src/service/database.ts +126 -0
- package/src/service/databaseAsyncLocalStorage_.ts +29 -0
- package/src/service/databaseClient_.ts +124 -0
- package/src/service/db_.ts +77 -0
- package/src/service/entityResolver_.ts +25 -0
- package/src/service/modelResolver_.ts +19 -0
- package/src/service/relations_.ts +444 -0
- package/src/service/transactionAsyncLocalStorage_.ts +31 -0
- package/src/service/transactionConsistency/342/200/214_.ts +37 -0
- package/src/service/transactionFiber_.ts +42 -0
- package/src/service/transactionState_.ts +35 -0
- package/src/service/transaction_.ts +147 -0
- package/src/types/columns.ts +8 -0
- package/src/types/config.ts +23 -0
- package/src/types/database.ts +64 -0
- package/src/types/depth.ts +55 -0
- package/src/types/dialect.ts +17 -0
- package/src/types/dto/dtoAggregate.ts +3 -0
- package/src/types/dto/dtoGet.ts +23 -0
- package/src/types/dto/dtoGroup.ts +3 -0
- package/src/types/dto/dtoListAndCount.ts +7 -0
- package/src/types/dto/dtoMutate.ts +231 -0
- package/src/types/dto/dtoQueryBase.ts +18 -0
- package/src/types/dto/dtoQueryPageBase.ts +18 -0
- package/src/types/dto/dtoSelectAndCount.ts +11 -0
- package/src/types/dto/index.ts +8 -0
- package/src/types/entity.ts +15 -0
- package/src/types/entityBase.ts +11 -0
- package/src/types/entityBaseEmpty.ts +1 -0
- package/src/types/entityBaseInner.ts +18 -0
- package/src/types/entityBaseSimple.ts +9 -0
- package/src/types/extra.ts +23 -0
- package/src/types/index.ts +30 -0
- package/src/types/logger.ts +6 -0
- package/src/types/model.ts +152 -0
- package/src/types/modelAggr.ts +69 -0
- package/src/types/modelCount.ts +40 -0
- package/src/types/modelGeneral.ts +61 -0
- package/src/types/modelGroup.ts +48 -0
- package/src/types/modelIncrement.ts +50 -0
- package/src/types/modelWhere.ts +85 -0
- package/src/types/onion/databaseDialect.ts +22 -0
- package/src/types/onion/entity.ts +33 -0
- package/src/types/onion/index.ts +4 -0
- package/src/types/onion/model.ts +68 -0
- package/src/types/onion/table.ts +1 -0
- package/src/types/relations.ts +243 -0
- package/src/types/relationsAggr.ts +31 -0
- package/src/types/relationsColumns.ts +116 -0
- package/src/types/relationsDef.ts +152 -0
- package/src/types/relationsDefDynamic.ts +128 -0
- package/src/types/relationsDefMutate.ts +11 -0
- package/src/types/relationsGroup.ts +58 -0
- package/src/types/relationsMutate.ts +118 -0
- package/src/types/relationsTables.ts +38 -0
- package/src/types/transaction.ts +23 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { BeanSummerCacheBase, IDecoratorSummerCacheOptions } from 'vona-module-a-summer';
|
|
2
|
+
|
|
3
|
+
import { BeanBase, deepExtend } from 'vona';
|
|
4
|
+
|
|
5
|
+
import type { BeanModelCache } from '../bean/bean.model/bean.model_cache.ts';
|
|
6
|
+
import type { TypeModelCacheType } from '../types/model.ts';
|
|
7
|
+
import type { ITableRecord } from '../types/onion/table.ts';
|
|
8
|
+
|
|
9
|
+
import { getCacheModelCacheInstances } from './const.ts';
|
|
10
|
+
|
|
11
|
+
const SymbolCacheOptions = Symbol('SymbolCacheOptions');
|
|
12
|
+
const SymbolCacheEnabled = Symbol('SymbolCacheEnabled');
|
|
13
|
+
|
|
14
|
+
export class ModelCacheBase extends BeanBase {
|
|
15
|
+
private [SymbolCacheOptions]: IDecoratorSummerCacheOptions | false;
|
|
16
|
+
protected _model: BeanModelCache;
|
|
17
|
+
private _cacheType: TypeModelCacheType;
|
|
18
|
+
|
|
19
|
+
protected __init__(model: BeanModelCache, cacheType: TypeModelCacheType) {
|
|
20
|
+
this._model = model;
|
|
21
|
+
this._cacheType = cacheType;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
private get scopeOrm() {
|
|
25
|
+
return this.$scope.orm;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public getInstance(table: keyof ITableRecord): BeanSummerCacheBase {
|
|
29
|
+
if (this.options === false) throw new Error('cache disabled');
|
|
30
|
+
const beanFullName = this._model.$beanFullName;
|
|
31
|
+
const cacheName = this.getName(table);
|
|
32
|
+
const cacheModelCacheInstances = getCacheModelCacheInstances(this.app);
|
|
33
|
+
if (!cacheModelCacheInstances[beanFullName]) cacheModelCacheInstances[beanFullName] = {};
|
|
34
|
+
if (!cacheModelCacheInstances[beanFullName][cacheName]) {
|
|
35
|
+
cacheModelCacheInstances[beanFullName][cacheName] = this.app.bean.summer.cache<any, any>(cacheName, this.options);
|
|
36
|
+
}
|
|
37
|
+
return cacheModelCacheInstances[beanFullName][cacheName];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public getName(table: keyof ITableRecord) {
|
|
41
|
+
const clientNameReal = this.$scope.orm.service.database.prepareClientNameReal(this._model.db.clientName);
|
|
42
|
+
return `${this._model.$beanFullName}:${clientNameReal}:${table}:${this._cacheType}`;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public get options() {
|
|
46
|
+
if (this[SymbolCacheOptions] === undefined) {
|
|
47
|
+
this[SymbolCacheOptions] = this._getCacheOptionsInner();
|
|
48
|
+
}
|
|
49
|
+
return this[SymbolCacheOptions];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public get enabled() {
|
|
53
|
+
if (this[SymbolCacheEnabled] === undefined) {
|
|
54
|
+
this[SymbolCacheEnabled] = this._getCacheEnabledInner();
|
|
55
|
+
}
|
|
56
|
+
return this[SymbolCacheEnabled];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private _getCacheEnabledInner() {
|
|
60
|
+
if (this.options === false) return false;
|
|
61
|
+
// enable
|
|
62
|
+
if (!this.bean.onion.checkOnionOptionsEnabled(this.options)) return false;
|
|
63
|
+
// default
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
private _getCacheOptionsInner() {
|
|
68
|
+
if (this._model.options.cache?.[this._cacheType] === false) return false;
|
|
69
|
+
// options
|
|
70
|
+
let _cacheOptions = (this._model.options.cache?.[this._cacheType] ?? {}) as IDecoratorSummerCacheOptions;
|
|
71
|
+
// preset
|
|
72
|
+
let configPreset;
|
|
73
|
+
let preset = _cacheOptions.preset;
|
|
74
|
+
if (!preset && !_cacheOptions.mode) preset = this.scopeOrm.config.summer.presetDefault;
|
|
75
|
+
if (preset) {
|
|
76
|
+
configPreset = this.scopeOrm.config.summer.preset[preset];
|
|
77
|
+
}
|
|
78
|
+
// extend
|
|
79
|
+
_cacheOptions = deepExtend(
|
|
80
|
+
{
|
|
81
|
+
enable: this.scopeOrm.config.summer.enable,
|
|
82
|
+
meta: this.scopeOrm.config.summer.meta,
|
|
83
|
+
mem: {
|
|
84
|
+
disableInstance: this._model.disableInstance,
|
|
85
|
+
},
|
|
86
|
+
redis: {
|
|
87
|
+
disableInstance: this._model.disableInstance,
|
|
88
|
+
client: this.scopeOrm.config.summer.redis.client,
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
configPreset,
|
|
92
|
+
_cacheOptions,
|
|
93
|
+
{ preset: undefined },
|
|
94
|
+
);
|
|
95
|
+
// ok
|
|
96
|
+
return _cacheOptions;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
|
|
2
|
+
import type { IModelClassRecord } from '../types/onion/model.ts';
|
|
3
|
+
import type { TypeModelClassLike, TypeModelOfModelLike, TypeModelsClassLikeGeneral, TypeSymbolKeyEntity } from '../types/relations.ts';
|
|
4
|
+
import type { IModelRelationOptionsManyStatic, IModelRelationOptionsOneStatic } from './relationsStatic.ts';
|
|
5
|
+
|
|
6
|
+
function hasOne<MODEL extends BeanModelMeta | keyof IModelClassRecord, OPTIONS extends IModelRelationOptionsOneStatic<TypeModelOfModelLike<MODEL>>>(
|
|
7
|
+
classModel: TypeModelClassLike<MODEL>,
|
|
8
|
+
key: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
|
|
9
|
+
options?: OPTIONS,
|
|
10
|
+
): any {
|
|
11
|
+
// : IModelRelationHasOne<MODEL, AUTOLOAD, COLUMNS> {
|
|
12
|
+
return { type: 'hasOne', model: classModel, key, options };
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function belongsTo<
|
|
16
|
+
MODELSelf extends BeanModelMeta | keyof IModelClassRecord,
|
|
17
|
+
MODEL extends BeanModelMeta | keyof IModelClassRecord,
|
|
18
|
+
OPTIONS extends IModelRelationOptionsOneStatic<TypeModelOfModelLike<MODEL>>,
|
|
19
|
+
>(
|
|
20
|
+
_classModelSelf: TypeModelClassLike<MODELSelf>,
|
|
21
|
+
classModel: TypeModelClassLike<MODEL>,
|
|
22
|
+
key: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity],
|
|
23
|
+
options?: OPTIONS,
|
|
24
|
+
): any {
|
|
25
|
+
// : IModelRelationBelongsTo<MODELSelf, MODEL, AUTOLOAD, COLUMNS> {
|
|
26
|
+
return { type: 'belongsTo', model: classModel, key, options };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function hasMany<
|
|
30
|
+
MODEL extends BeanModelMeta | keyof IModelClassRecord,
|
|
31
|
+
OPTIONS extends IModelRelationOptionsManyStatic<TypeModelOfModelLike<MODEL>, ModelJoins, Group>,
|
|
32
|
+
ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
|
|
33
|
+
Group extends boolean | undefined = undefined,
|
|
34
|
+
>(
|
|
35
|
+
classModel: TypeModelClassLike<MODEL>,
|
|
36
|
+
key: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
|
|
37
|
+
options?: OPTIONS,
|
|
38
|
+
_modelJoins?: ModelJoins,
|
|
39
|
+
_group?: Group,
|
|
40
|
+
): any {
|
|
41
|
+
// : IModelRelationHasMany<MODEL, AUTOLOAD, COLUMNS, ModelJoins> {
|
|
42
|
+
return { type: 'hasMany', model: classModel, key, options };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function belongsToMany<
|
|
46
|
+
MODELMiddle extends BeanModelMeta | keyof IModelClassRecord,
|
|
47
|
+
MODEL extends BeanModelMeta | keyof IModelClassRecord,
|
|
48
|
+
OPTIONS extends IModelRelationOptionsManyStatic<TypeModelOfModelLike<MODEL>, ModelJoins, Group>,
|
|
49
|
+
ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
|
|
50
|
+
Group extends boolean | undefined = undefined,
|
|
51
|
+
>(
|
|
52
|
+
classModelMiddle: TypeModelClassLike<MODELMiddle>,
|
|
53
|
+
classModel: TypeModelClassLike<MODEL>,
|
|
54
|
+
keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
|
|
55
|
+
keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
|
|
56
|
+
options?: OPTIONS,
|
|
57
|
+
_modelJoins?: ModelJoins,
|
|
58
|
+
_group?: Group,
|
|
59
|
+
): any {
|
|
60
|
+
// : IModelRelationBelongsToMany<MODELMiddle, MODEL, AUTOLOAD, COLUMNS, ModelJoins> {
|
|
61
|
+
return { type: 'belongsToMany', modelMiddle: classModelMiddle, model: classModel, keyFrom, keyTo, options };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const $relation = {
|
|
65
|
+
hasOne,
|
|
66
|
+
belongsTo,
|
|
67
|
+
hasMany,
|
|
68
|
+
belongsToMany,
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// function hasMany<
|
|
72
|
+
// MODEL extends BeanModelMeta | (keyof IModelClassRecord),
|
|
73
|
+
// AUTOLOAD extends boolean = boolean,
|
|
74
|
+
// COLUMNS
|
|
75
|
+
// extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
|
|
76
|
+
// ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
|
|
77
|
+
// Aggrs extends TypeModelSelectAggrParamsAggrs<
|
|
78
|
+
// TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]
|
|
79
|
+
// > | undefined = undefined, // TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
|
|
80
|
+
// Groups extends TypeModelColumnsStrict<
|
|
81
|
+
// TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]
|
|
82
|
+
// > | undefined = undefined, // TypeModelColumnsStrict<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
|
|
83
|
+
// >(
|
|
84
|
+
// classModel: TypeModelClassLike<MODEL>,
|
|
85
|
+
// key: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
|
|
86
|
+
// options?: IModelRelationOptionsMany<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS, ModelJoins, Aggrs, Groups>,
|
|
87
|
+
// _modelJoins?: ModelJoins,
|
|
88
|
+
// _aggrs?: Aggrs,
|
|
89
|
+
// _groups?: Groups,
|
|
90
|
+
// ): any { // : IModelRelationHasMany<MODEL, AUTOLOAD, COLUMNS, ModelJoins> {
|
|
91
|
+
// return { type: 'hasMany', model: classModel, key, options };
|
|
92
|
+
// }
|
|
93
|
+
|
|
94
|
+
// function belongsToMany<
|
|
95
|
+
// MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord),
|
|
96
|
+
// MODEL extends BeanModelMeta | (keyof IModelClassRecord),
|
|
97
|
+
// AUTOLOAD extends boolean = boolean,
|
|
98
|
+
// COLUMNS
|
|
99
|
+
// extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
|
|
100
|
+
// ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
|
|
101
|
+
// Aggrs extends TypeModelSelectAggrParamsAggrs<
|
|
102
|
+
// TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]
|
|
103
|
+
// > | undefined = undefined, // TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
|
|
104
|
+
// Groups extends TypeModelColumnsStrict<
|
|
105
|
+
// TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]
|
|
106
|
+
// > | undefined = undefined, // TypeModelColumnsStrict<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>,
|
|
107
|
+
// >(
|
|
108
|
+
// classModelMiddle: TypeModelClassLike<MODELMiddle>,
|
|
109
|
+
// classModel: TypeModelClassLike<MODEL>,
|
|
110
|
+
// keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
|
|
111
|
+
// keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
|
|
112
|
+
// options?: IModelRelationOptionsMany<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS, ModelJoins, Aggrs, Groups>,
|
|
113
|
+
// _modelJoins?: ModelJoins,
|
|
114
|
+
// _aggrs?: Aggrs,
|
|
115
|
+
// _groups?: Groups,
|
|
116
|
+
// ): any { // : IModelRelationBelongsToMany<MODELMiddle, MODEL, AUTOLOAD, COLUMNS, ModelJoins> {
|
|
117
|
+
// return { type: 'belongsToMany', modelMiddle: classModelMiddle, model: classModel, keyFrom, keyTo, options };
|
|
118
|
+
// }
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
|
|
2
|
+
import type { IModelClassRecord } from '../types/onion/model.ts';
|
|
3
|
+
import type { TypeModelClassLike, TypeModelOfModelLike, TypeModelsClassLikeGeneral, TypeSymbolKeyEntity } from '../types/relations.ts';
|
|
4
|
+
import type {
|
|
5
|
+
IModelRelationBelongsToDynamic,
|
|
6
|
+
IModelRelationBelongsToManyDynamic,
|
|
7
|
+
IModelRelationHasManyDynamic,
|
|
8
|
+
IModelRelationHasOneDynamic,
|
|
9
|
+
IModelRelationOptionsManyDynamic,
|
|
10
|
+
IModelRelationOptionsOneDynamic,
|
|
11
|
+
} from '../types/relationsDefDynamic.ts';
|
|
12
|
+
|
|
13
|
+
function hasOne<
|
|
14
|
+
MODEL extends BeanModelMeta | keyof IModelClassRecord,
|
|
15
|
+
KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
|
|
16
|
+
OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined,
|
|
17
|
+
>(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasOneDynamic<MODEL, KEY, OPTIONS> {
|
|
18
|
+
return { type: 'hasOne', model: classModel, key, options };
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function belongsTo<
|
|
22
|
+
MODELSelf extends BeanModelMeta | keyof IModelClassRecord,
|
|
23
|
+
MODEL extends BeanModelMeta | keyof IModelClassRecord,
|
|
24
|
+
OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined,
|
|
25
|
+
>(
|
|
26
|
+
_classModelSelf: TypeModelClassLike<MODELSelf>,
|
|
27
|
+
classModel: TypeModelClassLike<MODEL>,
|
|
28
|
+
key: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity],
|
|
29
|
+
options?: OPTIONS,
|
|
30
|
+
): IModelRelationBelongsToDynamic<MODELSelf, MODEL, OPTIONS> {
|
|
31
|
+
return { type: 'belongsTo', model: classModel, key, options };
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function hasMany<
|
|
35
|
+
MODEL extends BeanModelMeta | keyof IModelClassRecord,
|
|
36
|
+
KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
|
|
37
|
+
// not use `| undefined = undefined` or `= {}`
|
|
38
|
+
OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined,
|
|
39
|
+
ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
|
|
40
|
+
Group extends boolean | undefined = undefined,
|
|
41
|
+
>(
|
|
42
|
+
classModel: TypeModelClassLike<MODEL>,
|
|
43
|
+
key: KEY,
|
|
44
|
+
options?: OPTIONS,
|
|
45
|
+
_modelJoins?: ModelJoins,
|
|
46
|
+
_group?: Group,
|
|
47
|
+
): IModelRelationHasManyDynamic<MODEL, KEY, OPTIONS, ModelJoins, Group> {
|
|
48
|
+
return { type: 'hasMany', model: classModel, key, options };
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function belongsToMany<
|
|
52
|
+
MODELMiddle extends BeanModelMeta | keyof IModelClassRecord,
|
|
53
|
+
MODEL extends BeanModelMeta | keyof IModelClassRecord,
|
|
54
|
+
// not use `| undefined = undefined` or `= {}`
|
|
55
|
+
OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined,
|
|
56
|
+
ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
|
|
57
|
+
Group extends boolean | undefined = undefined,
|
|
58
|
+
>(
|
|
59
|
+
classModelMiddle: TypeModelClassLike<MODELMiddle>,
|
|
60
|
+
classModel: TypeModelClassLike<MODEL>,
|
|
61
|
+
keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
|
|
62
|
+
keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
|
|
63
|
+
options?: OPTIONS,
|
|
64
|
+
_modelJoins?: ModelJoins,
|
|
65
|
+
_group?: Group,
|
|
66
|
+
): IModelRelationBelongsToManyDynamic<MODELMiddle, MODEL, OPTIONS, ModelJoins, Group> {
|
|
67
|
+
return { type: 'belongsToMany', modelMiddle: classModelMiddle, model: classModel, keyFrom, keyTo, options };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export const $relationDynamic = {
|
|
71
|
+
hasOne,
|
|
72
|
+
belongsTo,
|
|
73
|
+
hasMany,
|
|
74
|
+
belongsToMany,
|
|
75
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
|
|
2
|
+
import type { IModelClassRecord } from '../types/onion/model.ts';
|
|
3
|
+
import type { TypeModelClassLike, TypeModelOfModelLike, TypeSymbolKeyEntity } from '../types/relations.ts';
|
|
4
|
+
import type { IModelRelationBelongsToManyDynamic, IModelRelationHasManyDynamic, IModelRelationHasOneDynamic } from '../types/relationsDefDynamic.ts';
|
|
5
|
+
import type {
|
|
6
|
+
IModelRelationOptionsBelongsToManyMutate,
|
|
7
|
+
IModelRelationOptionsManyMutate,
|
|
8
|
+
IModelRelationOptionsOneMutate,
|
|
9
|
+
} from '../types/relationsDefMutate.ts';
|
|
10
|
+
|
|
11
|
+
function hasOne<
|
|
12
|
+
MODEL extends BeanModelMeta | keyof IModelClassRecord,
|
|
13
|
+
KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
|
|
14
|
+
OPTIONS extends IModelRelationOptionsOneMutate<TypeModelOfModelLike<MODEL>>,
|
|
15
|
+
>(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasOneDynamic<MODEL, KEY, OPTIONS> {
|
|
16
|
+
return { type: 'hasOne', model: classModel, key, options };
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// function belongsTo<
|
|
20
|
+
// MODELSelf extends BeanModelMeta | (keyof IModelClassRecord),
|
|
21
|
+
// MODEL extends BeanModelMeta | (keyof IModelClassRecord),
|
|
22
|
+
// OPTIONS extends IModelRelationOptionsOneMutate<TypeModelOfModelLike<MODEL>>,
|
|
23
|
+
// >(
|
|
24
|
+
// _classModelSelf: TypeModelClassLike<MODELSelf>,
|
|
25
|
+
// classModel: TypeModelClassLike<MODEL>,
|
|
26
|
+
// key: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity],
|
|
27
|
+
// options?: OPTIONS,
|
|
28
|
+
// ): IModelRelationBelongsToDynamic<MODELSelf, MODEL, OPTIONS> {
|
|
29
|
+
// return { type: 'belongsTo', model: classModel, key, options };
|
|
30
|
+
// }
|
|
31
|
+
|
|
32
|
+
function hasMany<
|
|
33
|
+
MODEL extends BeanModelMeta | keyof IModelClassRecord,
|
|
34
|
+
KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity],
|
|
35
|
+
// not use `| undefined = undefined` or `= {}`
|
|
36
|
+
OPTIONS extends IModelRelationOptionsManyMutate<TypeModelOfModelLike<MODEL>>,
|
|
37
|
+
>(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasManyDynamic<MODEL, KEY, OPTIONS> {
|
|
38
|
+
return { type: 'hasMany', model: classModel, key, options };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function belongsToMany<
|
|
42
|
+
MODELMiddle extends BeanModelMeta | keyof IModelClassRecord,
|
|
43
|
+
MODEL extends BeanModelMeta | keyof IModelClassRecord,
|
|
44
|
+
OPTIONS extends IModelRelationOptionsBelongsToManyMutate<TypeModelOfModelLike<MODEL>>,
|
|
45
|
+
>(
|
|
46
|
+
classModelMiddle: TypeModelClassLike<MODELMiddle>,
|
|
47
|
+
classModel: TypeModelClassLike<MODEL>,
|
|
48
|
+
keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
|
|
49
|
+
keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity],
|
|
50
|
+
options?: OPTIONS,
|
|
51
|
+
): IModelRelationBelongsToManyDynamic<MODELMiddle, MODEL, OPTIONS> {
|
|
52
|
+
return { type: 'belongsToMany', modelMiddle: classModelMiddle, model: classModel, keyFrom, keyTo, options };
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export const $relationMutate = {
|
|
56
|
+
hasOne,
|
|
57
|
+
// belongsTo,
|
|
58
|
+
hasMany,
|
|
59
|
+
belongsToMany,
|
|
60
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
|
|
2
|
+
import type { TypeModelsClassLikeGeneral } from '../types/relations.ts';
|
|
3
|
+
import type { IModelRelationOptionsManyDynamic, IModelRelationOptionsOneDynamic } from '../types/relationsDefDynamic.ts';
|
|
4
|
+
|
|
5
|
+
export interface IModelRelationOptionsManyStatic<
|
|
6
|
+
MODEL extends BeanModelMeta,
|
|
7
|
+
ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined,
|
|
8
|
+
Group extends boolean | undefined = undefined,
|
|
9
|
+
> extends Omit<IModelRelationOptionsManyDynamic<MODEL, ModelJoins, Group>, 'include' | 'with'> {
|
|
10
|
+
autoload?: boolean;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface IModelRelationOptionsOneStatic<MODEL extends BeanModelMeta> extends Omit<
|
|
14
|
+
IModelRelationOptionsOneDynamic<MODEL>,
|
|
15
|
+
'include' | 'with'
|
|
16
|
+
> {
|
|
17
|
+
autoload?: boolean;
|
|
18
|
+
}
|
package/src/lib/utils.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { deepExtend } from 'vona';
|
|
2
|
+
|
|
3
|
+
import type { IModelRelationIncludeWrapper } from '../types/model.ts';
|
|
4
|
+
import type { IRelationItem } from '../types/relationsDef.ts';
|
|
5
|
+
|
|
6
|
+
export function handleRelationsCollection(relationsStatic?: Record<string, any>, includeWrapper?: IModelRelationIncludeWrapper): IRelationItem[] {
|
|
7
|
+
// collect
|
|
8
|
+
const relations: IRelationItem[] = [];
|
|
9
|
+
// include
|
|
10
|
+
if (relationsStatic) {
|
|
11
|
+
for (const key in relationsStatic) {
|
|
12
|
+
const relationDef = relationsStatic[key];
|
|
13
|
+
const relationCur: any = includeWrapper?.include?.[key];
|
|
14
|
+
let relationReal;
|
|
15
|
+
let includeReal;
|
|
16
|
+
let withReal;
|
|
17
|
+
let autoload;
|
|
18
|
+
if (relationCur === false) {
|
|
19
|
+
continue;
|
|
20
|
+
} else if (relationCur === true) {
|
|
21
|
+
relationReal = relationDef;
|
|
22
|
+
autoload = relationDef.options?.autoload;
|
|
23
|
+
} else if (typeof relationCur === 'object') {
|
|
24
|
+
relationReal = deepExtend({}, relationDef, { options: relationCur });
|
|
25
|
+
includeReal = relationCur.include;
|
|
26
|
+
withReal = relationCur.with;
|
|
27
|
+
} else if (relationDef.options?.autoload) {
|
|
28
|
+
relationReal = relationDef;
|
|
29
|
+
autoload = relationDef.options?.autoload;
|
|
30
|
+
} else {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
relations.push([key, relationReal, includeReal, withReal, autoload]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// with
|
|
37
|
+
if (includeWrapper?.with) {
|
|
38
|
+
for (const key in includeWrapper.with) {
|
|
39
|
+
const relationReal: any = includeWrapper.with[key];
|
|
40
|
+
if (!relationReal) continue;
|
|
41
|
+
relations.push([key, relationReal, relationReal.options?.include, relationReal.options?.with, false]);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return relations;
|
|
45
|
+
}
|
package/src/main.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { FunctionAny, IModuleMain, PowerPartial, VonaApplication, VonaContext } from 'vona';
|
|
2
|
+
|
|
3
|
+
import { BeanSimple, cast, combineConfigDefault, deepExtend } from 'vona';
|
|
4
|
+
import { ServiceDatabaseAsyncLocalStorage, ServiceTransactionConsistency } from 'vona-module-a-orm';
|
|
5
|
+
|
|
6
|
+
import type { ConfigDatabase } from './types/config.ts';
|
|
7
|
+
|
|
8
|
+
import { ExtendKnex } from './extend/index.ts';
|
|
9
|
+
|
|
10
|
+
const SymbolTransactionConsistency = Symbol('SymbolTransactionConsistency');
|
|
11
|
+
|
|
12
|
+
export class Main extends BeanSimple implements IModuleMain {
|
|
13
|
+
async moduleLoading() {
|
|
14
|
+
// config
|
|
15
|
+
const _configDefault = await combineConfigDefault<ConfigDatabase>(this.app, configDefault, configDev, configProd, configTest);
|
|
16
|
+
this.app.config.database = deepExtend({}, _configDefault, this.app.config.database);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async moduleLoaded() {
|
|
20
|
+
// ExtendKnex
|
|
21
|
+
ExtendKnex(this.app);
|
|
22
|
+
// db
|
|
23
|
+
Object.defineProperty(this.app.context, 'db', {
|
|
24
|
+
enumerable: false,
|
|
25
|
+
get(this: VonaContext) {
|
|
26
|
+
return this.app.bean._getBean(ServiceDatabaseAsyncLocalStorage).current;
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
// transactionConsistency
|
|
30
|
+
Object.defineProperty(this.app.context, 'transactionConsistency', {
|
|
31
|
+
enumerable: false,
|
|
32
|
+
get(this: VonaContext) {
|
|
33
|
+
if (!this[SymbolTransactionConsistency]) {
|
|
34
|
+
this[SymbolTransactionConsistency] = this.app.bean._newBean(ServiceTransactionConsistency);
|
|
35
|
+
}
|
|
36
|
+
return this[SymbolTransactionConsistency];
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
// commit
|
|
40
|
+
Object.defineProperty(this.app.context, 'commit', {
|
|
41
|
+
enumerable: false,
|
|
42
|
+
get() {
|
|
43
|
+
return function (this: VonaContext, cb: FunctionAny) {
|
|
44
|
+
if (this.ctxCaller) {
|
|
45
|
+
this.ctxCaller.commit(cb);
|
|
46
|
+
} else {
|
|
47
|
+
cast(this).transactionConsistency.commit(cb);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
Object.defineProperty(this.app.context, 'commitsDone', {
|
|
53
|
+
enumerable: false,
|
|
54
|
+
get() {
|
|
55
|
+
return function (this: VonaContext) {
|
|
56
|
+
return cast(this).transactionConsistency.commitsDone();
|
|
57
|
+
};
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async configLoaded(_config) {}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export async function configDefault(_app: VonaApplication): Promise<PowerPartial<ConfigDatabase>> {
|
|
66
|
+
return {};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async function configDev(_app: VonaApplication): Promise<PowerPartial<ConfigDatabase>> {
|
|
70
|
+
return {};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async function configProd(_app: VonaApplication): Promise<PowerPartial<ConfigDatabase>> {
|
|
74
|
+
return {};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function configTest(_app: VonaApplication): Promise<PowerPartial<ConfigDatabase>> {
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { TableIdentity } from 'table-identity';
|
|
2
|
+
|
|
3
|
+
import { Service } from 'vona-module-a-bean';
|
|
4
|
+
|
|
5
|
+
import type { BeanModelCache } from '../bean/bean.model/bean.model_cache.ts';
|
|
6
|
+
import type { ITableRecord } from '../types/onion/table.ts';
|
|
7
|
+
|
|
8
|
+
import { ModelCacheBase } from '../lib/modelCacheBase.ts';
|
|
9
|
+
|
|
10
|
+
@Service()
|
|
11
|
+
export class ServiceCacheEntity extends ModelCacheBase {
|
|
12
|
+
protected __init__(model: BeanModelCache) {
|
|
13
|
+
super.__init__(model, 'entity');
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public async clear(table?: keyof ITableRecord) {
|
|
17
|
+
if (!this.enabled) return;
|
|
18
|
+
table = table || this._model.getTable(undefined);
|
|
19
|
+
const cache = this.getInstance(table);
|
|
20
|
+
await cache.clear();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public async del(id: TableIdentity | TableIdentity[], table?: keyof ITableRecord) {
|
|
24
|
+
if (!this.enabled) return;
|
|
25
|
+
table = table || this._model.getTable(undefined);
|
|
26
|
+
const cache = this.getInstance(table);
|
|
27
|
+
if (Array.isArray(id)) {
|
|
28
|
+
await cache.mdel(id);
|
|
29
|
+
} else {
|
|
30
|
+
await cache.del(id);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public get keysAux() {
|
|
35
|
+
return this._model.options.cache?.keysAux;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Service } from 'vona-module-a-bean';
|
|
2
|
+
|
|
3
|
+
import type { BeanModelCache } from '../bean/bean.model/bean.model_cache.ts';
|
|
4
|
+
import type { ITableRecord } from '../types/onion/table.ts';
|
|
5
|
+
|
|
6
|
+
import { ModelCacheBase } from '../lib/modelCacheBase.ts';
|
|
7
|
+
|
|
8
|
+
@Service()
|
|
9
|
+
export class ServiceCacheQuery extends ModelCacheBase {
|
|
10
|
+
protected __init__(model: BeanModelCache) {
|
|
11
|
+
super.__init__(model, 'query');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public async clear(table?: keyof ITableRecord) {
|
|
15
|
+
if (!this.enabled) return;
|
|
16
|
+
table = table || this._model.getTable(undefined);
|
|
17
|
+
const cache = this.getInstance(table);
|
|
18
|
+
await cache.clear();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { BeanBase } from 'vona';
|
|
2
|
+
import { Service } from 'vona-module-a-bean';
|
|
3
|
+
|
|
4
|
+
import type { ITableColumns, ITableColumnsDefault } from '../types/columns.ts';
|
|
5
|
+
import type { IDatabaseClientRecord } from '../types/database.ts';
|
|
6
|
+
|
|
7
|
+
const SymbolColumnsCache = Symbol('SymbolColumnsCache');
|
|
8
|
+
const SymbolColumnsDefaultCache = Symbol('SymbolColumnsDefaultCache');
|
|
9
|
+
|
|
10
|
+
@Service()
|
|
11
|
+
export class ServiceColumnsCache extends BeanBase {
|
|
12
|
+
clientName: keyof IDatabaseClientRecord;
|
|
13
|
+
protected [SymbolColumnsCache]: Record<string, ITableColumns> = {};
|
|
14
|
+
protected [SymbolColumnsDefaultCache]: Record<string, ITableColumnsDefault> = {};
|
|
15
|
+
private _onColumnsClearCancel?: Function;
|
|
16
|
+
|
|
17
|
+
/** real client name */
|
|
18
|
+
protected __init__(clientName: keyof IDatabaseClientRecord) {
|
|
19
|
+
this.clientName = clientName;
|
|
20
|
+
this._onColumnsClearCancel = this.scope.event.columnsClear.on(({ clientName, tableName }, next) => {
|
|
21
|
+
if (clientName === this.clientName) {
|
|
22
|
+
this.columnsClear(tableName);
|
|
23
|
+
}
|
|
24
|
+
next();
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
protected async __dispose__() {
|
|
29
|
+
this._onColumnsClearCancel?.();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
getColumnsDefaultCache(table: string) {
|
|
33
|
+
return this[SymbolColumnsDefaultCache][table];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
setColumnsDefaultCache(table: string, data: ITableColumnsDefault) {
|
|
37
|
+
this[SymbolColumnsDefaultCache][table] = data;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
deleteColumnsDefaultCache(table: string) {
|
|
41
|
+
delete this[SymbolColumnsDefaultCache][table];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
getColumnsCache(table: string) {
|
|
45
|
+
return this[SymbolColumnsCache][table];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
setColumnsCache(table: string, columns: ITableColumns) {
|
|
49
|
+
this[SymbolColumnsCache][table] = columns;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
deleteColumnsCache(table: string) {
|
|
53
|
+
delete this[SymbolColumnsCache][table];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
columnsClear(tableName?: string) {
|
|
57
|
+
if (tableName) {
|
|
58
|
+
const exists = this.getColumnsCache(tableName);
|
|
59
|
+
this.deleteColumnsCache(tableName);
|
|
60
|
+
this.deleteColumnsDefaultCache(tableName);
|
|
61
|
+
return exists;
|
|
62
|
+
} else {
|
|
63
|
+
const exists = Object.keys(this[SymbolColumnsCache]).length > 0;
|
|
64
|
+
this[SymbolColumnsCache] = {};
|
|
65
|
+
this[SymbolColumnsDefaultCache] = {};
|
|
66
|
+
return exists;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|