mongodb-dynamic-api 1.6.0 → 2.1.0

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 (329) hide show
  1. package/CHANGELOG.md +72 -19
  2. package/README.md +91 -67
  3. package/package.json +13 -1
  4. package/src/builders/casl/casl-ability.builder.d.ts +5 -0
  5. package/src/builders/casl/casl-ability.builder.js +14 -0
  6. package/src/builders/index.d.ts +3 -1
  7. package/src/builders/index.js +3 -1
  8. package/src/builders/route-decorators/auth-decorators.builder.d.ts +7 -0
  9. package/src/builders/route-decorators/auth-decorators.builder.js +14 -0
  10. package/src/builders/route-decorators/route-decorators.builder.d.ts +23 -0
  11. package/src/builders/route-decorators/route-decorators.builder.js +110 -0
  12. package/src/decorators/check-policies.decorator.d.ts +5 -0
  13. package/src/decorators/check-policies.decorator.js +8 -0
  14. package/src/decorators/index.d.ts +2 -0
  15. package/src/decorators/index.js +2 -0
  16. package/src/decorators/public.decorator.d.ts +3 -0
  17. package/src/decorators/public.decorator.js +8 -0
  18. package/src/dtos/delete-many-entity.query.d.ts +3 -0
  19. package/src/dtos/delete-many-entity.query.js +24 -0
  20. package/src/dtos/index.d.ts +1 -0
  21. package/src/dtos/index.js +1 -0
  22. package/src/dynamic-api.module.d.ts +6 -4
  23. package/src/dynamic-api.module.js +145 -69
  24. package/src/guards/base-policies.guard.d.ts +13 -0
  25. package/src/guards/base-policies.guard.js +32 -0
  26. package/src/guards/dynamic-api-jwt-auth.guard.d.ts +11 -0
  27. package/src/guards/dynamic-api-jwt-auth.guard.js +38 -0
  28. package/src/guards/index.d.ts +2 -0
  29. package/src/guards/index.js +18 -0
  30. package/src/helpers/controller-ability-predicates.helper.d.ts +4 -0
  31. package/src/helpers/controller-ability-predicates.helper.js +18 -0
  32. package/src/helpers/format.helper.d.ts +2 -0
  33. package/src/helpers/format.helper.js +12 -0
  34. package/src/helpers/index.d.ts +6 -1
  35. package/src/helpers/index.js +6 -1
  36. package/src/helpers/route-decorators.helper.d.ts +2 -2
  37. package/src/helpers/route-description.helper.d.ts +3 -0
  38. package/src/helpers/route-description.helper.js +34 -0
  39. package/src/helpers/schema.helper.d.ts +28 -0
  40. package/src/helpers/schema.helper.js +30 -0
  41. package/src/helpers/swagger-config.helper.d.ts +4 -0
  42. package/src/helpers/{config.helper.js → swagger-config.helper.js} +37 -21
  43. package/src/helpers/validation-config.helper.d.ts +3 -0
  44. package/src/helpers/validation-config.helper.js +8 -0
  45. package/src/helpers/versioning-config.helper.d.ts +4 -0
  46. package/src/helpers/versioning-config.helper.js +15 -0
  47. package/src/index.d.ts +3 -1
  48. package/src/index.js +3 -1
  49. package/src/interceptors/dynamic-api-cache.interceptor.d.ts +16 -0
  50. package/src/interceptors/dynamic-api-cache.interceptor.js +48 -0
  51. package/src/interceptors/index.d.ts +1 -0
  52. package/src/interceptors/index.js +17 -0
  53. package/src/interfaces/dynamic-api-cache-options.interface.d.ts +9 -0
  54. package/src/interfaces/dynamic-api-casl-ability.interface.d.ts +9 -0
  55. package/src/interfaces/dynamic-api-controller-options.interface.d.ts +12 -0
  56. package/src/interfaces/dynamic-api-decorator-builder.interface.d.ts +5 -0
  57. package/src/interfaces/dynamic-api-global-state.interface.d.ts +16 -0
  58. package/src/interfaces/dynamic-api-options.interface.d.ts +14 -11
  59. package/src/interfaces/dynamic-api-options.interface.js +3 -0
  60. package/src/interfaces/dynamic-api-policy-handler.interface.d.ts +16 -0
  61. package/src/interfaces/dynamic-api-route-config.interface.d.ts +15 -0
  62. package/src/interfaces/dynamic-api-route-dtos-bundle.type.d.ts +8 -0
  63. package/src/interfaces/dynamic-api-route-module.type.d.ts +3 -0
  64. package/src/interfaces/dynamic-api-route-type.type.d.ts +2 -0
  65. package/src/interfaces/dynamic-api-schema-options.interface.d.ts +9 -2
  66. package/src/interfaces/dynamic-api-schema-options.interface.js +14 -0
  67. package/src/interfaces/{service-provider.interface.d.ts → dynamic-api-service-provider.interface.d.ts} +2 -2
  68. package/src/{helpers/config.helper.d.ts → interfaces/dynamic-api-swagger-options.type.d.ts} +23 -15
  69. package/src/interfaces/index.d.ts +13 -4
  70. package/src/interfaces/index.js +13 -4
  71. package/src/mixins/create-policies-guard.mixin.d.ts +5 -0
  72. package/src/mixins/create-policies-guard.mixin.js +37 -0
  73. package/src/mixins/entity-presenter.mixin.d.ts +1 -1
  74. package/src/mixins/entity-presenter.mixin.js +12 -2
  75. package/src/mixins/index.d.ts +1 -0
  76. package/src/mixins/index.js +1 -0
  77. package/src/models/base-entity.model.d.ts +1 -1
  78. package/src/modules/auth/auth.helper.d.ts +10 -0
  79. package/src/modules/auth/auth.helper.js +103 -0
  80. package/src/modules/auth/auth.module.d.ts +12 -0
  81. package/src/modules/auth/auth.module.js +55 -0
  82. package/src/modules/auth/guards/index.d.ts +2 -0
  83. package/src/modules/auth/guards/index.js +18 -0
  84. package/src/modules/auth/guards/jwt-auth.guard.d.ts +4 -0
  85. package/src/modules/auth/guards/jwt-auth.guard.js +17 -0
  86. package/src/modules/auth/guards/local-auth.guard.d.ts +4 -0
  87. package/src/modules/auth/guards/local-auth.guard.js +17 -0
  88. package/src/modules/auth/index.d.ts +7 -0
  89. package/src/modules/auth/index.js +23 -0
  90. package/src/modules/auth/interfaces/auth-controller.interface.d.ts +9 -0
  91. package/src/modules/auth/interfaces/auth-options.interface.d.ts +25 -0
  92. package/src/modules/auth/interfaces/auth-service.interface.d.ts +12 -0
  93. package/src/modules/auth/interfaces/index.d.ts +3 -0
  94. package/src/modules/auth/interfaces/index.js +19 -0
  95. package/src/modules/auth/mixins/auth-controller.mixin.d.ts +5 -0
  96. package/src/modules/auth/mixins/auth-controller.mixin.js +118 -0
  97. package/src/modules/auth/mixins/auth-register-policies-guard.mixin.d.ts +6 -0
  98. package/src/modules/auth/mixins/auth-register-policies-guard.mixin.js +59 -0
  99. package/src/modules/auth/mixins/index.d.ts +2 -0
  100. package/src/modules/auth/mixins/index.js +18 -0
  101. package/src/modules/auth/services/base-auth.service.d.ts +51 -0
  102. package/src/modules/auth/services/base-auth.service.js +64 -0
  103. package/src/modules/auth/services/index.d.ts +1 -0
  104. package/src/modules/auth/services/index.js +17 -0
  105. package/src/modules/auth/strategies/index.d.ts +1 -0
  106. package/src/modules/auth/strategies/index.js +17 -0
  107. package/src/modules/auth/strategies/jwt.strategy.d.ts +8 -0
  108. package/src/modules/auth/strategies/jwt.strategy.js +35 -0
  109. package/src/modules/dynamic-api-config/dynamic-api-config.module.d.ts +5 -0
  110. package/src/modules/dynamic-api-config/dynamic-api-config.module.js +31 -0
  111. package/src/modules/dynamic-api-config/index.d.ts +1 -0
  112. package/src/modules/dynamic-api-config/index.js +17 -0
  113. package/src/modules/index.d.ts +2 -8
  114. package/src/modules/index.js +2 -8
  115. package/src/routes/create-many/create-many-controller.mixin.d.ts +6 -0
  116. package/src/{modules → routes}/create-many/create-many-controller.mixin.js +31 -9
  117. package/src/routes/create-many/create-many.helper.d.ts +7 -0
  118. package/src/{modules → routes}/create-many/create-many.helper.js +14 -11
  119. package/src/routes/create-many/create-many.module.d.ts +6 -0
  120. package/src/{modules → routes}/create-many/create-many.module.js +3 -3
  121. package/src/routes/create-one/create-one-controller.mixin.d.ts +6 -0
  122. package/src/{modules → routes}/create-one/create-one-controller.mixin.js +29 -7
  123. package/src/routes/create-one/create-one.helper.d.ts +7 -0
  124. package/src/{modules → routes}/create-one/create-one.helper.js +14 -11
  125. package/src/routes/create-one/create-one.module.d.ts +6 -0
  126. package/src/{modules → routes}/create-one/create-one.module.js +4 -4
  127. package/src/routes/delete-many/base-delete-many.service.d.ts +34 -0
  128. package/src/routes/delete-many/base-delete-many.service.js +29 -0
  129. package/src/routes/delete-many/delete-many-controller.interface.d.ts +8 -0
  130. package/src/routes/delete-many/delete-many-controller.interface.js +2 -0
  131. package/src/routes/delete-many/delete-many-controller.mixin.d.ts +6 -0
  132. package/src/routes/delete-many/delete-many-controller.mixin.js +77 -0
  133. package/src/routes/delete-many/delete-many-service.interface.d.ts +6 -0
  134. package/src/routes/delete-many/delete-many-service.interface.js +2 -0
  135. package/src/routes/delete-many/delete-many.helper.d.ts +7 -0
  136. package/src/routes/delete-many/delete-many.helper.js +71 -0
  137. package/src/routes/delete-many/delete-many.module.d.ts +6 -0
  138. package/src/routes/delete-many/delete-many.module.js +28 -0
  139. package/src/routes/delete-many/delete-many.presenter.d.ts +3 -0
  140. package/src/routes/delete-many/delete-many.presenter.js +20 -0
  141. package/src/routes/delete-many/index.d.ts +7 -0
  142. package/src/routes/delete-many/index.js +23 -0
  143. package/src/routes/delete-one/delete-one-controller.interface.js +2 -0
  144. package/src/routes/delete-one/delete-one-controller.mixin.d.ts +6 -0
  145. package/src/{modules → routes}/delete-one/delete-one-controller.mixin.js +30 -7
  146. package/src/routes/delete-one/delete-one-service.interface.js +2 -0
  147. package/src/routes/delete-one/delete-one.helper.d.ts +7 -0
  148. package/src/{modules → routes}/delete-one/delete-one.helper.js +14 -11
  149. package/src/routes/delete-one/delete-one.module.d.ts +6 -0
  150. package/src/{modules → routes}/delete-one/delete-one.module.js +4 -4
  151. package/src/routes/duplicate-many/base-duplicate-many.service.d.ts +33 -0
  152. package/src/routes/duplicate-many/base-duplicate-many.service.js +43 -0
  153. package/src/routes/duplicate-many/duplicate-many-controller.interface.d.ts +7 -0
  154. package/src/routes/duplicate-many/duplicate-many-controller.interface.js +2 -0
  155. package/src/routes/duplicate-many/duplicate-many-controller.mixin.d.ts +6 -0
  156. package/src/routes/duplicate-many/duplicate-many-controller.mixin.js +85 -0
  157. package/src/routes/duplicate-many/duplicate-many-service.interface.d.ts +5 -0
  158. package/src/routes/duplicate-many/duplicate-many-service.interface.js +2 -0
  159. package/src/routes/duplicate-many/duplicate-many.helper.d.ts +7 -0
  160. package/src/routes/duplicate-many/duplicate-many.helper.js +71 -0
  161. package/src/routes/duplicate-many/duplicate-many.module.d.ts +6 -0
  162. package/src/routes/duplicate-many/duplicate-many.module.js +28 -0
  163. package/src/routes/duplicate-many/index.d.ts +6 -0
  164. package/src/routes/duplicate-many/index.js +22 -0
  165. package/src/routes/duplicate-one/duplicate-one-controller.interface.js +2 -0
  166. package/src/routes/duplicate-one/duplicate-one-controller.mixin.d.ts +6 -0
  167. package/src/{modules → routes}/duplicate-one/duplicate-one-controller.mixin.js +30 -8
  168. package/src/routes/duplicate-one/duplicate-one-service.interface.js +2 -0
  169. package/src/routes/duplicate-one/duplicate-one.helper.d.ts +7 -0
  170. package/src/{modules → routes}/duplicate-one/duplicate-one.helper.js +14 -11
  171. package/src/routes/duplicate-one/duplicate-one.module.d.ts +6 -0
  172. package/src/{modules → routes}/duplicate-one/duplicate-one.module.js +4 -4
  173. package/src/routes/get-many/get-many-controller.interface.js +2 -0
  174. package/src/routes/get-many/get-many-controller.mixin.d.ts +6 -0
  175. package/src/{modules → routes}/get-many/get-many-controller.mixin.js +29 -7
  176. package/src/routes/get-many/get-many-service.interface.js +2 -0
  177. package/src/routes/get-many/get-many.helper.d.ts +7 -0
  178. package/src/{modules → routes}/get-many/get-many.helper.js +14 -11
  179. package/src/routes/get-many/get-many.module.d.ts +6 -0
  180. package/src/{modules → routes}/get-many/get-many.module.js +4 -4
  181. package/src/routes/get-one/get-one-controller.interface.js +2 -0
  182. package/src/routes/get-one/get-one-controller.mixin.d.ts +6 -0
  183. package/src/{modules → routes}/get-one/get-one-controller.mixin.js +30 -8
  184. package/src/routes/get-one/get-one-service.interface.js +2 -0
  185. package/src/routes/get-one/get-one.helper.d.ts +7 -0
  186. package/src/{modules → routes}/get-one/get-one.helper.js +14 -11
  187. package/src/routes/get-one/get-one.module.d.ts +6 -0
  188. package/src/{modules → routes}/get-one/get-one.module.js +4 -4
  189. package/src/routes/index.d.ts +11 -0
  190. package/src/routes/index.js +27 -0
  191. package/src/routes/replace-one/replace-one-controller.interface.js +2 -0
  192. package/src/routes/replace-one/replace-one-controller.mixin.d.ts +6 -0
  193. package/src/{modules → routes}/replace-one/replace-one-controller.mixin.js +30 -8
  194. package/src/routes/replace-one/replace-one-service.interface.js +2 -0
  195. package/src/routes/replace-one/replace-one.helper.d.ts +7 -0
  196. package/src/{modules → routes}/replace-one/replace-one.helper.js +14 -11
  197. package/src/routes/replace-one/replace-one.module.d.ts +6 -0
  198. package/src/{modules → routes}/replace-one/replace-one.module.js +4 -4
  199. package/src/routes/update-many/base-update-many.service.d.ts +33 -0
  200. package/src/routes/update-many/base-update-many.service.js +32 -0
  201. package/src/routes/update-many/index.d.ts +6 -0
  202. package/src/routes/update-many/index.js +22 -0
  203. package/src/routes/update-many/update-many-controller.interface.d.ts +7 -0
  204. package/src/routes/update-many/update-many-controller.interface.js +2 -0
  205. package/src/routes/update-many/update-many-controller.mixin.d.ts +6 -0
  206. package/src/routes/update-many/update-many-controller.mixin.js +85 -0
  207. package/src/routes/update-many/update-many-service.interface.d.ts +5 -0
  208. package/src/routes/update-many/update-many-service.interface.js +2 -0
  209. package/src/routes/update-many/update-many.helper.d.ts +7 -0
  210. package/src/routes/update-many/update-many.helper.js +71 -0
  211. package/src/routes/update-many/update-many.module.d.ts +6 -0
  212. package/src/routes/update-many/update-many.module.js +28 -0
  213. package/src/routes/update-one/update-one-controller.interface.js +2 -0
  214. package/src/routes/update-one/update-one-controller.mixin.d.ts +6 -0
  215. package/src/{modules → routes}/update-one/update-one-controller.mixin.js +30 -8
  216. package/src/routes/update-one/update-one-service.interface.js +2 -0
  217. package/src/routes/update-one/update-one.helper.d.ts +7 -0
  218. package/src/{modules → routes}/update-one/update-one.helper.js +14 -11
  219. package/src/routes/update-one/update-one.module.d.ts +6 -0
  220. package/src/{modules → routes}/update-one/update-one.module.js +4 -4
  221. package/src/services/{base.service.d.ts → base/base.service.d.ts} +1 -1
  222. package/src/services/{base.service.js → base/base.service.js} +2 -2
  223. package/src/services/bcrypt/bcrypt.service.d.ts +5 -0
  224. package/src/services/bcrypt/bcrypt.service.js +26 -0
  225. package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.d.ts +11 -0
  226. package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js +36 -0
  227. package/src/services/index.d.ts +3 -1
  228. package/src/services/index.js +3 -1
  229. package/src/version.json +1 -1
  230. package/tsconfig.tsbuildinfo +1 -1
  231. package/src/builders/route-decorators.builder.d.ts +0 -18
  232. package/src/builders/route-decorators.builder.js +0 -76
  233. package/src/interfaces/maybe-promise.type.d.ts +0 -2
  234. package/src/interfaces/route-config.interface.d.ts +0 -17
  235. package/src/modules/create-many/create-many-controller.mixin.d.ts +0 -6
  236. package/src/modules/create-many/create-many.helper.d.ts +0 -7
  237. package/src/modules/create-many/create-many.module.d.ts +0 -6
  238. package/src/modules/create-one/create-one-controller.mixin.d.ts +0 -6
  239. package/src/modules/create-one/create-one.helper.d.ts +0 -7
  240. package/src/modules/create-one/create-one.module.d.ts +0 -6
  241. package/src/modules/delete-one/delete-one-controller.mixin.d.ts +0 -6
  242. package/src/modules/delete-one/delete-one.helper.d.ts +0 -7
  243. package/src/modules/delete-one/delete-one.module.d.ts +0 -6
  244. package/src/modules/duplicate-one/duplicate-one-controller.mixin.d.ts +0 -6
  245. package/src/modules/duplicate-one/duplicate-one.helper.d.ts +0 -7
  246. package/src/modules/duplicate-one/duplicate-one.module.d.ts +0 -6
  247. package/src/modules/get-many/get-many-controller.mixin.d.ts +0 -6
  248. package/src/modules/get-many/get-many.helper.d.ts +0 -7
  249. package/src/modules/get-many/get-many.module.d.ts +0 -6
  250. package/src/modules/get-one/get-one-controller.mixin.d.ts +0 -6
  251. package/src/modules/get-one/get-one.helper.d.ts +0 -7
  252. package/src/modules/get-one/get-one.module.d.ts +0 -6
  253. package/src/modules/replace-one/replace-one-controller.mixin.d.ts +0 -6
  254. package/src/modules/replace-one/replace-one.helper.d.ts +0 -7
  255. package/src/modules/replace-one/replace-one.module.d.ts +0 -6
  256. package/src/modules/update-one/update-one-controller.mixin.d.ts +0 -6
  257. package/src/modules/update-one/update-one.helper.d.ts +0 -7
  258. package/src/modules/update-one/update-one.module.d.ts +0 -6
  259. package/src/interfaces/{entity-mappers.interface.js → dynamic-api-cache-options.interface.js} +0 -0
  260. package/src/interfaces/{maybe-promise.type.js → dynamic-api-casl-ability.interface.js} +0 -0
  261. package/src/interfaces/{route-config.interface.js → dynamic-api-controller-options.interface.js} +0 -0
  262. package/src/interfaces/{service-provider.interface.js → dynamic-api-decorator-builder.interface.js} +0 -0
  263. package/src/interfaces/{entity-mappers.interface.d.ts → dynamic-api-entity-mappers.interface.d.ts} +0 -0
  264. package/src/{modules/create-many/create-many-controller.interface.js → interfaces/dynamic-api-entity-mappers.interface.js} +0 -0
  265. package/src/{modules/create-many/create-many-service.interface.js → interfaces/dynamic-api-global-state.interface.js} +0 -0
  266. package/src/{modules/create-one/create-one-controller.interface.js → interfaces/dynamic-api-policy-handler.interface.js} +0 -0
  267. package/src/{modules/create-one/create-one-service.interface.js → interfaces/dynamic-api-route-config.interface.js} +0 -0
  268. package/src/{modules/delete-one/delete-one-controller.interface.js → interfaces/dynamic-api-route-dtos-bundle.type.js} +0 -0
  269. package/src/{modules/delete-one/delete-one-service.interface.js → interfaces/dynamic-api-route-module.type.js} +0 -0
  270. package/src/{modules/duplicate-one/duplicate-one-controller.interface.js → interfaces/dynamic-api-route-type.type.js} +0 -0
  271. package/src/{modules/duplicate-one/duplicate-one-service.interface.js → interfaces/dynamic-api-service-provider.interface.js} +0 -0
  272. package/src/{modules/get-many/get-many-controller.interface.js → interfaces/dynamic-api-swagger-options.type.js} +0 -0
  273. package/src/modules/{get-many/get-many-service.interface.js → auth/interfaces/auth-controller.interface.js} +0 -0
  274. package/src/modules/{get-one/get-one-controller.interface.js → auth/interfaces/auth-options.interface.js} +0 -0
  275. package/src/modules/{get-one/get-one-service.interface.js → auth/interfaces/auth-service.interface.js} +0 -0
  276. package/src/{modules → routes}/create-many/base-create-many.service.d.ts +0 -0
  277. package/src/{modules → routes}/create-many/base-create-many.service.js +0 -0
  278. package/src/{modules → routes}/create-many/create-many-controller.interface.d.ts +0 -0
  279. package/src/{modules/replace-one/replace-one-controller.interface.js → routes/create-many/create-many-controller.interface.js} +0 -0
  280. package/src/{modules → routes}/create-many/create-many-service.interface.d.ts +0 -0
  281. package/src/{modules/replace-one/replace-one-service.interface.js → routes/create-many/create-many-service.interface.js} +0 -0
  282. package/src/{modules → routes}/create-many/index.d.ts +0 -0
  283. package/src/{modules → routes}/create-many/index.js +0 -0
  284. package/src/{modules → routes}/create-one/base-create-one.service.d.ts +0 -0
  285. package/src/{modules → routes}/create-one/base-create-one.service.js +0 -0
  286. package/src/{modules → routes}/create-one/create-one-controller.interface.d.ts +0 -0
  287. package/src/{modules/update-one/update-one-controller.interface.js → routes/create-one/create-one-controller.interface.js} +0 -0
  288. package/src/{modules → routes}/create-one/create-one-service.interface.d.ts +0 -0
  289. package/src/{modules/update-one/update-one-service.interface.js → routes/create-one/create-one-service.interface.js} +0 -0
  290. package/src/{modules → routes}/create-one/index.d.ts +0 -0
  291. package/src/{modules → routes}/create-one/index.js +0 -0
  292. package/src/{modules → routes}/delete-one/base-delete-one.service.d.ts +0 -0
  293. package/src/{modules → routes}/delete-one/base-delete-one.service.js +0 -0
  294. package/src/{modules → routes}/delete-one/delete-one-controller.interface.d.ts +0 -0
  295. package/src/{modules → routes}/delete-one/delete-one-service.interface.d.ts +0 -0
  296. package/src/{modules → routes}/delete-one/delete-one.presenter.d.ts +0 -0
  297. package/src/{modules → routes}/delete-one/delete-one.presenter.js +0 -0
  298. package/src/{modules → routes}/delete-one/index.d.ts +0 -0
  299. package/src/{modules → routes}/delete-one/index.js +0 -0
  300. package/src/{modules → routes}/duplicate-one/base-duplicate-one.service.d.ts +0 -0
  301. package/src/{modules → routes}/duplicate-one/base-duplicate-one.service.js +0 -0
  302. package/src/{modules → routes}/duplicate-one/duplicate-one-controller.interface.d.ts +0 -0
  303. package/src/{modules → routes}/duplicate-one/duplicate-one-service.interface.d.ts +0 -0
  304. package/src/{modules → routes}/duplicate-one/index.d.ts +0 -0
  305. package/src/{modules → routes}/duplicate-one/index.js +0 -0
  306. package/src/{modules → routes}/get-many/base-get-many.service.d.ts +0 -0
  307. package/src/{modules → routes}/get-many/base-get-many.service.js +1 -1
  308. /package/src/{modules → routes}/get-many/get-many-controller.interface.d.ts +0 -0
  309. /package/src/{modules → routes}/get-many/get-many-service.interface.d.ts +0 -0
  310. /package/src/{modules → routes}/get-many/index.d.ts +0 -0
  311. /package/src/{modules → routes}/get-many/index.js +0 -0
  312. /package/src/{modules → routes}/get-one/base-get-one.service.d.ts +0 -0
  313. /package/src/{modules → routes}/get-one/base-get-one.service.js +0 -0
  314. /package/src/{modules → routes}/get-one/get-one-controller.interface.d.ts +0 -0
  315. /package/src/{modules → routes}/get-one/get-one-service.interface.d.ts +0 -0
  316. /package/src/{modules → routes}/get-one/index.d.ts +0 -0
  317. /package/src/{modules → routes}/get-one/index.js +0 -0
  318. /package/src/{modules → routes}/replace-one/base-replace-one.service.d.ts +0 -0
  319. /package/src/{modules → routes}/replace-one/base-replace-one.service.js +0 -0
  320. /package/src/{modules → routes}/replace-one/index.d.ts +0 -0
  321. /package/src/{modules → routes}/replace-one/index.js +0 -0
  322. /package/src/{modules → routes}/replace-one/replace-one-controller.interface.d.ts +0 -0
  323. /package/src/{modules → routes}/replace-one/replace-one-service.interface.d.ts +0 -0
  324. /package/src/{modules → routes}/update-one/base-update-one.service.d.ts +0 -0
  325. /package/src/{modules → routes}/update-one/base-update-one.service.js +0 -0
  326. /package/src/{modules → routes}/update-one/index.d.ts +0 -0
  327. /package/src/{modules → routes}/update-one/index.js +0 -0
  328. /package/src/{modules → routes}/update-one/update-one-controller.interface.d.ts +0 -0
  329. /package/src/{modules → routes}/update-one/update-one-service.interface.d.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -1,43 +1,96 @@
1
1
  Changelog
2
2
 
3
- ## [1.6.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/release...1.6.0) (2024-03-03)
3
+ ## [2.1.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v2.0.0...v2.1.0) (2024-03-20)
4
4
 
5
- ## [1.5.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/release...1.5.0) (2024-03-03)
6
5
 
7
- ## [1.4.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/release...1.4.0) (2024-03-02)
6
+ ### schema
8
7
 
9
- ## [1.3.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/1.3.0-beta.0...1.3.0) (2024-03-02)
8
+ * **schema:** add the possibility to customize initialization ([7fd541b](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/7fd541b055bb0baa60409651a54d42244d8f3042))
10
9
 
11
- ## [1.3.0-beta.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/release...1.3.0-beta.0) (2024-03-02)
10
+ ## [2.0.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.4.3...v2.0.0) (2024-03-18)
12
11
 
13
- ## [1.2.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/1.2.0-beta.8...1.2.0) (2024-03-02)
14
12
 
15
- ## [1.2.0-beta.8](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/release...1.2.0-beta.8) (2024-03-02)
13
+ ### BREAKING CHANGES
16
14
 
17
- ## [1.2.0-beta.7](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.7) (2024-03-02)
15
+ * **schema-options:** bind event type to route type to improve understanding
16
+ * **authentication:** rework options
18
17
 
19
- ## [1.2.0-beta.6](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.6) (2024-03-01)
18
+ ### schema-options
20
19
 
21
- ## [1.2.0-beta.5](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.5) (2024-03-01)
20
+ * **schema-options:** bind event type to route type to improve understanding ([8a6a391](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/8a6a391c19a68697998ed6508d88ed63c1fbde7d))
22
21
 
23
- ## [1.2.0-beta.4](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.4) (2024-02-29)
24
22
 
25
- ## [1.2.0-beta.3](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.3) (2024-02-29)
23
+ ### authentication
26
24
 
27
- ## [1.2.0-beta.2](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.2) (2024-02-29)
25
+ * **authentication:** rework options ([e833898](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/e833898903279e1e1e220b065724e013b1729029))
28
26
 
29
- ## [1.2.0-beta.1](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.1) (2024-02-29)
27
+ ## [1.4.3](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.4.2...v1.4.3) (2024-03-15)
30
28
 
31
- ## [1.2.0-beta.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.0) (2024-02-29)
29
+ ## [1.4.2](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.4.1...v1.4.2) (2024-03-15)
32
30
 
33
- ## [1.1.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/mongodb-dynamic-api-v1.1.0...mongodb-dynamic-api-v1.2.0) (2024-02-28)
31
+ ## [1.4.1](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.4.0...v1.4.1) (2024-03-12)
34
32
 
33
+ ## [1.4.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.3.3...v1.4.0) (2024-03-11)
35
34
 
36
- ### Features
37
35
 
38
- * **routes:** add create-many module ([f6b6a25](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/f6b6a25edfc924ce5e305951db97c353465156e3))
36
+ ### authentication
37
+
38
+ * **authentication:** add register ability predicate ([811b085](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/811b0853ed836ce33a7a56312c3e045b5f73f5ee))
39
+
40
+
41
+ ### api
42
+
43
+ * **api:** add authentication ([a692b7b](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/a692b7b0fcd774dc5152b9f82ed22107c543110a))
44
+ * **api:** add casl ability to control route access ([6202a24](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/6202a247d301a7a72ce47f596a288d66724999f1))
45
+
46
+ ## [1.3.3](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.3.2...v1.3.3) (2024-03-06)
47
+
48
+
49
+ ### api
50
+
51
+ * **api:** display the package version in swagger by default ([36520c3](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/36520c37abdd4fcbbfeed333a68ea0a108533b39))
52
+
53
+ ## [1.3.2](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.3.1...v1.3.2) (2024-03-05)
54
+
55
+ ## [1.3.1](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.3.0...v1.3.1) (2024-03-05)
56
+
57
+ ## [1.3.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.2.1...v1.3.0) (2024-03-04)
58
+
59
+
60
+ ### api
61
+
62
+ * **api:** add delete many route ([43a89cb](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/43a89cb4c087c468743559950fa232ff6e10c140))
63
+ * **api:** add duplicate many route ([be33d1b](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/be33d1b221d81c5ff6649cd2eccc331cb58459b9))
64
+ * **api:** add update many route ([7543eb9](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/7543eb92d7ba538f6d46b69ec194a6c44daff5b2))
65
+
66
+ ## [1.2.1](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.2.0...v1.2.1) (2024-03-04)
67
+
68
+
69
+ ## [1.2.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.1.0...v1.2.0) (2024-03-03)
70
+
71
+
72
+ ### api
73
+
74
+ * **api:** add default route description if not specified ([733b42a](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/733b42a6dab49c39370fdd4094b7f08288e54c5b))
75
+
76
+ ## 1.1.0 (2024-03-03)
77
+
78
+
79
+ ### api
80
+
81
+ * **api:** add the possibility to enable the api uri versioning ([0f52917](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/0f529174ea583078bb136d2db484ef64b6aa6e49))
82
+ * **api:** correct CreateMany response type and body ([804b7d5](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/804b7d55fe2b8b515436b41fa338be75c5e030e2))
83
+ * **api:** make routes optional, add all routes automatically if not configured ([f17e2eb](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/f17e2ebdbbde8f05a5c80c404ffc1febf460bc20))
84
+ * **api:** set duplicate one body optional ([f24b2b9](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/f24b2b964e251fbb92acfc14222386fec3239dcb))
85
+ * **api:** add create-many module ([9ae72d5](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/9ae72d5dd7bda27423f96dd642d41eff31e75370))
86
+
87
+
88
+ ### swagger
89
+
90
+ * **swagger:** add enable method ([5f3f865](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/5f3f8656dc186e833d5c4792efacf9f0a2005afd))
91
+
39
92
 
40
- ## [1.0.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/mongodb-dynamic-api-v1.0.0...mongodb-dynamic-api-v1.1.0) (2024-02-27)
93
+ ## 1.0.0 (2024-02-27)
41
94
 
42
95
 
43
96
  ### Features
package/README.md CHANGED
@@ -47,28 +47,36 @@
47
47
 
48
48
  ---
49
49
 
50
+ ## mongodb-dynamic-api <img src="https://pbs.twimg.com/media/EDoWJbUXYAArclg.png" width="24" height="24" />
51
+ ```text
52
+ npm install --save mongodb-dynamic-api
53
+ ```
54
+
55
+ ---
56
+
50
57
  <div style="text-align: center; width: 100%;">
51
58
 
52
- # mongodb-dynamic-api
59
+ # Dynamic API Module
53
60
 
54
61
  </div>
55
62
 
56
63
 
57
64
  <p style="text-align: justify; width: 100%;font-size: 15px;">
58
65
 
59
- **mongodb-dynamic-api** is an auto generated CRUD API for MongoDB using NestJS 10.
66
+ In summary, DynamicApiModule is a flexible and configurable module using NestJS 10 that provides dynamic API functionality for your contents.
67
+ <br>It must be set up at the root level with global settings and then configured for individual features.
68
+ <br>It has several optional features such as
69
+ [Swagger UI](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/swagger-ui.md),
70
+ [Versioning](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/versioning.md),
71
+ [Validation](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/validation.md),
72
+ [Caching](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/caching.md),
73
+ [Authentication](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authentication.md) and
74
+ [Authorization](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authorization.md).
60
75
 
61
76
  </p>
62
77
 
63
- ---
64
-
65
- ## npm package <img src="https://pbs.twimg.com/media/EDoWJbUXYAArclg.png" width="24" height="24" />
66
- ```text
67
- npm install --save mongodb-dynamic-api
68
- ```
69
-
78
+ ___
70
79
 
71
- ---
72
80
  ### HOW TO ENJOY IT
73
81
 
74
82
  - Start a new [nest](https://docs.nestjs.com/) project with **typescript** (use the `--strict` option)
@@ -76,18 +84,22 @@ npm install --save mongodb-dynamic-api
76
84
  nest new --strict your-project-name
77
85
  ```
78
86
 
79
- - Go to your project root and install the [mongodb-dynamic-api](https://www.npmjs.com/package/mongodb-dynamic-api) package
87
+ - Go to your new project root and install the [mongodb-dynamic-api](https://www.npmjs.com/package/mongodb-dynamic-api) package
80
88
  ```text
81
89
  npm i -S mongodb-dynamic-api
82
90
  ```
91
+ **Basic Configuration**
92
+
93
+ - Add `DynamicApiModule.forRoot` to your `app.module.ts` and pass your **MongoDB connection string** to the method.
83
94
 
84
- - Add DynamicApiModule to your app.module.ts and pass the MongoDB connection string to the `forRoot` method
85
95
  ```typescript
96
+ // src/app.module.ts
97
+ import { DynamicApiModule } from 'mongodb-dynamic-api';
98
+
86
99
  @Module({
87
100
  imports: [
88
- // ...
89
101
  DynamicApiModule.forRoot(
90
- // <- pass the MongoDB connection string here
102
+ 'mongodb-uri', // <- replace by your own MongoDB connection string
91
103
  ),
92
104
  // ...
93
105
  ],
@@ -96,24 +108,46 @@ npm i -S mongodb-dynamic-api
96
108
  })
97
109
  export class AppModule {}
98
110
  ```
111
+ **Basic Usage**
112
+
113
+ - Ok, now let's add our first content with just 2 files. It will be a simple `User` with a `name` and an `email` field.
114
+ - We use the `@Schema` and `@Prop` decorators from the <a href="https://docs.nestjs.com/techniques/mongodb#model-injection" target="_blank">@nestjs/mongoose</a> package to define our MongoDB model.
115
+
116
+ - You must extend the `BaseEntity` | `SoftDeletableEntity` class from the `mongodb-dynamic-api` package for all your **collection models**.
117
+ See more details **[here](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/entities.md)**.
118
+
119
+ - You can also add the `@DynamicAPISchemaOptions` decorator to pass schema options.
120
+ See more details **[here](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/schema-options.md)**.
121
+
122
+ Just create a new file `user.ts` and add the following code.
99
123
 
100
- - Ok, now let's add our first content. This content will be a simple `User` with a `name` and an `email` field.
101
124
  ```typescript
102
- // user.ts
125
+ // src/users/user.ts
126
+ import { Prop, Schema } from '@nestjs/mongoose';
127
+ import { BaseEntity } from 'mongodb-dynamic-api';
128
+
103
129
  @Schema({ collection: 'users' })
104
- export class User extends BaseEntity { // <- you must extend BaseEntity
105
- @Prop({ type: String })
130
+ export class User extends BaseEntity { // <- extends BaseEntity
131
+ @Prop({ type: String, required: true })
106
132
  name: string;
107
133
 
108
- @Prop({ type: String })
134
+ @Prop({ type: String, required: true })
109
135
  email: string;
110
136
  }
111
137
  ```
138
+
139
+ - Then we will use the `DynamicApiModule.forFeature` method to add the `User` API to our application.
140
+ - We pass the `User` class to the `entity` property and specify the path `users` to the `controllerOptions` property.
141
+ - Create a new file `users.module.ts` and add the following code.
142
+
112
143
  ```typescript
113
- // users.module.ts
144
+ // src/users/users.module.ts
145
+ import { DynamicApiModule } from 'mongodb-dynamic-api';
146
+ import { User } from './user';
147
+
114
148
  @Module({
115
149
  imports: [
116
- DynamicApiModule.forFeature({ // <- use the forFeature method to add the User content
150
+ DynamicApiModule.forFeature({
117
151
  entity: User,
118
152
  controllerOptions: {
119
153
  path: 'users',
@@ -123,13 +157,20 @@ export class User extends BaseEntity { // <- you must extend BaseEntity
123
157
  })
124
158
  export class UsersModule {}
125
159
  ```
160
+
161
+ - Last step, add the `UsersModule` to the **imports** in the `app.module.ts` after the `DynamicApiModule.forRoot` method.
162
+
126
163
  ```typescript
127
- // app.module.ts
164
+ // src/app.module.ts
165
+ import { DynamicApiModule } from 'mongodb-dynamic-api';
166
+ import { UsersModule } from './users/users.module';
167
+
128
168
  @Module({
129
169
  imports: [
130
- // ...
131
- DynamicApiModule.forRoot('...'),
132
- UsersModule, // <- add the module to the imports after the DynamicApiModule
170
+ DynamicApiModule.forRoot(
171
+ 'mongodb-uri', // <- replace by your own MongoDB connection string
172
+ ),
173
+ UsersModule,
133
174
  ],
134
175
  controllers: [AppController],
135
176
  providers: [AppService],
@@ -137,54 +178,37 @@ export class UsersModule {}
137
178
  export class AppModule {}
138
179
  ```
139
180
 
140
- **That's all !** *You now have a fully functional CRUD API for the `User` content at the `/users` path.*
181
+ **And that's all !** *You now have a fully functional CRUD API for the `User` content at the `/users` path.*
141
182
 
142
- ___
143
- ### Swagger (optional but recommended)
144
- ```typescript
145
- async function bootstrap() {
146
- const app = await NestFactory.create(AppModule);
147
- // ...
148
- enableDynamicAPISwagger(app); // <- add this line in your main.ts file
149
183
 
150
- await app.listen(3000);
151
- }
152
- ```
153
- The `enableDynamicAPISwagger` function will automatically build the swagger documentation.
154
- This method can be called with optional parameters to specify more documentation options.
184
+ | Endpoint | Body | Param | Query |
185
+ |:--------------------------------------------------|:----------------------------------------------:|:------------:|:---------------:|
186
+ | GET **/users** <br>*Get many* | x | x | x |
187
+ | GET **/users/:id** <br>*Get one* | x | `id: string` | x |
188
+ | POST **/users/many** <br>*Create many* | `{ list: [{ name: string; email: string; }] }` | x | x |
189
+ | POST **/users** <br>*Create one* | `{ name: string; email: string; }` | x | x |
190
+ | PUT **/users/:id** <br>*Replace one* | `{ name: string; email: string; }` | `id: string` | x |
191
+ | PATCH **/users** <br>*Update many* | `{ name?: string; email?: string; }` | x | `ids: string[]` |
192
+ | PATCH **/users/:id** <br>*Update one* | `{ name?: string; email?: string; }` | `id: string` | x |
193
+ | DELETE **/users** <br>*Delete many* | x | x | `ids: string[]` |
194
+ | DELETE **/users/:id** <br>*Delete one* | x | `id: string` | x |
195
+ | POST **/users/duplicate** <br>*Duplicate many* | `{ name?: string; email?: string; }` | x | `ids: string[]` |
196
+ | POST **/users/duplicate/:id**<br>*Duplicate one* | `{ name?: string; email?: string; }` | `id: string` | x |
155
197
 
156
- Do not forget to add the `@ApiProperty` decorator to your entity properties to have a better swagger documentation.
157
- ```typescript
158
- // user.entity.ts
159
- @Schema({ collection: 'users' })
160
- export class UserEntity extends BaseEntity {
161
- @ApiProperty() // <- add this line
162
- @Prop({ type: String })
163
- name: string;
164
-
165
- @ApiProperty() // <- add this line
166
- @Prop({ type: String })
167
- email: string;
168
- }
169
- ```
198
+ ___
170
199
 
171
- go to the swagger API path (default to `/openapi`) and you will see the auto generated API
200
+ Go further with optional features like:
201
+ - **[Swagger UI](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/swagger-ui.md)**
202
+ - **[Versioning](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/versioning.md)**
203
+ - **[Validation](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/validation.md)** with **Class Validator**
204
+ - **[Caching](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/caching.md)** with **cache-manager**
205
+ - **[Authentication](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authentication.md)** with **JWT**
206
+ - **[Authorization](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authorization.md)** with **Casl**
172
207
 
173
208
 
174
- ![User API](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/images/dynamic-api-user-full.Jpeg?raw=true "User API")
175
209
 
176
- [more screenshots](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/swagger.md)
177
210
 
178
- ___
179
- ### Versioning (optional)
180
- ```typescript
181
- async function bootstrap() {
182
- const app = await NestFactory.create(AppModule);
183
- // ...
184
- enableDynamicAPIVersioning(app); // <- add this line in your main.ts file
211
+ <br>
212
+ <br>
213
+ <br>
185
214
 
186
- await app.listen(3000);
187
- }
188
- ```
189
- The `enableDynamicAPIVersioning` function will automatically add versioning to the API. By default it will use the URI versioning type.
190
- This method can be called with a second optional parameter to specify more options.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mongodb-dynamic-api",
3
- "version": "1.6.0",
3
+ "version": "2.1.0",
4
4
  "description": "Auto generated CRUD API for MongoDB using NestJS",
5
5
  "readmeFilename": "README.md",
6
6
  "main": "index.js",
@@ -38,17 +38,26 @@
38
38
  },
39
39
  "homepage": "https://mikedev75015.github.io",
40
40
  "dependencies": {
41
+ "@casl/ability": "^6.7.0",
42
+ "@nestjs/cache-manager": "^2.2.1",
41
43
  "@nestjs/common": "^10.3.2",
42
44
  "@nestjs/core": "^10.3.2",
45
+ "@nestjs/jwt": "^10.2.0",
43
46
  "@nestjs/mongoose": "^10.0.4",
47
+ "@nestjs/passport": "^10.0.3",
44
48
  "@nestjs/platform-express": "^10.3.2",
45
49
  "@nestjs/swagger": "^7.3.0",
46
50
  "@types/lodash": "^4.14.202",
51
+ "bcrypt": "^5.1.1",
47
52
  "builder-pattern": "^2.2.0",
53
+ "cache-manager": "^5.4.0",
48
54
  "class-transformer": "^0.5.1",
49
55
  "class-validator": "^0.14.1",
50
56
  "lodash": "^4.17.21",
51
57
  "mongoose": "^8.1.1",
58
+ "passport": "^0.7.0",
59
+ "passport-jwt": "^4.0.1",
60
+ "passport-local": "^1.0.0",
52
61
  "reflect-metadata": "^0.2.1",
53
62
  "rxjs": "^7.8.1"
54
63
  },
@@ -61,9 +70,12 @@
61
70
  "@release-it/conventional-changelog": "^8.0.1",
62
71
  "@swc/cli": "^0.3.9",
63
72
  "@swc/core": "^1.4.0",
73
+ "@types/bcrypt": "^5.0.2",
64
74
  "@types/express": "^4.17.21",
65
75
  "@types/jest": "^29.5.12",
66
76
  "@types/node": "^20.11.16",
77
+ "@types/passport-jwt": "^4.0.1",
78
+ "@types/passport-local": "^1.0.38",
67
79
  "@types/supertest": "^6.0.2",
68
80
  "@typescript-eslint/eslint-plugin": "^6.21.0",
69
81
  "@typescript-eslint/parser": "^6.21.0",
@@ -0,0 +1,5 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { AppAbility, DynamicApiRouteCaslAbilityPredicate, RouteType } from '../../interfaces';
3
+ import { BaseEntity } from '../../models';
4
+ declare function CaslAbilityBuilder<Entity extends BaseEntity>(entity: Type<Entity>, routeType: RouteType, abilityPredicate: DynamicApiRouteCaslAbilityPredicate<Entity>, user: unknown): AppAbility<Entity>;
5
+ export { CaslAbilityBuilder };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CaslAbilityBuilder = void 0;
4
+ const ability_1 = require("@casl/ability");
5
+ function CaslAbilityBuilder(entity, routeType, abilityPredicate, user) {
6
+ const { can, build } = new ability_1.AbilityBuilder(ability_1.createMongoAbility);
7
+ if (abilityPredicate(new entity(), user)) {
8
+ can(routeType, entity);
9
+ }
10
+ return build({
11
+ detectSubjectType: (object) => object.constructor
12
+ });
13
+ }
14
+ exports.CaslAbilityBuilder = CaslAbilityBuilder;
@@ -1 +1,3 @@
1
- export * from './route-decorators.builder';
1
+ export * from './casl/casl-ability.builder';
2
+ export * from './route-decorators/auth-decorators.builder';
3
+ export * from './route-decorators/route-decorators.builder';
@@ -14,4 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./route-decorators.builder"), exports);
17
+ __exportStar(require("./casl/casl-ability.builder"), exports);
18
+ __exportStar(require("./route-decorators/auth-decorators.builder"), exports);
19
+ __exportStar(require("./route-decorators/route-decorators.builder"), exports);
@@ -0,0 +1,7 @@
1
+ import { DynamicApiDecoratorBuilder } from '../../interfaces';
2
+ declare class AuthDecoratorsBuilder implements DynamicApiDecoratorBuilder<any> {
3
+ private readonly protectRegister;
4
+ constructor(protectRegister: boolean | undefined);
5
+ build(): (ClassDecorator & MethodDecorator)[];
6
+ }
7
+ export { AuthDecoratorsBuilder };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthDecoratorsBuilder = void 0;
4
+ const swagger_1 = require("@nestjs/swagger");
5
+ const decorators_1 = require("../../decorators");
6
+ class AuthDecoratorsBuilder {
7
+ constructor(protectRegister) {
8
+ this.protectRegister = protectRegister;
9
+ }
10
+ build() {
11
+ return !this.protectRegister ? [(0, decorators_1.Public)()] : [(0, swagger_1.ApiBearerAuth)()];
12
+ }
13
+ }
14
+ exports.AuthDecoratorsBuilder = AuthDecoratorsBuilder;
@@ -0,0 +1,23 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { DynamicApiDecoratorBuilder, RouteType } from '../../interfaces';
3
+ import { BaseEntity } from '../../models';
4
+ declare class RouteDecoratorsBuilder<Entity extends BaseEntity> implements DynamicApiDecoratorBuilder<Entity> {
5
+ private readonly routeType;
6
+ private readonly entity;
7
+ private readonly version;
8
+ private readonly description;
9
+ private readonly isPublic;
10
+ private readonly dTOs;
11
+ private readonly responseRouteTypeIsArray;
12
+ private readonly bodyRouteTypeIsOptional;
13
+ constructor(routeType: RouteType, entity: Type<Entity>, version: string | undefined, description: string | undefined, isPublic: boolean | undefined, dTOs?: {
14
+ param?: Type;
15
+ query?: Type;
16
+ body?: Type;
17
+ presenter?: Type;
18
+ });
19
+ build(): any[];
20
+ private getRouteDecorators;
21
+ private getApiDecorators;
22
+ }
23
+ export { RouteDecoratorsBuilder };
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouteDecoratorsBuilder = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const swagger_1 = require("@nestjs/swagger");
6
+ const lodash_1 = require("lodash");
7
+ const decorators_1 = require("../../decorators");
8
+ const dynamic_api_module_1 = require("../../dynamic-api.module");
9
+ class RouteDecoratorsBuilder {
10
+ constructor(routeType, entity, version, description, isPublic, dTOs = {}) {
11
+ this.routeType = routeType;
12
+ this.entity = entity;
13
+ this.version = version;
14
+ this.description = description;
15
+ this.isPublic = isPublic;
16
+ this.dTOs = dTOs;
17
+ this.responseRouteTypeIsArray = [
18
+ 'GetMany',
19
+ 'CreateMany',
20
+ 'DuplicateMany',
21
+ ];
22
+ this.bodyRouteTypeIsOptional = [
23
+ 'DuplicateOne',
24
+ 'DuplicateMany',
25
+ ];
26
+ }
27
+ build() {
28
+ const [paramKey] = this.dTOs.param ? (0, lodash_1.keys)(new this.dTOs.param()) : [];
29
+ return [
30
+ ...this.getRouteDecorators(paramKey),
31
+ ...this.getApiDecorators(paramKey),
32
+ ];
33
+ }
34
+ getRouteDecorators(paramKey) {
35
+ let routeDecorators = [];
36
+ const isAuthEnabled = dynamic_api_module_1.DynamicApiModule.state.get('isAuthEnabled');
37
+ if (this.isPublic) {
38
+ routeDecorators.push((0, decorators_1.Public)());
39
+ }
40
+ else if (isAuthEnabled) {
41
+ routeDecorators.push((0, swagger_1.ApiBearerAuth)());
42
+ }
43
+ switch (this.routeType) {
44
+ case 'GetMany':
45
+ routeDecorators.push((0, common_1.Get)());
46
+ break;
47
+ case 'GetOne':
48
+ routeDecorators.push((0, common_1.Get)(`:${paramKey}`));
49
+ break;
50
+ case 'CreateMany':
51
+ routeDecorators.push((0, common_1.Post)('many'));
52
+ break;
53
+ case 'CreateOne':
54
+ routeDecorators.push((0, common_1.Post)());
55
+ break;
56
+ case 'UpdateMany':
57
+ routeDecorators.push((0, common_1.Patch)());
58
+ break;
59
+ case 'UpdateOne':
60
+ routeDecorators.push((0, common_1.Patch)(`:${paramKey}`));
61
+ break;
62
+ case 'ReplaceOne':
63
+ routeDecorators.push((0, common_1.Put)(`:${paramKey}`));
64
+ break;
65
+ case 'DuplicateMany':
66
+ routeDecorators.push((0, common_1.Post)(`duplicate`));
67
+ break;
68
+ case 'DuplicateOne':
69
+ routeDecorators.push((0, common_1.Post)(`duplicate/:${paramKey}`));
70
+ break;
71
+ case 'DeleteMany':
72
+ routeDecorators.push((0, common_1.Delete)());
73
+ break;
74
+ case 'DeleteOne':
75
+ routeDecorators.push((0, common_1.Delete)(`:${paramKey}`));
76
+ break;
77
+ default:
78
+ throw new Error(`Unexpected route type! Cannot build route decorators. Received: ${this.routeType}`);
79
+ }
80
+ return routeDecorators;
81
+ }
82
+ getApiDecorators(paramKey) {
83
+ return [
84
+ (0, swagger_1.ApiOperation)({
85
+ operationId: `${(0, lodash_1.lowerFirst)(this.routeType)}${this.entity.name}${this.version ? 'V' + this.version : ''}`,
86
+ summary: this.description ??
87
+ `${(0, lodash_1.upperFirst)((0, lodash_1.lowerCase)(this.routeType))} ${(0, lodash_1.lowerCase)(this.entity.name)}`,
88
+ }),
89
+ (0, swagger_1.ApiResponse)({
90
+ type: this.dTOs.presenter ?? this.entity,
91
+ isArray: this.responseRouteTypeIsArray.includes(this.routeType),
92
+ }),
93
+ ...(this.dTOs.body ? [
94
+ (0, swagger_1.ApiBody)({
95
+ type: this.dTOs.body,
96
+ required: !this.bodyRouteTypeIsOptional.includes(this.routeType),
97
+ }),
98
+ ] : []),
99
+ ...(this.dTOs.param && paramKey
100
+ ? [
101
+ (0, swagger_1.ApiParam)({
102
+ type: typeof new this.dTOs.param()[paramKey],
103
+ name: paramKey,
104
+ }),
105
+ ]
106
+ : []),
107
+ ];
108
+ }
109
+ }
110
+ exports.RouteDecoratorsBuilder = RouteDecoratorsBuilder;
@@ -0,0 +1,5 @@
1
+ import { PolicyHandler } from '../interfaces';
2
+ import { BaseEntity } from '../models';
3
+ declare const CHECK_POLICIES_KEY = "check_policy";
4
+ declare const CheckPolicies: <Entity extends BaseEntity>(...handlers: PolicyHandler<Entity>[]) => import("@nestjs/common").CustomDecorator<string>;
5
+ export { CheckPolicies, CHECK_POLICIES_KEY };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CHECK_POLICIES_KEY = exports.CheckPolicies = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const CHECK_POLICIES_KEY = 'check_policy';
6
+ exports.CHECK_POLICIES_KEY = CHECK_POLICIES_KEY;
7
+ const CheckPolicies = (...handlers) => (0, common_1.SetMetadata)(CHECK_POLICIES_KEY, handlers);
8
+ exports.CheckPolicies = CheckPolicies;
@@ -1 +1,3 @@
1
+ export * from './check-policies.decorator';
2
+ export * from './public.decorator';
1
3
  export * from './schema-options.decorator';
@@ -14,4 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./check-policies.decorator"), exports);
18
+ __exportStar(require("./public.decorator"), exports);
17
19
  __exportStar(require("./schema-options.decorator"), exports);
@@ -0,0 +1,3 @@
1
+ declare const IS_PUBLIC_KEY = "isPublic";
2
+ declare const Public: () => import("@nestjs/common").CustomDecorator<string>;
3
+ export { IS_PUBLIC_KEY, Public };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Public = exports.IS_PUBLIC_KEY = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const IS_PUBLIC_KEY = 'isPublic';
6
+ exports.IS_PUBLIC_KEY = IS_PUBLIC_KEY;
7
+ const Public = () => (0, common_1.SetMetadata)(IS_PUBLIC_KEY, true);
8
+ exports.Public = Public;
@@ -0,0 +1,3 @@
1
+ export declare class DeleteManyEntityQuery {
2
+ ids: string[];
3
+ }