vona-module-a-orm 5.0.95 → 5.1.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.
Files changed (367) hide show
  1. package/LICENSE +0 -0
  2. package/cli/entity/metadata/generate.ts +2 -1
  3. package/cli/model/metadata/generate.ts +6 -2
  4. package/cli/model/metadata/magic.ts +15 -6
  5. package/dist/.metadata/index.d.ts +1 -0
  6. package/dist/.metadata/index.d.ts.map +1 -0
  7. package/dist/.metadata/locales.d.ts +2 -1
  8. package/dist/.metadata/locales.d.ts.map +1 -0
  9. package/dist/.metadata/this.d.ts +1 -0
  10. package/dist/.metadata/this.d.ts.map +1 -0
  11. package/dist/bean/aopMethod.transaction.d.ts +2 -1
  12. package/dist/bean/aopMethod.transaction.d.ts.map +1 -0
  13. package/dist/bean/bean.database.d.ts +2 -1
  14. package/dist/bean/bean.database.d.ts.map +1 -0
  15. package/dist/bean/bean.databaseDialectBase.d.ts +2 -1
  16. package/dist/bean/bean.databaseDialectBase.d.ts.map +1 -0
  17. package/dist/bean/bean.model/bean.model_cache.d.ts +5 -1
  18. package/dist/bean/bean.model/bean.model_cache.d.ts.map +1 -0
  19. package/dist/bean/bean.model/bean.model_crud.d.ts +1 -0
  20. package/dist/bean/bean.model/bean.model_crud.d.ts.map +1 -0
  21. package/dist/bean/bean.model/bean.model_crud_inner.d.ts +3 -1
  22. package/dist/bean/bean.model/bean.model_crud_inner.d.ts.map +1 -0
  23. package/dist/bean/bean.model/bean.model_crud_table.d.ts +1 -0
  24. package/dist/bean/bean.model/bean.model_crud_table.d.ts.map +1 -0
  25. package/dist/bean/bean.model/bean.model_knex.d.ts +1 -0
  26. package/dist/bean/bean.model/bean.model_knex.d.ts.map +1 -0
  27. package/dist/bean/bean.model/bean.model_meta.d.ts +3 -2
  28. package/dist/bean/bean.model/bean.model_meta.d.ts.map +1 -0
  29. package/dist/bean/bean.model/bean.model_utils.d.ts +5 -3
  30. package/dist/bean/bean.model/bean.model_utils.d.ts.map +1 -0
  31. package/dist/bean/bean.model/bean.model_view.d.ts +1 -0
  32. package/dist/bean/bean.model/bean.model_view.d.ts.map +1 -0
  33. package/dist/bean/bean.model.d.ts +1 -0
  34. package/dist/bean/bean.model.d.ts.map +1 -0
  35. package/dist/bean/bean.modelBase.d.ts +1 -0
  36. package/dist/bean/bean.modelBase.d.ts.map +1 -0
  37. package/dist/bean/broadcast.columnsClear.d.ts +2 -1
  38. package/dist/bean/broadcast.columnsClear.d.ts.map +1 -0
  39. package/dist/bean/event.clientNameReal.d.ts +2 -1
  40. package/dist/bean/event.clientNameReal.d.ts.map +1 -0
  41. package/dist/bean/event.columnsClear.d.ts +2 -1
  42. package/dist/bean/event.columnsClear.d.ts.map +1 -0
  43. package/dist/bean/hmr.entity.d.ts +1 -0
  44. package/dist/bean/hmr.entity.d.ts.map +1 -0
  45. package/dist/bean/hmr.model.d.ts +1 -0
  46. package/dist/bean/hmr.model.d.ts.map +1 -0
  47. package/dist/bean/queue.doubleDelete.d.ts +2 -1
  48. package/dist/bean/queue.doubleDelete.d.ts.map +1 -0
  49. package/dist/bean/schedule.softDeletionPrune.d.ts +1 -0
  50. package/dist/bean/schedule.softDeletionPrune.d.ts.map +1 -0
  51. package/dist/common/buildWhere.d.ts +1 -0
  52. package/dist/common/buildWhere.d.ts.map +1 -0
  53. package/dist/common/checkWhere.d.ts +1 -0
  54. package/dist/common/checkWhere.d.ts.map +1 -0
  55. package/dist/common/index.d.ts +1 -0
  56. package/dist/common/index.d.ts.map +1 -0
  57. package/dist/common/utils.d.ts +2 -1
  58. package/dist/common/utils.d.ts.map +1 -0
  59. package/dist/config/config.d.ts +1 -0
  60. package/dist/config/config.d.ts.map +1 -0
  61. package/dist/config/errors.d.ts +1 -0
  62. package/dist/config/errors.d.ts.map +1 -0
  63. package/dist/config/locale/en-us.d.ts +1 -0
  64. package/dist/config/locale/en-us.d.ts.map +1 -0
  65. package/dist/config/locale/zh-cn.d.ts +1 -0
  66. package/dist/config/locale/zh-cn.d.ts.map +1 -0
  67. package/dist/extend/index.d.ts +1 -0
  68. package/dist/extend/index.d.ts.map +1 -0
  69. package/dist/extend/schemaBuilder.d.ts +1 -0
  70. package/dist/extend/schemaBuilder.d.ts.map +1 -0
  71. package/dist/extend/tableBuilder.d.ts +1 -0
  72. package/dist/extend/tableBuilder.d.ts.map +1 -0
  73. package/dist/index.d.ts +1 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +102 -51
  76. package/dist/index.js.map +1 -0
  77. package/dist/lib/const.d.ts +1 -0
  78. package/dist/lib/const.d.ts.map +1 -0
  79. package/dist/lib/databaseDialect.d.ts +1 -0
  80. package/dist/lib/databaseDialect.d.ts.map +1 -0
  81. package/dist/lib/dto/dto.d.ts +3 -0
  82. package/dist/lib/dto/dto.d.ts.map +1 -0
  83. package/dist/lib/dto/dtoAggregate.d.ts +3 -2
  84. package/dist/lib/dto/dtoAggregate.d.ts.map +1 -0
  85. package/dist/lib/dto/dtoCreate.d.ts +2 -1
  86. package/dist/lib/dto/dtoCreate.d.ts.map +1 -0
  87. package/dist/lib/dto/dtoGet.d.ts +2 -1
  88. package/dist/lib/dto/dtoGet.d.ts.map +1 -0
  89. package/dist/lib/dto/dtoGroup.d.ts +2 -1
  90. package/dist/lib/dto/dtoGroup.d.ts.map +1 -0
  91. package/dist/lib/dto/dtoListAndCount.d.ts +4 -0
  92. package/dist/lib/dto/dtoListAndCount.d.ts.map +1 -0
  93. package/dist/lib/dto/dtoMutate.d.ts +3 -2
  94. package/dist/lib/dto/dtoMutate.d.ts.map +1 -0
  95. package/dist/lib/dto/dtoQuery.d.ts +1 -0
  96. package/dist/lib/dto/dtoQuery.d.ts.map +1 -0
  97. package/dist/lib/dto/dtoQueryPage.d.ts +1 -0
  98. package/dist/lib/dto/dtoQueryPage.d.ts.map +1 -0
  99. package/dist/lib/dto/dtoSelectAndCount.d.ts +2 -1
  100. package/dist/lib/dto/dtoSelectAndCount.d.ts.map +1 -0
  101. package/dist/lib/dto/dtoUpdate.d.ts +2 -1
  102. package/dist/lib/dto/dtoUpdate.d.ts.map +1 -0
  103. package/dist/lib/dto/index.d.ts +1 -0
  104. package/dist/lib/dto/index.d.ts.map +1 -0
  105. package/dist/lib/entity.d.ts +1 -0
  106. package/dist/lib/entity.d.ts.map +1 -0
  107. package/dist/lib/index.d.ts +1 -0
  108. package/dist/lib/index.d.ts.map +1 -0
  109. package/dist/lib/model.d.ts +1 -0
  110. package/dist/lib/model.d.ts.map +1 -0
  111. package/dist/lib/modelCacheBase.d.ts +2 -1
  112. package/dist/lib/modelCacheBase.d.ts.map +1 -0
  113. package/dist/lib/relations.d.ts +5 -4
  114. package/dist/lib/relations.d.ts.map +1 -0
  115. package/dist/lib/relationsDynamic.d.ts +5 -4
  116. package/dist/lib/relationsDynamic.d.ts.map +1 -0
  117. package/dist/lib/relationsMutate.d.ts +4 -3
  118. package/dist/lib/relationsMutate.d.ts.map +1 -0
  119. package/dist/lib/relationsStatic.d.ts +1 -0
  120. package/dist/lib/relationsStatic.d.ts.map +1 -0
  121. package/dist/lib/utils.d.ts +1 -0
  122. package/dist/lib/utils.d.ts.map +1 -0
  123. package/dist/main.d.ts +2 -1
  124. package/dist/main.d.ts.map +1 -0
  125. package/dist/service/cacheEntity_.d.ts +1 -0
  126. package/dist/service/cacheEntity_.d.ts.map +1 -0
  127. package/dist/service/cacheQuery_.d.ts +1 -0
  128. package/dist/service/cacheQuery_.d.ts.map +1 -0
  129. package/dist/service/columnsCache_.d.ts +2 -1
  130. package/dist/service/columnsCache_.d.ts.map +1 -0
  131. package/dist/service/columns_.d.ts +2 -1
  132. package/dist/service/columns_.d.ts.map +1 -0
  133. package/dist/service/database.d.ts +2 -1
  134. package/dist/service/database.d.ts.map +1 -0
  135. package/dist/service/databaseAsyncLocalStorage_.d.ts +1 -0
  136. package/dist/service/databaseAsyncLocalStorage_.d.ts.map +1 -0
  137. package/dist/service/databaseClient_.d.ts +2 -1
  138. package/dist/service/databaseClient_.d.ts.map +1 -0
  139. package/dist/service/db_.d.ts +2 -1
  140. package/dist/service/db_.d.ts.map +1 -0
  141. package/dist/service/entityResolver_.d.ts +1 -0
  142. package/dist/service/entityResolver_.d.ts.map +1 -0
  143. package/dist/service/modelResolver_.d.ts +1 -0
  144. package/dist/service/modelResolver_.d.ts.map +1 -0
  145. package/dist/service/relations_.d.ts +2 -1
  146. package/dist/service/relations_.d.ts.map +1 -0
  147. package/dist/service/transactionAsyncLocalStorage_.d.ts +1 -0
  148. package/dist/service/transactionAsyncLocalStorage_.d.ts.map +1 -0
  149. package/dist/service/transactionConsistency/342/200/214_.d.ts +1 -0
  150. package/dist/service/transactionConsistency/342/200/214_.d.ts.map +1 -0
  151. package/dist/service/transactionFiber_.d.ts +1 -0
  152. package/dist/service/transactionFiber_.d.ts.map +1 -0
  153. package/dist/service/transactionState_.d.ts +2 -1
  154. package/dist/service/transactionState_.d.ts.map +1 -0
  155. package/dist/service/transaction_.d.ts +2 -1
  156. package/dist/service/transaction_.d.ts.map +1 -0
  157. package/dist/types/columns.d.ts +1 -0
  158. package/dist/types/columns.d.ts.map +1 -0
  159. package/dist/types/config.d.ts +1 -0
  160. package/dist/types/config.d.ts.map +1 -0
  161. package/dist/types/database.d.ts +1 -0
  162. package/dist/types/database.d.ts.map +1 -0
  163. package/dist/types/depth.d.ts +1 -0
  164. package/dist/types/depth.d.ts.map +1 -0
  165. package/dist/types/dialect.d.ts +1 -0
  166. package/dist/types/dialect.d.ts.map +1 -0
  167. package/dist/types/dto/dtoAggregate.d.ts +1 -0
  168. package/dist/types/dto/dtoAggregate.d.ts.map +1 -0
  169. package/dist/types/dto/dtoGet.d.ts +3 -2
  170. package/dist/types/dto/dtoGet.d.ts.map +1 -0
  171. package/dist/types/dto/dtoGroup.d.ts +1 -0
  172. package/dist/types/dto/dtoGroup.d.ts.map +1 -0
  173. package/dist/types/dto/dtoListAndCount.d.ts +8 -0
  174. package/dist/types/dto/dtoListAndCount.d.ts.map +1 -0
  175. package/dist/types/dto/dtoMutate.d.ts +8 -9
  176. package/dist/types/dto/dtoMutate.d.ts.map +1 -0
  177. package/dist/types/dto/dtoQueryBase.d.ts +1 -0
  178. package/dist/types/dto/dtoQueryBase.d.ts.map +1 -0
  179. package/dist/types/dto/dtoQueryPageBase.d.ts +1 -0
  180. package/dist/types/dto/dtoQueryPageBase.d.ts.map +1 -0
  181. package/dist/types/dto/dtoSelectAndCount.d.ts +2 -1
  182. package/dist/types/dto/dtoSelectAndCount.d.ts.map +1 -0
  183. package/dist/types/dto/index.d.ts +2 -0
  184. package/dist/types/dto/index.d.ts.map +1 -0
  185. package/dist/types/entity.d.ts +1 -0
  186. package/dist/types/entity.d.ts.map +1 -0
  187. package/dist/types/entityBase.d.ts +1 -0
  188. package/dist/types/entityBase.d.ts.map +1 -0
  189. package/dist/types/entityBaseEmpty.d.ts +1 -0
  190. package/dist/types/entityBaseEmpty.d.ts.map +1 -0
  191. package/dist/types/entityBaseInner.d.ts +1 -0
  192. package/dist/types/entityBaseInner.d.ts.map +1 -0
  193. package/dist/types/entityBaseSimple.d.ts +1 -0
  194. package/dist/types/entityBaseSimple.d.ts.map +1 -0
  195. package/dist/types/extra.d.ts +1 -0
  196. package/dist/types/extra.d.ts.map +1 -0
  197. package/dist/types/index.d.ts +2 -0
  198. package/dist/types/index.d.ts.map +1 -0
  199. package/dist/types/logger.d.ts +1 -0
  200. package/dist/types/logger.d.ts.map +1 -0
  201. package/dist/types/model.d.ts +3 -2
  202. package/dist/types/model.d.ts.map +1 -0
  203. package/dist/types/modelAggr.d.ts +2 -1
  204. package/dist/types/modelAggr.d.ts.map +1 -0
  205. package/dist/types/modelCount.d.ts +2 -1
  206. package/dist/types/modelCount.d.ts.map +1 -0
  207. package/dist/types/modelGeneral.d.ts +4 -3
  208. package/dist/types/modelGeneral.d.ts.map +1 -0
  209. package/dist/types/modelGroup.d.ts +2 -1
  210. package/dist/types/modelGroup.d.ts.map +1 -0
  211. package/dist/types/modelIncrement.d.ts +19 -0
  212. package/dist/types/modelIncrement.d.ts.map +1 -0
  213. package/dist/types/modelWhere.d.ts +2 -1
  214. package/dist/types/modelWhere.d.ts.map +1 -0
  215. package/dist/types/onion/databaseDialect.d.ts +1 -0
  216. package/dist/types/onion/databaseDialect.d.ts.map +1 -0
  217. package/dist/types/onion/entity.d.ts +1 -0
  218. package/dist/types/onion/entity.d.ts.map +1 -0
  219. package/dist/types/onion/index.d.ts +1 -0
  220. package/dist/types/onion/index.d.ts.map +1 -0
  221. package/dist/types/onion/model.d.ts +1 -0
  222. package/dist/types/onion/model.d.ts.map +1 -0
  223. package/dist/types/onion/table.d.ts +1 -0
  224. package/dist/types/onion/table.d.ts.map +1 -0
  225. package/dist/types/relations.d.ts +10 -11
  226. package/dist/types/relations.d.ts.map +1 -0
  227. package/dist/types/relationsAggr.d.ts +2 -1
  228. package/dist/types/relationsAggr.d.ts.map +1 -0
  229. package/dist/types/relationsColumns.d.ts +5 -4
  230. package/dist/types/relationsColumns.d.ts.map +1 -0
  231. package/dist/types/relationsDef.d.ts +5 -4
  232. package/dist/types/relationsDef.d.ts.map +1 -0
  233. package/dist/types/relationsDefDynamic.d.ts +6 -5
  234. package/dist/types/relationsDefDynamic.d.ts.map +1 -0
  235. package/dist/types/relationsDefMutate.d.ts +1 -0
  236. package/dist/types/relationsDefMutate.d.ts.map +1 -0
  237. package/dist/types/relationsGroup.d.ts +1 -0
  238. package/dist/types/relationsGroup.d.ts.map +1 -0
  239. package/dist/types/relationsMutate.d.ts +4 -3
  240. package/dist/types/relationsMutate.d.ts.map +1 -0
  241. package/dist/types/relationsTables.d.ts +1 -0
  242. package/dist/types/relationsTables.d.ts.map +1 -0
  243. package/dist/types/transaction.d.ts +1 -0
  244. package/dist/types/transaction.d.ts.map +1 -0
  245. package/dist-cli/entity/metadata/generate.js +1 -1
  246. package/dist-cli/model/metadata/generate.js +4 -2
  247. package/dist-cli/model/metadata/magic.js +2 -2
  248. package/package.json +40 -36
  249. package/src/.metadata/index.ts +348 -0
  250. package/src/.metadata/locales.ts +13 -0
  251. package/src/.metadata/this.ts +2 -0
  252. package/src/bean/aopMethod.transaction.ts +18 -0
  253. package/src/bean/bean.database.ts +57 -0
  254. package/src/bean/bean.databaseDialectBase.ts +149 -0
  255. package/src/bean/bean.model/bean.model_cache.ts +815 -0
  256. package/src/bean/bean.model/bean.model_crud.ts +46 -0
  257. package/src/bean/bean.model/bean.model_crud_inner.ts +281 -0
  258. package/src/bean/bean.model/bean.model_crud_table.ts +59 -0
  259. package/src/bean/bean.model/bean.model_knex.ts +60 -0
  260. package/src/bean/bean.model/bean.model_meta.ts +204 -0
  261. package/src/bean/bean.model/bean.model_utils.ts +275 -0
  262. package/src/bean/bean.model/bean.model_view.ts +129 -0
  263. package/src/bean/bean.model.ts +8 -0
  264. package/src/bean/bean.modelBase.ts +8 -0
  265. package/src/bean/broadcast.columnsClear.ts +24 -0
  266. package/src/bean/event.clientNameReal.ts +10 -0
  267. package/src/bean/event.columnsClear.ts +13 -0
  268. package/src/bean/hmr.entity.ts +12 -0
  269. package/src/bean/hmr.model.ts +16 -0
  270. package/src/bean/queue.doubleDelete.ts +29 -0
  271. package/src/bean/schedule.softDeletionPrune.ts +45 -0
  272. package/src/common/buildWhere.ts +238 -0
  273. package/src/common/checkWhere.ts +128 -0
  274. package/src/common/index.ts +3 -0
  275. package/src/common/utils.ts +74 -0
  276. package/src/config/config.ts +60 -0
  277. package/src/config/errors.ts +3 -0
  278. package/src/config/locale/en-us.ts +8 -0
  279. package/src/config/locale/zh-cn.ts +8 -0
  280. package/src/extend/index.ts +12 -0
  281. package/src/extend/schemaBuilder.ts +29 -0
  282. package/src/extend/tableBuilder.ts +87 -0
  283. package/src/index.ts +10 -0
  284. package/src/lib/const.ts +58 -0
  285. package/src/lib/databaseDialect.ts +7 -0
  286. package/src/lib/dto/dto.ts +21 -0
  287. package/src/lib/dto/dtoAggregate.ts +51 -0
  288. package/src/lib/dto/dtoCreate.ts +14 -0
  289. package/src/lib/dto/dtoGet.ts +159 -0
  290. package/src/lib/dto/dtoGroup.ts +57 -0
  291. package/src/lib/dto/dtoListAndCount.ts +16 -0
  292. package/src/lib/dto/dtoMutate.ts +82 -0
  293. package/src/lib/dto/dtoQuery.ts +9 -0
  294. package/src/lib/dto/dtoQueryPage.ts +9 -0
  295. package/src/lib/dto/dtoSelectAndCount.ts +20 -0
  296. package/src/lib/dto/dtoUpdate.ts +16 -0
  297. package/src/lib/dto/index.ts +1 -0
  298. package/src/lib/entity.ts +25 -0
  299. package/src/lib/index.ts +9 -0
  300. package/src/lib/model.ts +7 -0
  301. package/src/lib/modelCacheBase.ts +98 -0
  302. package/src/lib/relations.ts +118 -0
  303. package/src/lib/relationsDynamic.ts +75 -0
  304. package/src/lib/relationsMutate.ts +60 -0
  305. package/src/lib/relationsStatic.ts +18 -0
  306. package/src/lib/utils.ts +45 -0
  307. package/src/main.ts +79 -0
  308. package/src/service/cacheEntity_.ts +37 -0
  309. package/src/service/cacheQuery_.ts +20 -0
  310. package/src/service/columnsCache_.ts +69 -0
  311. package/src/service/columns_.ts +64 -0
  312. package/src/service/database.ts +126 -0
  313. package/src/service/databaseAsyncLocalStorage_.ts +29 -0
  314. package/src/service/databaseClient_.ts +124 -0
  315. package/src/service/db_.ts +77 -0
  316. package/src/service/entityResolver_.ts +25 -0
  317. package/src/service/modelResolver_.ts +19 -0
  318. package/src/service/relations_.ts +444 -0
  319. package/src/service/transactionAsyncLocalStorage_.ts +31 -0
  320. package/src/service/transactionConsistency/342/200/214_.ts +37 -0
  321. package/src/service/transactionFiber_.ts +42 -0
  322. package/src/service/transactionState_.ts +35 -0
  323. package/src/service/transaction_.ts +147 -0
  324. package/src/types/columns.ts +8 -0
  325. package/src/types/config.ts +23 -0
  326. package/src/types/database.ts +64 -0
  327. package/src/types/depth.ts +55 -0
  328. package/src/types/dialect.ts +17 -0
  329. package/src/types/dto/dtoAggregate.ts +3 -0
  330. package/src/types/dto/dtoGet.ts +23 -0
  331. package/src/types/dto/dtoGroup.ts +3 -0
  332. package/src/types/dto/dtoListAndCount.ts +7 -0
  333. package/src/types/dto/dtoMutate.ts +231 -0
  334. package/src/types/dto/dtoQueryBase.ts +18 -0
  335. package/src/types/dto/dtoQueryPageBase.ts +18 -0
  336. package/src/types/dto/dtoSelectAndCount.ts +11 -0
  337. package/src/types/dto/index.ts +8 -0
  338. package/src/types/entity.ts +15 -0
  339. package/src/types/entityBase.ts +11 -0
  340. package/src/types/entityBaseEmpty.ts +1 -0
  341. package/src/types/entityBaseInner.ts +18 -0
  342. package/src/types/entityBaseSimple.ts +9 -0
  343. package/src/types/extra.ts +23 -0
  344. package/src/types/index.ts +30 -0
  345. package/src/types/logger.ts +6 -0
  346. package/src/types/model.ts +152 -0
  347. package/src/types/modelAggr.ts +69 -0
  348. package/src/types/modelCount.ts +40 -0
  349. package/src/types/modelGeneral.ts +61 -0
  350. package/src/types/modelGroup.ts +48 -0
  351. package/src/types/modelIncrement.ts +50 -0
  352. package/src/types/modelWhere.ts +85 -0
  353. package/src/types/onion/databaseDialect.ts +22 -0
  354. package/src/types/onion/entity.ts +33 -0
  355. package/src/types/onion/index.ts +4 -0
  356. package/src/types/onion/model.ts +68 -0
  357. package/src/types/onion/table.ts +1 -0
  358. package/src/types/relations.ts +243 -0
  359. package/src/types/relationsAggr.ts +31 -0
  360. package/src/types/relationsColumns.ts +116 -0
  361. package/src/types/relationsDef.ts +152 -0
  362. package/src/types/relationsDefDynamic.ts +128 -0
  363. package/src/types/relationsDefMutate.ts +11 -0
  364. package/src/types/relationsGroup.ts +58 -0
  365. package/src/types/relationsMutate.ts +118 -0
  366. package/src/types/relationsTables.ts +38 -0
  367. package/src/types/transaction.ts +23 -0
@@ -0,0 +1,46 @@
1
+ import type { TableIdentity } from 'table-identity';
2
+
3
+ import type {
4
+ IModelCountParams,
5
+ IModelGetOptionsGeneral,
6
+ IModelMethodOptionsGeneral,
7
+ IModelSelectParams,
8
+ IModelUpdateOptionsGeneral,
9
+ TypeModelWhere,
10
+ } from '../../types/index.ts';
11
+
12
+ import { BeanModelCrudInner } from './bean.model_crud_inner.ts';
13
+
14
+ export class BeanModelCrud<TRecord extends {} = {}> extends BeanModelCrudInner<TRecord> {
15
+ async mget(ids: TableIdentity[], options?: IModelGetOptionsGeneral<TRecord>): Promise<Partial<TRecord>[]> {
16
+ return await this._mget(undefined, ids, options);
17
+ }
18
+
19
+ async select(params?: IModelSelectParams<TRecord>, options?: IModelMethodOptionsGeneral): Promise<Partial<TRecord>[]> {
20
+ return await this._select(undefined, params, options);
21
+ }
22
+
23
+ async get(where: TypeModelWhere<TRecord>, options?: IModelGetOptionsGeneral<TRecord>): Promise<Partial<TRecord> | undefined> {
24
+ return await this._get(undefined, where, options);
25
+ }
26
+
27
+ async count(params?: IModelCountParams<TRecord>, options?: IModelMethodOptionsGeneral): Promise<string | undefined> {
28
+ return await this._count(undefined, params, options);
29
+ }
30
+
31
+ async insert(data?: Partial<TRecord>, options?: IModelMethodOptionsGeneral): Promise<TRecord> {
32
+ return (await this._insertBulk(undefined, data, options)) as Promise<TRecord>;
33
+ }
34
+
35
+ async insertBulk(data: Partial<TRecord>[], options?: IModelMethodOptionsGeneral): Promise<TRecord[]> {
36
+ return (await this._insertBulk(undefined, data, options)) as Promise<TRecord[]>;
37
+ }
38
+
39
+ async update(data: Partial<TRecord>, options?: IModelUpdateOptionsGeneral<TRecord>): Promise<Partial<TRecord>> {
40
+ return await this._update(undefined, data, options);
41
+ }
42
+
43
+ async delete(where?: TypeModelWhere<TRecord>, options?: IModelMethodOptionsGeneral): Promise<void> {
44
+ return await this._delete(undefined, where, options);
45
+ }
46
+ }
@@ -0,0 +1,281 @@
1
+ import type { Knex } from 'knex';
2
+ import type { TableIdentity } from 'table-identity';
3
+
4
+ import { isNil } from '@cabloy/utils';
5
+ import { cast } from 'vona';
6
+
7
+ import type {
8
+ IModelCountParams,
9
+ IModelGetOptionsGeneral,
10
+ IModelIncrementParams,
11
+ IModelMethodOptionsGeneral,
12
+ IModelSelectGeneralParams,
13
+ IModelSelectParams,
14
+ IModelUpdateOptionsGeneral,
15
+ ITableRecord,
16
+ TypeModelWhere,
17
+ } from '../../types/index.ts';
18
+
19
+ import { BeanModelView } from './bean.model_view.ts';
20
+
21
+ export class BeanModelCrudInner<TRecord extends {}> extends BeanModelView<TRecord> {
22
+ protected async _mget(table?: keyof ITableRecord, ids?: TableIdentity[], options?: IModelGetOptionsGeneral<TRecord>): Promise<TRecord[]> {
23
+ const items = await this._mget_original(table, ids, options);
24
+ return items.filter(item => !isNil(item));
25
+ }
26
+
27
+ // with undefined
28
+ protected async _mget_original(
29
+ table?: keyof ITableRecord,
30
+ ids?: TableIdentity[],
31
+ options?: IModelGetOptionsGeneral<TRecord>,
32
+ ): Promise<(TRecord | undefined)[]> {
33
+ // table
34
+ table = table || this.getTable(undefined);
35
+ if (!table) return this.scopeOrm.error.ShouldSpecifyTable.throw();
36
+ // ids maybe empty
37
+ if (!ids || ids.length === 0) return [];
38
+ // params
39
+ const params: IModelSelectParams<TRecord> = {
40
+ where: {
41
+ id: ids,
42
+ } as any,
43
+ };
44
+ if (options?.columns) {
45
+ params.columns = options?.columns as any;
46
+ }
47
+ // select
48
+ const options2 = options?.columns ? Object.assign({}, options, { columns: undefined }) : options;
49
+ const items = await this._select(table, params, options2);
50
+ // sort
51
+ const result: (TRecord | undefined)[] = [];
52
+ for (const id of ids) {
53
+ // item maybe undefined
54
+ const item = items.find(item => cast(item).id === id);
55
+ result.push(item);
56
+ }
57
+ return result;
58
+ }
59
+
60
+ protected async _select<T extends IModelSelectParams<TRecord>>(
61
+ table?: keyof ITableRecord,
62
+ params?: T,
63
+ options?: IModelMethodOptionsGeneral,
64
+ builder?: Knex.QueryBuilder<TRecord, TRecord[]>,
65
+ ): Promise<TRecord[]> {
66
+ // table
67
+ table = table || this.getTable(params?.where);
68
+ if (!table) return this.scopeOrm.error.ShouldSpecifyTable.throw();
69
+ // builder
70
+ builder = builder ?? this._select_buildParams(table, params as any, options);
71
+ // ready
72
+ this.$loggerChild('model').debug(() => `model.select: ${builder.toQuery()}`);
73
+ // datas
74
+ const datas = await builder;
75
+ return (await this.dialect.select(builder, datas, () => this.columns(table))) as TRecord[];
76
+ }
77
+
78
+ protected _select_buildParams<T extends IModelSelectGeneralParams<TRecord>>(
79
+ table: keyof ITableRecord,
80
+ params?: T,
81
+ options?: IModelMethodOptionsGeneral,
82
+ ) {
83
+ // builder
84
+ const builder = this.builder<TRecord, TRecord>(table);
85
+ // groups
86
+ const groups = this.buildGroups(builder, params?.groups);
87
+ // columns
88
+ this.buildColumns(builder, params?.columns, groups);
89
+ // distinct
90
+ this.buildDistinct(builder, params?.distinct);
91
+ // aggregate
92
+ this.buildAggrs(builder, params?.aggrs);
93
+ // joins
94
+ this.buildJoins(builder, params?.joins);
95
+ // where
96
+ this.prepareWhere(builder, table, params?.where, options);
97
+ // having
98
+ this.prepareHaving(builder, params?.having as any);
99
+ // orders
100
+ this.buildOrders(builder, params?.orders);
101
+ // limit
102
+ this.buildLimit(builder, params?.limit);
103
+ // offset
104
+ this.buildOffset(builder, params?.offset);
105
+ // ok
106
+ return builder;
107
+ }
108
+
109
+ protected async _get(
110
+ table: keyof ITableRecord | undefined,
111
+ where: TypeModelWhere<TRecord>,
112
+ options?: IModelGetOptionsGeneral<TRecord>,
113
+ ): Promise<TRecord | undefined> {
114
+ // table
115
+ table = table || this.getTable(where);
116
+ if (!table) return this.scopeOrm.error.ShouldSpecifyTable.throw();
117
+ // params
118
+ const params: IModelSelectParams<TRecord> = { where, limit: 1 };
119
+ if (options?.columns) {
120
+ params.columns = options?.columns as any;
121
+ }
122
+ // select
123
+ const items = await this._select(table, params, options);
124
+ const item = items[0];
125
+ if (!item) return undefined;
126
+ return item as unknown as TRecord;
127
+ }
128
+
129
+ protected async _count(
130
+ table?: keyof ITableRecord,
131
+ params?: IModelCountParams<TRecord>,
132
+ options?: IModelMethodOptionsGeneral,
133
+ ): Promise<string | undefined> {
134
+ // table
135
+ table = table || this.getTable(params?.where);
136
+ if (!table) return this.scopeOrm.error.ShouldSpecifyTable.throw();
137
+ // params
138
+ params = params || {};
139
+ // builder
140
+ const builder = this.builder<TRecord>(table);
141
+ // count
142
+ this.buildCount(builder, params.column, params.distinct);
143
+ // joins
144
+ this.buildJoins(builder, params.joins);
145
+ // where
146
+ this.prepareWhere(builder, table, params.where, options);
147
+ // ready
148
+ this.$loggerChild('model').debug(() => `model.count: ${builder.toQuery()}`);
149
+ const res = await builder;
150
+ return this.extractFirstNumber(res);
151
+ }
152
+
153
+ protected async _increment(
154
+ table?: keyof ITableRecord,
155
+ params?: IModelIncrementParams<TRecord>,
156
+ options?: IModelMethodOptionsGeneral,
157
+ ): Promise<number> {
158
+ // table
159
+ table = table || this.getTable(params?.where);
160
+ if (!table) return this.scopeOrm.error.ShouldSpecifyTable.throw();
161
+ // params
162
+ params = params || ({} as unknown as IModelIncrementParams<TRecord>);
163
+ // builder
164
+ const builder = this.builder<TRecord>(table);
165
+ // count
166
+ this.buildIncrement(builder, params.columns);
167
+ // joins
168
+ this.buildJoins(builder, params.joins);
169
+ // where
170
+ this.prepareWhere(builder, table, params.where, options);
171
+ // ready
172
+ this.$loggerChild('model').debug(() => `model.increment: ${builder.toQuery()}`);
173
+ const res = await builder;
174
+ return res as unknown as number;
175
+ }
176
+
177
+ protected async _insertBulk(
178
+ table?: keyof ITableRecord,
179
+ data?: Partial<TRecord> | Partial<TRecord>[],
180
+ options?: IModelMethodOptionsGeneral,
181
+ ): Promise<TRecord | TRecord[]> {
182
+ // data
183
+ data = data || ({} as any);
184
+ const datasTemp = Array.isArray(data) ? data : [data];
185
+ // table
186
+ table = table || this.getTable(datasTemp[0]);
187
+ if (!table) return this.scopeOrm.error.ShouldSpecifyTable.throw();
188
+ // options
189
+ const datas: any[] = [];
190
+ const datasOriginal: any[] = [];
191
+ for (const dataTemp of datasTemp) {
192
+ // first
193
+ const dataTemp2 = this._prepareInsertDataByOptions(table, dataTemp, options);
194
+ // then
195
+ const [dataNew, dataNewOriginal] = await this.prepareData(table, dataTemp2);
196
+ if (isNil(cast(dataNewOriginal).id) && Object.prototype.hasOwnProperty.call(dataNewOriginal, 'id')) {
197
+ delete cast(dataNewOriginal).id;
198
+ }
199
+ datas.push(dataNew);
200
+ datasOriginal.push(dataNewOriginal);
201
+ }
202
+ // builder
203
+ const builder = this.builder<TRecord>(table);
204
+ // // debug
205
+ // this.$loggerChild('model').debug(() => `model.insert: ${builder.toQuery()}`);
206
+ // dialect insert
207
+ const ids = await this.dialect.insert(builder, datas);
208
+ // combine
209
+ const result: any[] = [];
210
+ const dataDefault = await this.defaultData(table);
211
+ for (let index = 0; index < ids.length; index++) {
212
+ const dataWithId: any = {};
213
+ if (ids[index] !== undefined) dataWithId.id = ids[index];
214
+ // datasOriginal[index] maybe has id
215
+ result.push(Object.assign({}, dataDefault, dataWithId, datasOriginal[index]));
216
+ }
217
+ // ok
218
+ return Array.isArray(data) ? result : result[0];
219
+ }
220
+
221
+ protected async _update(
222
+ table: keyof ITableRecord | undefined,
223
+ data: Partial<TRecord>,
224
+ options?: IModelUpdateOptionsGeneral<TRecord>,
225
+ ): Promise<Partial<TRecord>> {
226
+ // table
227
+ table = table || this.getTable(data);
228
+ if (!table) return this.scopeOrm.error.ShouldSpecifyTable.throw();
229
+ // data
230
+ [data] = await this.prepareData(table, data);
231
+ // where
232
+ const where = Object.assign({}, options?.where);
233
+ // id
234
+ const columnId = `${table}.id`;
235
+ for (const key of ['id', columnId]) {
236
+ if (!isNil(data[key])) {
237
+ cast(where).id = data[key];
238
+ delete data[key];
239
+ }
240
+ }
241
+ // disableUpdateTime
242
+ if (!this._checkDisableUpdateTimeByOptions(options)) {
243
+ cast(data).updatedAt = new Date();
244
+ }
245
+ // builder
246
+ const builder = this.builder<TRecord>(table);
247
+ // update
248
+ builder.update(data as any);
249
+ // where
250
+ this.prepareWhere(builder, table, where, options);
251
+ // debug
252
+ this.$loggerChild('model').debug(() => `model.update: ${builder.toQuery()}`);
253
+ // ready
254
+ await builder;
255
+ // ok
256
+ return data;
257
+ }
258
+
259
+ protected async _delete(table?: keyof ITableRecord, where?: TypeModelWhere<TRecord>, options?: IModelMethodOptionsGeneral): Promise<void> {
260
+ // table
261
+ table = table || this.getTable(where);
262
+ if (!table) return this.scopeOrm.error.ShouldSpecifyTable.throw();
263
+ // disableDeleted
264
+ if (!this._checkDisableDeletedByOptions(options)) {
265
+ // need not set options2: disableDeleted: true, deleted: undefined
266
+ const options2 = Object.assign({}, options, { where });
267
+ await this._update(table, { deleted: true } as any, options2);
268
+ return;
269
+ }
270
+ // builder
271
+ const builder = this.builder<TRecord>(table);
272
+ // delete
273
+ builder.delete();
274
+ // where
275
+ this.prepareWhere(builder, table, where, options);
276
+ // debug
277
+ this.$loggerChild('model').debug(() => `model.delete: ${builder.toQuery()}`);
278
+ // ready
279
+ await builder;
280
+ }
281
+ }
@@ -0,0 +1,59 @@
1
+ import type { TableIdentity } from 'table-identity';
2
+
3
+ import type {
4
+ IModelCountParams,
5
+ IModelGetOptionsGeneral,
6
+ IModelMethodOptionsGeneral,
7
+ IModelSelectParams,
8
+ IModelUpdateOptionsGeneral,
9
+ ITableRecord,
10
+ TypeModelWhere,
11
+ } from '../../types/index.ts';
12
+
13
+ import { BeanModelCrudInner } from './bean.model_crud_inner.ts';
14
+
15
+ export class BeanModelCrudTable<TRecord extends {}> extends BeanModelCrudInner<TRecord> {
16
+ async mget(
17
+ table: keyof ITableRecord,
18
+ ids: TableIdentity[],
19
+ options?: Omit<IModelGetOptionsGeneral<TRecord>, 'include' | 'with'>,
20
+ ): Promise<TRecord[]> {
21
+ return await this._mget(table, ids, options);
22
+ }
23
+
24
+ async select(
25
+ table: keyof ITableRecord,
26
+ params?: Omit<IModelSelectParams<TRecord>, 'include' | 'with'>,
27
+ options?: IModelMethodOptionsGeneral,
28
+ ): Promise<TRecord[]> {
29
+ return await this._select(table, params, options);
30
+ }
31
+
32
+ async get(
33
+ table: keyof ITableRecord,
34
+ where: TypeModelWhere<TRecord>,
35
+ options?: Omit<IModelGetOptionsGeneral<TRecord>, 'include' | 'with'>,
36
+ ): Promise<TRecord | undefined> {
37
+ return await this._get(table, where, options);
38
+ }
39
+
40
+ async count(table: keyof ITableRecord, params?: IModelCountParams<TRecord>, options?: IModelMethodOptionsGeneral): Promise<string | undefined> {
41
+ return await this._count(table, params, options);
42
+ }
43
+
44
+ async insert(table: keyof ITableRecord, data?: Partial<TRecord>, options?: IModelMethodOptionsGeneral): Promise<TRecord> {
45
+ return (await this._insertBulk(table, data, options)) as Promise<TRecord>;
46
+ }
47
+
48
+ async insertBulk(table: keyof ITableRecord, data: Partial<TRecord>[], options?: IModelMethodOptionsGeneral): Promise<TRecord[]> {
49
+ return (await this._insertBulk(table, data, options)) as Promise<TRecord[]>;
50
+ }
51
+
52
+ async update(table: keyof ITableRecord, data: Partial<TRecord>, options?: IModelUpdateOptionsGeneral<TRecord>): Promise<Partial<TRecord>> {
53
+ return await this._update(table, data, options);
54
+ }
55
+
56
+ async delete(table: keyof ITableRecord, where?: TypeModelWhere<TRecord>, options?: IModelMethodOptionsGeneral): Promise<void> {
57
+ return await this._delete(table, where, options);
58
+ }
59
+ }
@@ -0,0 +1,60 @@
1
+ import type { Knex } from 'knex';
2
+
3
+ import type { IModelMethodOptionsGeneral, ITableRecord } from '../../types/index.ts';
4
+
5
+ import { BeanModelUtils } from './bean.model_utils.ts';
6
+
7
+ export class BeanModelKnex<TRecord extends {}> extends BeanModelUtils<TRecord> {
8
+ get schema(): Knex.SchemaBuilder {
9
+ return this.connection.schema;
10
+ }
11
+
12
+ builder<TRecord2 extends {} = TRecord, TResult2 = TRecord2>(table?: Knex.TableDescriptor): Knex.QueryBuilder<TRecord2, TResult2[]> {
13
+ // table
14
+ table = table || this.getTable(undefined);
15
+ if (table) {
16
+ return this.connection(table);
17
+ }
18
+ return this.connection.queryBuilder<TRecord2, TResult2[]>();
19
+ }
20
+
21
+ builderSelect<TRecord2 extends {} = TRecord, TResult2 = TRecord2>(options?: IModelMethodOptionsGeneral): Knex.QueryBuilder<TRecord2, TResult2[]>;
22
+ builderSelect<TRecord2 extends {} = TRecord, TResult2 = TRecord2>(
23
+ table: keyof ITableRecord,
24
+ options?: IModelMethodOptionsGeneral,
25
+ ): Knex.QueryBuilder<TRecord2, TResult2[]>;
26
+ builderSelect<TRecord2 extends {} = TRecord, TResult2 = TRecord2>(table?, options?): Knex.QueryBuilder<TRecord2, TResult2[]> {
27
+ if (typeof table !== 'string') {
28
+ options = table;
29
+ table = undefined;
30
+ }
31
+ // table
32
+ table = table || this.getTable(undefined);
33
+ if (!table) return this.scopeOrm.error.ShouldSpecifyTable.throw();
34
+ // builder
35
+ const builder = this.builder<TRecord2, TResult2>(table);
36
+ // where
37
+ this.prepareWhere(builder, table, {}, options);
38
+ // ready
39
+ return builder;
40
+ }
41
+
42
+ async query(value: Knex.Value): Promise<TRecord[]>;
43
+ async query(sql: string, binding: Knex.RawBinding): Promise<TRecord[]>;
44
+ async query(sql: string, bindings: readonly Knex.RawBinding[] | Knex.ValueDict): Promise<TRecord[]>;
45
+ async query(sql, bindings?): Promise<TRecord[]> {
46
+ const raw = this.connection.raw(sql, bindings);
47
+ const result = await raw;
48
+ // dialect
49
+ return this.dialect.query(result) as unknown as TRecord[];
50
+ }
51
+
52
+ async queryOne(value: Knex.Value): Promise<TRecord | undefined>;
53
+ async queryOne(sql: string, binding: Knex.RawBinding): Promise<TRecord | undefined>;
54
+ async queryOne(sql: string, bindings: readonly Knex.RawBinding[] | Knex.ValueDict): Promise<TRecord | undefined>;
55
+ async queryOne(sql, bindings?): Promise<TRecord | undefined> {
56
+ const res = await this.query(sql, bindings);
57
+ if (!res[0]) return undefined;
58
+ return res[0];
59
+ }
60
+ }
@@ -0,0 +1,204 @@
1
+ import { isNil } from '@cabloy/utils';
2
+ import { appResource, BeanBase, cast } from 'vona';
3
+ import { $tableNameFromEntity } from 'vona-module-a-ormutils';
4
+
5
+ import type { ServiceDb } from '../../service/db_.ts';
6
+ import type {
7
+ IDatabaseClientRecord,
8
+ IDecoratorModelOptions,
9
+ IModelClassRecord,
10
+ IModelMethodOptionsGeneral,
11
+ IModelUpdateOptionsGeneral,
12
+ ITableRecord,
13
+ TypeEntityMeta,
14
+ TypeModelClassLike,
15
+ TypeModelOptionsTable,
16
+ TypeModelRelationOptionsMetaClient,
17
+ } from '../../types/index.ts';
18
+ import type { BeanModel } from '../bean.model.ts';
19
+
20
+ import { getTableOrTableAlias, prepareClassModel } from '../../common/utils.ts';
21
+ import { SymbolKeyEntity, SymbolKeyEntityMeta, SymbolKeyModelOptions } from '../../types/index.ts';
22
+
23
+ const SymbolModelDb = Symbol('SymbolModelDb');
24
+ const SymbolModelTable = Symbol('SymbolModelTable');
25
+
26
+ export class BeanModelMeta<TRecord extends {} = {}> extends BeanBase {
27
+ public [SymbolKeyEntity]: TRecord;
28
+ public [SymbolKeyEntityMeta]: TypeEntityMeta<TRecord>;
29
+ public [SymbolKeyModelOptions]: IDecoratorModelOptions;
30
+
31
+ private [SymbolModelDb]?: ServiceDb;
32
+ private [SymbolModelTable]?: TypeModelOptionsTable;
33
+
34
+ protected __init__(clientName?: keyof IDatabaseClientRecord | ServiceDb, table?: TypeModelOptionsTable) {
35
+ // clientName
36
+ if (!isNil(clientName)) {
37
+ if (typeof clientName === 'string') {
38
+ this[SymbolModelDb] = this.bean.database.getDb(clientName);
39
+ } else {
40
+ this[SymbolModelDb] = clientName;
41
+ }
42
+ }
43
+ // table
44
+ this[SymbolModelTable] = table;
45
+ }
46
+
47
+ protected get self() {
48
+ return cast<BeanModel>(this);
49
+ }
50
+
51
+ protected get connection() {
52
+ return this.db.connection;
53
+ }
54
+
55
+ protected get dialect() {
56
+ return this.db.dialect;
57
+ }
58
+
59
+ public get scopeOrm() {
60
+ return this.$scope.orm;
61
+ }
62
+
63
+ public get modelViewRecord() {
64
+ return this.$scope.version.model.viewRecord;
65
+ }
66
+
67
+ public get db() {
68
+ return this[SymbolModelDb] ?? this._getDb();
69
+ }
70
+
71
+ private _getDb() {
72
+ let clientName = this.options.client;
73
+ // use current
74
+ if (!clientName) return this.bean.database.current;
75
+ // custom clientName
76
+ if (typeof clientName === 'function') {
77
+ clientName = clientName(this.ctx, this);
78
+ }
79
+ // db
80
+ return this.bean.database.getDb(clientName);
81
+ }
82
+
83
+ getTable(where: object | undefined): keyof ITableRecord {
84
+ return this._getTable(where);
85
+ }
86
+
87
+ private _getTable(where: object | undefined) {
88
+ const table = this[SymbolModelTable] ?? this.options.table;
89
+ if (table && typeof table === 'string') return table;
90
+ const defaultTable = this.options.entity && $tableNameFromEntity(this.options.entity);
91
+ if (table && typeof table === 'function') {
92
+ return table(this.ctx, where, defaultTable!, this) as any;
93
+ }
94
+ if (defaultTable) return defaultTable;
95
+ throw new Error(`not found table of ${this.$beanFullName}`);
96
+ }
97
+
98
+ get options(): IDecoratorModelOptions {
99
+ return (this.$beanOptions.options || {}) as IDecoratorModelOptions;
100
+ }
101
+
102
+ get disableInstance() {
103
+ return this.options.disableInstance ?? this.scopeOrm.config.model.disableInstance;
104
+ }
105
+
106
+ get disableDeleted() {
107
+ return this.options.disableDeleted ?? this.scopeOrm.config.model.disableDeleted;
108
+ }
109
+
110
+ get disableCreateTime() {
111
+ return this.options.disableCreateTime ?? this.scopeOrm.config.model.disableCreateTime;
112
+ }
113
+
114
+ get disableUpdateTime() {
115
+ return this.options.disableUpdateTime ?? this.scopeOrm.config.model.disableUpdateTime;
116
+ }
117
+
118
+ protected _prepareDisableInstanceByOptions(table: keyof ITableRecord, data: any, options?: IModelMethodOptionsGeneral, useRaw?: boolean) {
119
+ const columnNameInstance = useRaw ? 'iid' : `${getTableOrTableAlias(table)}.iid`;
120
+ if (this._checkDisableInstanceByOptions(options)) {
121
+ delete data.iid;
122
+ delete data[columnNameInstance];
123
+ } else {
124
+ delete data.iid;
125
+ if (!this.ctx.instance) {
126
+ throw new Error('ctx.instance not exists');
127
+ }
128
+ data[columnNameInstance] = this.ctx.instance.id;
129
+ }
130
+ return data;
131
+ }
132
+
133
+ protected _prepareDisableDeletedByOptions(table: keyof ITableRecord, data: any, options?: IModelMethodOptionsGeneral, useRaw?: boolean) {
134
+ const columnNameDeleted = useRaw ? 'deleted' : `${getTableOrTableAlias(table)}.deleted`;
135
+ const deleted = this._prepareDisableDeletedByOptionsSimple(options);
136
+ if (!isNil(deleted)) {
137
+ delete data.deleted; // force
138
+ data[columnNameDeleted] = deleted;
139
+ }
140
+ return data;
141
+ }
142
+
143
+ protected _prepareDisableDeletedByOptionsSimple(options?: IModelMethodOptionsGeneral): boolean | undefined {
144
+ if (!isNil(options?.deleted)) {
145
+ if (!this.disableDeleted) {
146
+ return options?.deleted;
147
+ }
148
+ } else {
149
+ if (this._checkDisableDeletedByOptions(options)) {
150
+ // do nothing
151
+ } else {
152
+ return false;
153
+ }
154
+ }
155
+ return undefined;
156
+ }
157
+
158
+ protected _checkIfEntityValidByDeleted(entity: any, options?: IModelMethodOptionsGeneral) {
159
+ const deleted = this._prepareDisableDeletedByOptionsSimple(options);
160
+ return isNil(deleted) || Boolean(entity.deleted) === Boolean(deleted);
161
+ }
162
+
163
+ protected _checkDisableInstanceByOptions(_options?: IModelMethodOptionsGeneral) {
164
+ return this.disableInstance;
165
+ }
166
+
167
+ protected _checkDisableDeletedByOptions(options?: IModelMethodOptionsGeneral) {
168
+ if (this.disableDeleted) return true;
169
+ return options?.disableDeleted ?? this.disableDeleted;
170
+ }
171
+
172
+ protected _checkDisableCreateTimeByOptions(options?: IModelUpdateOptionsGeneral<TRecord>) {
173
+ return options?.disableCreateTime ?? this.disableCreateTime;
174
+ }
175
+
176
+ protected _checkDisableUpdateTimeByOptions(options?: IModelUpdateOptionsGeneral<TRecord>) {
177
+ return options?.disableUpdateTime ?? this.disableUpdateTime;
178
+ }
179
+
180
+ public newInstance(client?: keyof IDatabaseClientRecord | ServiceDb, table?: TypeModelOptionsTable): this {
181
+ return this.app.bean._newBean(this.$beanFullName as any, client ?? this.db, table);
182
+ }
183
+
184
+ public newInstanceTarget<MODEL extends BeanModelMeta | keyof IModelClassRecord>(
185
+ modelClassTarget: TypeModelClassLike<MODEL>,
186
+ client?: TypeModelRelationOptionsMetaClient,
187
+ table?: TypeModelOptionsTable,
188
+ ): BeanModelMeta {
189
+ const modelClass2 = prepareClassModel(modelClassTarget);
190
+ const beanOptions = appResource.getBean(modelClass2);
191
+ const beanFullName = beanOptions!.beanFullName;
192
+ const options = beanOptions?.options as IDecoratorModelOptions | undefined;
193
+ // client
194
+ if (isNil(client) || client === '_auto_') {
195
+ client = options?.client ? '_initial_' : '_inherit_';
196
+ }
197
+ if (client === '_initial_') {
198
+ return this.app.bean._newBean(beanFullName as any, undefined, table);
199
+ } else if (client === '_inherit_') {
200
+ client = this.db;
201
+ }
202
+ return this.app.bean._newBean(beanFullName as any, client ?? this.db, table);
203
+ }
204
+ }