@lenne.tech/nest-server 10.2.7 → 10.2.9

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 (323) hide show
  1. package/dist/config.env.js +75 -75
  2. package/dist/config.env.js.map +1 -1
  3. package/dist/core/common/args/filter.args.js +1 -1
  4. package/dist/core/common/args/filter.args.js.map +1 -1
  5. package/dist/core/common/args/pagination.args.js.map +1 -1
  6. package/dist/core/common/decorators/current-user.decorator.js.map +1 -1
  7. package/dist/core/common/decorators/graphql-populate.decorator.js.map +1 -1
  8. package/dist/core/common/decorators/graphql-service-options.decorator.js.map +1 -1
  9. package/dist/core/common/decorators/restricted.decorator.d.ts +4 -4
  10. package/dist/core/common/decorators/restricted.decorator.js +2 -2
  11. package/dist/core/common/decorators/restricted.decorator.js.map +1 -1
  12. package/dist/core/common/enums/comparison-operator.enum.js +1 -1
  13. package/dist/core/common/enums/comparison-operator.enum.js.map +1 -1
  14. package/dist/core/common/enums/logical-operator.enum.js +1 -1
  15. package/dist/core/common/enums/logical-operator.enum.js.map +1 -1
  16. package/dist/core/common/enums/role.enum.d.ts +3 -3
  17. package/dist/core/common/enums/role.enum.js +2 -2
  18. package/dist/core/common/enums/role.enum.js.map +1 -1
  19. package/dist/core/common/enums/sort-order.emum.js +1 -1
  20. package/dist/core/common/enums/sort-order.emum.js.map +1 -1
  21. package/dist/core/common/filters/http-exception-log.filter.js.map +1 -1
  22. package/dist/core/common/helpers/config.helper.js.map +1 -1
  23. package/dist/core/common/helpers/context.helper.js +1 -1
  24. package/dist/core/common/helpers/context.helper.js.map +1 -1
  25. package/dist/core/common/helpers/db.helper.d.ts +28 -4
  26. package/dist/core/common/helpers/db.helper.js +4 -4
  27. package/dist/core/common/helpers/db.helper.js.map +1 -1
  28. package/dist/core/common/helpers/decorator.helper.d.ts +24 -0
  29. package/dist/core/common/helpers/decorator.helper.js.map +1 -1
  30. package/dist/core/common/helpers/file.helper.js +1 -1
  31. package/dist/core/common/helpers/file.helper.js.map +1 -1
  32. package/dist/core/common/helpers/filter.helper.d.ts +26 -2
  33. package/dist/core/common/helpers/filter.helper.js +3 -3
  34. package/dist/core/common/helpers/filter.helper.js.map +1 -1
  35. package/dist/core/common/helpers/graphql.helper.d.ts +2 -2
  36. package/dist/core/common/helpers/graphql.helper.js +1 -1
  37. package/dist/core/common/helpers/graphql.helper.js.map +1 -1
  38. package/dist/core/common/helpers/input.helper.d.ts +3 -3
  39. package/dist/core/common/helpers/input.helper.js +5 -5
  40. package/dist/core/common/helpers/input.helper.js.map +1 -1
  41. package/dist/core/common/helpers/model.helper.d.ts +2 -2
  42. package/dist/core/common/helpers/model.helper.js +3 -3
  43. package/dist/core/common/helpers/model.helper.js.map +1 -1
  44. package/dist/core/common/helpers/service.helper.d.ts +6 -6
  45. package/dist/core/common/helpers/service.helper.js +5 -5
  46. package/dist/core/common/helpers/service.helper.js.map +1 -1
  47. package/dist/core/common/helpers/table.helper.d.ts +3 -3
  48. package/dist/core/common/helpers/table.helper.js +7 -7
  49. package/dist/core/common/helpers/table.helper.js.map +1 -1
  50. package/dist/core/common/inputs/combined-filter.input.js.map +1 -1
  51. package/dist/core/common/inputs/filter.input.js.map +1 -1
  52. package/dist/core/common/inputs/single-filter.input.js.map +1 -1
  53. package/dist/core/common/inputs/sort.input.js.map +1 -1
  54. package/dist/core/common/interceptors/check-response.interceptor.js.map +1 -1
  55. package/dist/core/common/interceptors/check-security.interceptor.js.map +1 -1
  56. package/dist/core/common/interfaces/core-persistence-model.interface.d.ts +3 -3
  57. package/dist/core/common/interfaces/mailjet-options.interface.d.ts +1 -1
  58. package/dist/core/common/interfaces/prepare-input-options.interface.d.ts +1 -1
  59. package/dist/core/common/interfaces/server-options.interface.d.ts +12 -8
  60. package/dist/core/common/interfaces/service-options.interface.d.ts +31 -5
  61. package/dist/core/common/models/core-model.model.js.map +1 -1
  62. package/dist/core/common/models/core-persistence.model.d.ts +24 -0
  63. package/dist/core/common/models/core-persistence.model.js.map +1 -1
  64. package/dist/core/common/pipes/check-input.pipe.js.map +1 -1
  65. package/dist/core/common/pipes/map-and-validate.pipe.js.map +1 -1
  66. package/dist/core/common/plugins/complexity.plugin.js +4 -4
  67. package/dist/core/common/plugins/complexity.plugin.js.map +1 -1
  68. package/dist/core/common/plugins/mongoose-id.plugin.js.map +1 -1
  69. package/dist/core/common/scalars/any.scalar.js.map +1 -1
  70. package/dist/core/common/scalars/date-timestamp.scalar.js.map +1 -1
  71. package/dist/core/common/scalars/date.scalar.js.map +1 -1
  72. package/dist/core/common/scalars/json.scalar.js.map +1 -1
  73. package/dist/core/common/services/brevo.service.d.ts +4 -0
  74. package/dist/core/common/services/brevo.service.js +28 -5
  75. package/dist/core/common/services/brevo.service.js.map +1 -1
  76. package/dist/core/common/services/config.service.js +1 -1
  77. package/dist/core/common/services/config.service.js.map +1 -1
  78. package/dist/core/common/services/core-cron-jobs.service.d.ts +2 -2
  79. package/dist/core/common/services/core-cron-jobs.service.js.map +1 -1
  80. package/dist/core/common/services/crud.service.d.ts +58 -32
  81. package/dist/core/common/services/crud.service.js +40 -23
  82. package/dist/core/common/services/crud.service.js.map +1 -1
  83. package/dist/core/common/services/email.service.js +5 -5
  84. package/dist/core/common/services/email.service.js.map +1 -1
  85. package/dist/core/common/services/mailjet.service.d.ts +4 -4
  86. package/dist/core/common/services/mailjet.service.js +8 -8
  87. package/dist/core/common/services/mailjet.service.js.map +1 -1
  88. package/dist/core/common/services/model-doc.service.d.ts +24 -0
  89. package/dist/core/common/services/model-doc.service.js +1 -1
  90. package/dist/core/common/services/model-doc.service.js.map +1 -1
  91. package/dist/core/common/services/module.service.d.ts +28 -4
  92. package/dist/core/common/services/module.service.js +8 -4
  93. package/dist/core/common/services/module.service.js.map +1 -1
  94. package/dist/core/common/services/template.service.js +3 -3
  95. package/dist/core/common/services/template.service.js.map +1 -1
  96. package/dist/core/common/types/core-model-constructor.type.d.ts +1 -1
  97. package/dist/core/common/types/falsy.type.d.ts +1 -1
  98. package/dist/core/common/types/field-selection.type.d.ts +25 -1
  99. package/dist/core/common/types/ids.type.d.ts +31 -7
  100. package/dist/core/common/types/maybe-promise.type.d.ts +1 -1
  101. package/dist/core/common/types/plain-input.type.d.ts +1 -1
  102. package/dist/core/common/types/populate-config.type.d.ts +25 -1
  103. package/dist/core/common/types/string-or-object-id.type.d.ts +25 -1
  104. package/dist/core/modules/auth/core-auth.controller.js +1 -1
  105. package/dist/core/modules/auth/core-auth.controller.js.map +1 -1
  106. package/dist/core/modules/auth/core-auth.model.js.map +1 -1
  107. package/dist/core/modules/auth/core-auth.module.d.ts +5 -5
  108. package/dist/core/modules/auth/core-auth.module.js +5 -5
  109. package/dist/core/modules/auth/core-auth.module.js.map +1 -1
  110. package/dist/core/modules/auth/core-auth.resolver.js +1 -1
  111. package/dist/core/modules/auth/core-auth.resolver.js.map +1 -1
  112. package/dist/core/modules/auth/guards/auth.guard.d.ts +1 -1
  113. package/dist/core/modules/auth/guards/auth.guard.js +1 -1
  114. package/dist/core/modules/auth/guards/auth.guard.js.map +1 -1
  115. package/dist/core/modules/auth/guards/refresh-token.guard.js.map +1 -1
  116. package/dist/core/modules/auth/guards/roles.guard.js.map +1 -1
  117. package/dist/core/modules/auth/inputs/core-auth-sign-in.input.js.map +1 -1
  118. package/dist/core/modules/auth/inputs/core-auth-sign-up.input.js.map +1 -1
  119. package/dist/core/modules/auth/interfaces/core-auth-user.interface.d.ts +1 -1
  120. package/dist/core/modules/auth/interfaces/core-token-data.interface.d.ts +1 -1
  121. package/dist/core/modules/auth/interfaces/jwt-payload.interface.d.ts +1 -1
  122. package/dist/core/modules/auth/services/core-auth.service.d.ts +1 -1
  123. package/dist/core/modules/auth/services/core-auth.service.js +10 -10
  124. package/dist/core/modules/auth/services/core-auth.service.js.map +1 -1
  125. package/dist/core/modules/auth/strategies/jwt-refresh.strategy.js +1 -1
  126. package/dist/core/modules/auth/strategies/jwt-refresh.strategy.js.map +1 -1
  127. package/dist/core/modules/auth/strategies/jwt.strategy.js.map +1 -1
  128. package/dist/core/modules/auth/tokens.decorator.js +1 -1
  129. package/dist/core/modules/auth/tokens.decorator.js.map +1 -1
  130. package/dist/core/modules/file/core-file-info.model.d.ts +24 -0
  131. package/dist/core/modules/file/core-file-info.model.js +5 -5
  132. package/dist/core/modules/file/core-file-info.model.js.map +1 -1
  133. package/dist/core/modules/file/core-file.controller.js.map +1 -1
  134. package/dist/core/modules/file/core-file.resolver.js +1 -1
  135. package/dist/core/modules/file/core-file.resolver.js.map +1 -1
  136. package/dist/core/modules/file/core-file.service.d.ts +30 -6
  137. package/dist/core/modules/file/core-file.service.js +3 -3
  138. package/dist/core/modules/file/core-file.service.js.map +1 -1
  139. package/dist/core/modules/file/interfaces/file-service-options.interface.d.ts +1 -1
  140. package/dist/core/modules/file/interfaces/file-upload.interface.d.ts +2 -2
  141. package/dist/core/modules/health-check/core-health-check-result.model.js.map +1 -1
  142. package/dist/core/modules/health-check/core-health-check.controller.js.map +1 -1
  143. package/dist/core/modules/health-check/core-health-check.module.js +1 -1
  144. package/dist/core/modules/health-check/core-health-check.module.js.map +1 -1
  145. package/dist/core/modules/health-check/core-health-check.resolver.js +2 -2
  146. package/dist/core/modules/health-check/core-health-check.resolver.js.map +1 -1
  147. package/dist/core/modules/health-check/core-health-check.service.js +1 -1
  148. package/dist/core/modules/health-check/core-health-check.service.js.map +1 -1
  149. package/dist/core/modules/user/core-user.model.d.ts +24 -0
  150. package/dist/core/modules/user/core-user.model.js +1 -1
  151. package/dist/core/modules/user/core-user.model.js.map +1 -1
  152. package/dist/core/modules/user/core-user.service.d.ts +25 -1
  153. package/dist/core/modules/user/core-user.service.js +3 -3
  154. package/dist/core/modules/user/core-user.service.js.map +1 -1
  155. package/dist/core/modules/user/inputs/core-user-create.input.js +1 -1
  156. package/dist/core/modules/user/inputs/core-user-create.input.js.map +1 -1
  157. package/dist/core/modules/user/inputs/core-user.input.js +1 -1
  158. package/dist/core/modules/user/inputs/core-user.input.js.map +1 -1
  159. package/dist/core.module.js +20 -20
  160. package/dist/core.module.js.map +1 -1
  161. package/dist/main.js +3 -3
  162. package/dist/main.js.map +1 -1
  163. package/dist/server/common/models/persistence.model.d.ts +24 -0
  164. package/dist/server/common/models/persistence.model.js +4 -4
  165. package/dist/server/common/models/persistence.model.js.map +1 -1
  166. package/dist/server/common/services/cron-jobs.service.js.map +1 -1
  167. package/dist/server/modules/auth/auth.controller.js.map +1 -1
  168. package/dist/server/modules/auth/auth.model.js.map +1 -1
  169. package/dist/server/modules/auth/auth.module.js +2 -2
  170. package/dist/server/modules/auth/auth.module.js.map +1 -1
  171. package/dist/server/modules/auth/auth.resolver.js.map +1 -1
  172. package/dist/server/modules/auth/auth.service.js +1 -1
  173. package/dist/server/modules/auth/auth.service.js.map +1 -1
  174. package/dist/server/modules/auth/inputs/auth-sign-in.input.js.map +1 -1
  175. package/dist/server/modules/auth/inputs/auth-sign-up.input.js.map +1 -1
  176. package/dist/server/modules/file/file-info.model.js.map +1 -1
  177. package/dist/server/modules/file/file.controller.js.map +1 -1
  178. package/dist/server/modules/file/file.module.js +2 -2
  179. package/dist/server/modules/file/file.module.js.map +1 -1
  180. package/dist/server/modules/file/file.resolver.js +5 -5
  181. package/dist/server/modules/file/file.resolver.js.map +1 -1
  182. package/dist/server/modules/file/file.service.d.ts +24 -0
  183. package/dist/server/modules/file/file.service.js.map +1 -1
  184. package/dist/server/modules/file/multer-config.service.js +2 -2
  185. package/dist/server/modules/file/multer-config.service.js.map +1 -1
  186. package/dist/server/modules/user/avatar.controller.js.map +1 -1
  187. package/dist/server/modules/user/inputs/user-create.input.js.map +1 -1
  188. package/dist/server/modules/user/inputs/user.input.js.map +1 -1
  189. package/dist/server/modules/user/outputs/find-and-count-users-result.output.js.map +1 -1
  190. package/dist/server/modules/user/user.model.js +2 -2
  191. package/dist/server/modules/user/user.model.js.map +1 -1
  192. package/dist/server/modules/user/user.module.js +2 -2
  193. package/dist/server/modules/user/user.module.js.map +1 -1
  194. package/dist/server/modules/user/user.resolver.d.ts +1 -1
  195. package/dist/server/modules/user/user.resolver.js +1 -1
  196. package/dist/server/modules/user/user.resolver.js.map +1 -1
  197. package/dist/server/modules/user/user.service.d.ts +25 -1
  198. package/dist/server/modules/user/user.service.js +2 -2
  199. package/dist/server/modules/user/user.service.js.map +1 -1
  200. package/dist/server/server.controller.js.map +1 -1
  201. package/dist/server/server.module.js +2 -2
  202. package/dist/server/server.module.js.map +1 -1
  203. package/dist/test/test.helper.d.ts +13 -13
  204. package/dist/test/test.helper.js +15 -15
  205. package/dist/test/test.helper.js.map +1 -1
  206. package/dist/tsconfig.build.tsbuildinfo +1 -1
  207. package/package.json +35 -35
  208. package/src/config.env.ts +79 -78
  209. package/src/core/common/args/filter.args.ts +2 -1
  210. package/src/core/common/args/pagination.args.ts +1 -0
  211. package/src/core/common/decorators/current-user.decorator.ts +1 -0
  212. package/src/core/common/decorators/graphql-populate.decorator.ts +1 -0
  213. package/src/core/common/decorators/graphql-service-options.decorator.ts +1 -0
  214. package/src/core/common/decorators/restricted.decorator.ts +7 -5
  215. package/src/core/common/enums/comparison-operator.enum.ts +1 -1
  216. package/src/core/common/enums/logical-operator.enum.ts +1 -1
  217. package/src/core/common/enums/role.enum.ts +6 -6
  218. package/src/core/common/enums/sort-order.emum.ts +1 -1
  219. package/src/core/common/helpers/context.helper.ts +1 -1
  220. package/src/core/common/helpers/db.helper.ts +14 -12
  221. package/src/core/common/helpers/decorator.helper.ts +1 -0
  222. package/src/core/common/helpers/file.helper.ts +1 -1
  223. package/src/core/common/helpers/filter.helper.ts +6 -5
  224. package/src/core/common/helpers/graphql.helper.ts +7 -6
  225. package/src/core/common/helpers/input.helper.ts +10 -8
  226. package/src/core/common/helpers/model.helper.ts +6 -5
  227. package/src/core/common/helpers/service.helper.ts +13 -11
  228. package/src/core/common/helpers/table.helper.ts +12 -10
  229. package/src/core/common/inputs/combined-filter.input.ts +1 -0
  230. package/src/core/common/inputs/filter.input.ts +1 -0
  231. package/src/core/common/inputs/single-filter.input.ts +1 -0
  232. package/src/core/common/inputs/sort.input.ts +1 -0
  233. package/src/core/common/interceptors/check-response.interceptor.ts +1 -0
  234. package/src/core/common/interceptors/check-security.interceptor.ts +1 -0
  235. package/src/core/common/interfaces/core-persistence-model.interface.ts +3 -3
  236. package/src/core/common/interfaces/cron-job-config-with-time-zone.interface.ts +1 -0
  237. package/src/core/common/interfaces/cron-job-config-with-utc-offset.interface.ts +1 -0
  238. package/src/core/common/interfaces/mailjet-options.interface.ts +1 -1
  239. package/src/core/common/interfaces/prepare-input-options.interface.ts +1 -1
  240. package/src/core/common/interfaces/server-options.interface.ts +33 -24
  241. package/src/core/common/interfaces/service-options.interface.ts +31 -16
  242. package/src/core/common/models/core-persistence.model.ts +1 -0
  243. package/src/core/common/pipes/check-input.pipe.ts +1 -0
  244. package/src/core/common/pipes/map-and-validate.pipe.ts +1 -0
  245. package/src/core/common/plugins/complexity.plugin.ts +5 -4
  246. package/src/core/common/scalars/date-timestamp.scalar.ts +1 -0
  247. package/src/core/common/scalars/date.scalar.ts +1 -0
  248. package/src/core/common/services/brevo.service.ts +51 -6
  249. package/src/core/common/services/config.service.ts +3 -1
  250. package/src/core/common/services/core-cron-jobs.service.ts +3 -2
  251. package/src/core/common/services/crud.service.ts +70 -43
  252. package/src/core/common/services/email.service.ts +7 -5
  253. package/src/core/common/services/mailjet.service.ts +14 -13
  254. package/src/core/common/services/model-doc.service.ts +2 -1
  255. package/src/core/common/services/module.service.ts +18 -10
  256. package/src/core/common/services/template.service.ts +5 -3
  257. package/src/core/common/types/core-model-constructor.type.ts +1 -1
  258. package/src/core/common/types/falsy.type.ts +1 -1
  259. package/src/core/common/types/field-selection.type.ts +4 -3
  260. package/src/core/common/types/ids.type.ts +3 -3
  261. package/src/core/common/types/maybe-promise.type.ts +1 -1
  262. package/src/core/common/types/plain-input.type.ts +1 -1
  263. package/src/core/common/types/populate-config.type.ts +1 -1
  264. package/src/core/common/types/string-or-object-id.type.ts +1 -1
  265. package/src/core/modules/auth/core-auth.controller.ts +2 -1
  266. package/src/core/modules/auth/core-auth.model.ts +1 -0
  267. package/src/core/modules/auth/core-auth.module.ts +8 -7
  268. package/src/core/modules/auth/core-auth.resolver.ts +2 -1
  269. package/src/core/modules/auth/guards/auth.guard.ts +4 -2
  270. package/src/core/modules/auth/guards/refresh-token.guard.ts +1 -0
  271. package/src/core/modules/auth/guards/roles.guard.ts +1 -0
  272. package/src/core/modules/auth/inputs/core-auth-sign-in.input.ts +1 -0
  273. package/src/core/modules/auth/inputs/core-auth-sign-up.input.ts +1 -0
  274. package/src/core/modules/auth/interfaces/core-auth-user.interface.ts +4 -4
  275. package/src/core/modules/auth/interfaces/core-token-data.interface.ts +4 -4
  276. package/src/core/modules/auth/interfaces/jwt-payload.interface.ts +1 -1
  277. package/src/core/modules/auth/services/core-auth.service.ts +13 -11
  278. package/src/core/modules/auth/strategies/jwt-refresh.strategy.ts +3 -2
  279. package/src/core/modules/auth/strategies/jwt.strategy.ts +3 -2
  280. package/src/core/modules/auth/tokens.decorator.ts +4 -3
  281. package/src/core/modules/file/core-file-info.model.ts +6 -5
  282. package/src/core/modules/file/core-file.controller.ts +1 -0
  283. package/src/core/modules/file/core-file.resolver.ts +2 -1
  284. package/src/core/modules/file/core-file.service.ts +9 -8
  285. package/src/core/modules/file/interfaces/file-service-options.interface.ts +1 -1
  286. package/src/core/modules/file/interfaces/file-upload.interface.ts +2 -2
  287. package/src/core/modules/health-check/core-health-check-result.model.ts +1 -0
  288. package/src/core/modules/health-check/core-health-check.controller.ts +1 -0
  289. package/src/core/modules/health-check/core-health-check.module.ts +2 -1
  290. package/src/core/modules/health-check/core-health-check.resolver.ts +3 -2
  291. package/src/core/modules/health-check/core-health-check.service.ts +2 -1
  292. package/src/core/modules/user/core-user.model.ts +2 -1
  293. package/src/core/modules/user/core-user.service.ts +6 -4
  294. package/src/core/modules/user/inputs/core-user-create.input.ts +2 -1
  295. package/src/core/modules/user/inputs/core-user.input.ts +2 -1
  296. package/src/core.module.ts +24 -22
  297. package/src/main.ts +5 -3
  298. package/src/server/common/models/persistence.model.ts +7 -5
  299. package/src/server/common/services/cron-jobs.service.ts +1 -0
  300. package/src/server/modules/auth/auth.controller.ts +1 -0
  301. package/src/server/modules/auth/auth.model.ts +1 -0
  302. package/src/server/modules/auth/auth.module.ts +3 -2
  303. package/src/server/modules/auth/auth.resolver.ts +1 -0
  304. package/src/server/modules/auth/auth.service.ts +2 -1
  305. package/src/server/modules/auth/inputs/auth-sign-in.input.ts +1 -0
  306. package/src/server/modules/auth/inputs/auth-sign-up.input.ts +1 -0
  307. package/src/server/modules/file/file-info.model.ts +1 -0
  308. package/src/server/modules/file/file.controller.ts +1 -0
  309. package/src/server/modules/file/file.module.ts +3 -2
  310. package/src/server/modules/file/file.resolver.ts +7 -5
  311. package/src/server/modules/file/file.service.ts +1 -0
  312. package/src/server/modules/file/multer-config.service.ts +3 -2
  313. package/src/server/modules/user/avatar.controller.ts +1 -0
  314. package/src/server/modules/user/inputs/user-create.input.ts +1 -0
  315. package/src/server/modules/user/inputs/user.input.ts +1 -0
  316. package/src/server/modules/user/outputs/find-and-count-users-result.output.ts +1 -0
  317. package/src/server/modules/user/user.model.ts +3 -2
  318. package/src/server/modules/user/user.module.ts +3 -2
  319. package/src/server/modules/user/user.resolver.ts +2 -1
  320. package/src/server/modules/user/user.service.ts +5 -3
  321. package/src/server/server.controller.ts +1 -0
  322. package/src/server/server.module.ts +7 -6
  323. package/src/test/test.helper.ts +28 -26
@@ -1,5 +1,6 @@
1
1
  import { NotFoundException } from '@nestjs/common';
2
- import { AggregateOptions, Document, FilterQuery, PipelineStage, Query, QueryOptions } from 'mongoose';
2
+ import { AggregateOptions, Document, FilterQuery, Model as MongooseModel, PipelineStage, Query, QueryOptions } from 'mongoose';
3
+
3
4
  import { FilterArgs } from '../args/filter.args';
4
5
  import { getStringIds } from '../helpers/db.helper';
5
6
  import { convertFilterArgsToQuery } from '../helpers/filter.helper';
@@ -55,8 +56,7 @@ export abstract class CrudService<
55
56
  */
56
57
  async aggregateRaw<T = any>(pipeline: PipelineStage[], serviceOptions: ServiceOptions = {}): Promise<T> {
57
58
  serviceOptions = serviceOptions || {};
58
- serviceOptions.prepareInput = null;
59
- serviceOptions.prepareOutput = null;
59
+ serviceOptions.raw = true;
60
60
  return this.aggregateForce(pipeline, serviceOptions);
61
61
  }
62
62
 
@@ -90,16 +90,26 @@ export abstract class CrudService<
90
90
  */
91
91
  async createRaw(input: PlainObject<CreateInput>, serviceOptions: ServiceOptions = {}): Promise<Model> {
92
92
  serviceOptions = serviceOptions || {};
93
- serviceOptions.prepareInput = null;
94
- serviceOptions.prepareOutput = null;
93
+ serviceOptions.raw = true;
95
94
  return this.createForce(input, serviceOptions);
96
95
  }
97
96
 
97
+ /**
98
+ * Get distinct values of a property
99
+ */
100
+ distinct(property: string): Promise<string[]> {
101
+ return this.mainDbModel.distinct(property);
102
+ }
103
+
98
104
  /**
99
105
  * Get item by ID
100
106
  */
101
107
  async get(id: string, serviceOptions?: ServiceOptions): Promise<Model> {
102
- const dbObject = await this.mainDbModel.findById(id).exec();
108
+ const query = this.mainDbModel.findById(id);
109
+ if (serviceOptions?.select) {
110
+ query.select(serviceOptions.select);
111
+ }
112
+ const dbObject = await query.exec();
103
113
  if (!dbObject) {
104
114
  throw new NotFoundException(`No ${this.mainModelConstructor.name} found with ID: ${id}`);
105
115
  }
@@ -122,8 +132,7 @@ export abstract class CrudService<
122
132
  */
123
133
  async getRaw(id: string, serviceOptions: ServiceOptions = {}): Promise<Model> {
124
134
  serviceOptions = serviceOptions || {};
125
- serviceOptions.prepareInput = null;
126
- serviceOptions.prepareOutput = null;
135
+ serviceOptions.raw = true;
127
136
  return this.getForce(id, serviceOptions);
128
137
  }
129
138
 
@@ -131,7 +140,7 @@ export abstract class CrudService<
131
140
  * Get items via filter
132
141
  */
133
142
  async find(
134
- filter?: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number },
143
+ filter?: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number } | FilterArgs,
135
144
  serviceOptions?: ServiceOptions,
136
145
  ): Promise<Model[]> {
137
146
  // If filter is not instance of FilterArgs a simple form with filterQuery and queryOptions is set
@@ -161,6 +170,9 @@ export abstract class CrudService<
161
170
  if (collation) {
162
171
  find = find.collation(collation);
163
172
  }
173
+ if (serviceOptions?.select) {
174
+ find = find.select(serviceOptions.select);
175
+ }
164
176
  return find.exec();
165
177
  },
166
178
  { input: filter, serviceOptions },
@@ -172,7 +184,7 @@ export abstract class CrudService<
172
184
  * Warning: Disables the handling of rights and restrictions!
173
185
  */
174
186
  async findForce(
175
- filter?: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number },
187
+ filter?: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number } | FilterArgs,
176
188
  serviceOptions: ServiceOptions = {},
177
189
  ): Promise<Model[]> {
178
190
  serviceOptions = serviceOptions || {};
@@ -185,12 +197,11 @@ export abstract class CrudService<
185
197
  * Warning: Disables the handling of rights and restrictions! The raw data may contain secrets (such as passwords).
186
198
  */
187
199
  async findRaw(
188
- filter?: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number },
200
+ filter?: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number } | FilterArgs,
189
201
  serviceOptions: ServiceOptions = {},
190
202
  ): Promise<Model[]> {
191
203
  serviceOptions = serviceOptions || {};
192
- serviceOptions.prepareInput = null;
193
- serviceOptions.prepareOutput = null;
204
+ serviceOptions.raw = true;
194
205
  return this.findForce(filter, serviceOptions);
195
206
  }
196
207
 
@@ -198,7 +209,7 @@ export abstract class CrudService<
198
209
  * Get items and total count via filter
199
210
  */
200
211
  async findAndCount(
201
- filter?: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number },
212
+ filter?: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number } | FilterArgs,
202
213
  serviceOptions?: ServiceOptions,
203
214
  ): Promise<{ items: Model[]; totalCount: number }> {
204
215
  // If filter is not instance of FilterArgs a simple form with filterQuery and queryOptions is set
@@ -277,11 +288,10 @@ export abstract class CrudService<
277
288
  * Warning: Disables the handling of rights and restrictions!
278
289
  */
279
290
  async findAndCountForce(
280
- filter?: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number },
291
+ filter?: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number } | FilterArgs,
281
292
  serviceOptions: ServiceOptions = {},
282
293
  ): Promise<{ items: Model[]; totalCount: number }> {
283
- serviceOptions = serviceOptions || {};
284
- serviceOptions.force = true;
294
+ serviceOptions.raw = true;
285
295
  return this.findAndCount(filter, serviceOptions);
286
296
  }
287
297
 
@@ -290,12 +300,11 @@ export abstract class CrudService<
290
300
  * Warning: Disables the handling of rights and restrictions! The raw data may contain secrets (such as passwords).
291
301
  */
292
302
  async findAndCountRaw(
293
- filter?: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number },
303
+ filter?: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number } | FilterArgs,
294
304
  serviceOptions: ServiceOptions = {},
295
305
  ): Promise<{ items: Model[]; totalCount: number }> {
296
306
  serviceOptions = serviceOptions || {};
297
- serviceOptions.prepareInput = null;
298
- serviceOptions.prepareOutput = null;
307
+ serviceOptions.raw = true;
299
308
  return this.findAndCountForce(filter, serviceOptions);
300
309
  }
301
310
 
@@ -303,7 +312,7 @@ export abstract class CrudService<
303
312
  * Find and update
304
313
  */
305
314
  async findAndUpdate(
306
- filter: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number },
315
+ filter: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number } | FilterArgs,
307
316
  update: PlainObject<UpdateInput>,
308
317
  serviceOptions?: ServiceOptions,
309
318
  ): Promise<Model[]> {
@@ -332,7 +341,7 @@ export abstract class CrudService<
332
341
  * Warning: Disables the handling of rights and restrictions!
333
342
  */
334
343
  async findAndUpdateForce(
335
- filter: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number },
344
+ filter: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number } | FilterArgs,
336
345
  update: PlainObject<UpdateInput>,
337
346
  serviceOptions: ServiceOptions = {},
338
347
  ): Promise<Model[]> {
@@ -346,13 +355,12 @@ export abstract class CrudService<
346
355
  * Warning: Disables the handling of rights and restrictions! The raw data may contain secrets (such as passwords).
347
356
  */
348
357
  async findAndUpdateRaw(
349
- filter: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number },
358
+ filter: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number } | FilterArgs,
350
359
  update: PlainObject<UpdateInput>,
351
360
  serviceOptions: ServiceOptions = {},
352
361
  ): Promise<Model[]> {
353
362
  serviceOptions = serviceOptions || {};
354
- serviceOptions.prepareInput = null;
355
- serviceOptions.prepareOutput = null;
363
+ serviceOptions.raw = true;
356
364
  return this.findAndUpdateForce(filter, update, serviceOptions);
357
365
  }
358
366
 
@@ -360,7 +368,7 @@ export abstract class CrudService<
360
368
  * Find one item via filter
361
369
  */
362
370
  async findOne(
363
- filter?: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions },
371
+ filter?: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions } | FilterArgs,
364
372
  serviceOptions?: ServiceOptions,
365
373
  ): Promise<Model> {
366
374
  // If filter is not instance of FilterArgs a simple form with filterQuery and queryOptions is set
@@ -386,6 +394,9 @@ export abstract class CrudService<
386
394
  if (collation) {
387
395
  find = find.collation(collation);
388
396
  }
397
+ if (serviceOptions?.select) {
398
+ find = find.select(serviceOptions.select);
399
+ }
389
400
  return find.exec();
390
401
  },
391
402
  { input: filter, serviceOptions },
@@ -397,7 +408,7 @@ export abstract class CrudService<
397
408
  * Warning: Disables the handling of rights and restrictions!
398
409
  */
399
410
  async findOneForce(
400
- filter?: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number },
411
+ filter?: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number } | FilterArgs,
401
412
  serviceOptions: ServiceOptions = {},
402
413
  ): Promise<Model> {
403
414
  serviceOptions = serviceOptions || {};
@@ -410,15 +421,22 @@ export abstract class CrudService<
410
421
  * Warning: Disables the handling of rights and restrictions! The raw data may contain secrets (such as passwords).
411
422
  */
412
423
  async findOneRaw(
413
- filter?: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number },
424
+ filter?: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions; samples?: number } | FilterArgs,
414
425
  serviceOptions: ServiceOptions = {},
415
426
  ): Promise<Model> {
416
427
  serviceOptions = serviceOptions || {};
417
- serviceOptions.prepareInput = null;
418
- serviceOptions.prepareOutput = null;
428
+ serviceOptions.raw = true;
419
429
  return this.findOneForce(filter, serviceOptions);
420
430
  }
421
431
 
432
+ /**
433
+ * Get service model to process queries directly
434
+ * See https://mongoosejs.com/docs/api/model.html
435
+ */
436
+ getModel(): MongooseModel<Model & Document> {
437
+ return this.mainDbModel;
438
+ }
439
+
422
440
  /**
423
441
  * CRUD alias for get
424
442
  */
@@ -428,7 +446,7 @@ export abstract class CrudService<
428
446
  * CRUD alias for find
429
447
  */
430
448
  async read(
431
- filter: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions },
449
+ filter: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions } | FilterArgs,
432
450
  serviceOptions?: ServiceOptions
433
451
  ): Promise<Model[]>;
434
452
 
@@ -436,7 +454,7 @@ export abstract class CrudService<
436
454
  * CRUD alias for get or find
437
455
  */
438
456
  async read(
439
- input: string | FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions },
457
+ input: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions } | FilterArgs | string,
440
458
  serviceOptions?: ServiceOptions,
441
459
  ): Promise<Model | Model[]> {
442
460
  if (typeof input === 'string') {
@@ -457,7 +475,7 @@ export abstract class CrudService<
457
475
  * Warning: Disables the handling of rights and restrictions!
458
476
  */
459
477
  async readForce(
460
- filter: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions },
478
+ filter: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions } | FilterArgs,
461
479
  serviceOptions?: ServiceOptions
462
480
  ): Promise<Model[]>;
463
481
 
@@ -466,7 +484,7 @@ export abstract class CrudService<
466
484
  * Warning: Disables the handling of rights and restrictions!
467
485
  */
468
486
  async readForce(
469
- input: string | FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions },
487
+ input: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions } | FilterArgs | string,
470
488
  serviceOptions?: ServiceOptions,
471
489
  ): Promise<Model | Model[]> {
472
490
  if (typeof input === 'string') {
@@ -487,7 +505,7 @@ export abstract class CrudService<
487
505
  * Warning: Disables the handling of rights and restrictions! The raw data may contain secrets (such as passwords).
488
506
  */
489
507
  async readRaw(
490
- filter: FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions },
508
+ filter: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions } | FilterArgs,
491
509
  serviceOptions?: ServiceOptions
492
510
  ): Promise<Model[]>;
493
511
 
@@ -496,7 +514,7 @@ export abstract class CrudService<
496
514
  * Warning: Disables the handling of rights and restrictions! The raw data may contain secrets (such as passwords).
497
515
  */
498
516
  async readRaw(
499
- input: string | FilterArgs | { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions },
517
+ input: { filterQuery?: FilterQuery<any>; queryOptions?: QueryOptions } | FilterArgs | string,
500
518
  serviceOptions?: ServiceOptions,
501
519
  ): Promise<Model | Model[]> {
502
520
  if (typeof input === 'string') {
@@ -518,7 +536,11 @@ export abstract class CrudService<
518
536
  async (data) => {
519
537
  const currentUserId = serviceOptions?.currentUser?.id;
520
538
  const merged = mergePlain(dbObject, data.input, { updatedBy: currentUserId });
521
- return await this.mainDbModel.findByIdAndUpdate(id, merged, { returnDocument: 'after' }).exec();
539
+ const query = this.mainDbModel.findByIdAndUpdate(id, merged, { returnDocument: 'after' });
540
+ if (serviceOptions?.select) {
541
+ query.select(serviceOptions.select);
542
+ }
543
+ return await query.exec();
522
544
  },
523
545
  { dbObject, input, serviceOptions },
524
546
  );
@@ -540,8 +562,7 @@ export abstract class CrudService<
540
562
  */
541
563
  async updateRaw(id: string, input: PlainObject<UpdateInput>, serviceOptions?: ServiceOptions): Promise<Model> {
542
564
  serviceOptions = serviceOptions || {};
543
- serviceOptions.prepareInput = null;
544
- serviceOptions.prepareOutput = null;
565
+ serviceOptions.raw = true;
545
566
  return this.updateForce(id, input, serviceOptions);
546
567
  }
547
568
 
@@ -549,7 +570,11 @@ export abstract class CrudService<
549
570
  * Delete item via ID
550
571
  */
551
572
  async delete(id: string, serviceOptions?: ServiceOptions): Promise<Model> {
552
- const dbObject = await this.mainDbModel.findById(id).exec();
573
+ const query = this.mainDbModel.findById(id);
574
+ if (serviceOptions?.select) {
575
+ query.select(serviceOptions.select);
576
+ }
577
+ const dbObject = await query.exec();
553
578
  if (!dbObject) {
554
579
  throw new NotFoundException(`No ${this.mainModelConstructor.name} found with ID: ${id}`);
555
580
  }
@@ -578,8 +603,7 @@ export abstract class CrudService<
578
603
  */
579
604
  async deleteRaw(id: string, serviceOptions?: ServiceOptions): Promise<Model> {
580
605
  serviceOptions = serviceOptions || {};
581
- serviceOptions.prepareInput = null;
582
- serviceOptions.prepareOutput = null;
606
+ serviceOptions.raw = true;
583
607
  return this.deleteForce(id, serviceOptions);
584
608
  }
585
609
 
@@ -591,11 +615,14 @@ export abstract class CrudService<
591
615
  * @example const users = await this.populateAndProcessQuery<User[]>(User.find({name: {'$regex': 'ma'}}), {...serviceOptions, populate:['contacts'], force: true});
592
616
  */
593
617
  async processQueryOrDocument<T extends CoreModel | CoreModel[] = CoreModel>(
594
- queryOrDocument: Query<unknown, unknown> | Document | Document[],
618
+ queryOrDocument: Document | Document[] | Query<unknown, unknown>,
595
619
  serviceOptions?: ServiceOptions,
596
620
  ): Promise<T> {
597
621
  return this.process(() => {
598
622
  if (queryOrDocument instanceof Query) {
623
+ if (serviceOptions?.select && queryOrDocument.select && typeof queryOrDocument.select === 'function') {
624
+ queryOrDocument.select(serviceOptions.select);
625
+ }
599
626
  return queryOrDocument.exec();
600
627
  }
601
628
  return queryOrDocument;
@@ -1,10 +1,12 @@
1
1
  import { Injectable } from '@nestjs/common';
2
- import nodemailer = require('nodemailer');
3
2
  import { Attachment } from 'nodemailer/lib/mailer';
3
+
4
4
  import { isNonEmptyString, isTrue, returnFalse } from '../helpers/input.helper';
5
5
  import { ConfigService } from './config.service';
6
6
  import { TemplateService } from './template.service';
7
7
 
8
+ import nodemailer = require('nodemailer');
9
+
8
10
  /**
9
11
  * Email service
10
12
  */
@@ -33,7 +35,7 @@ export class EmailService {
33
35
  },
34
36
  ): Promise<any> {
35
37
  // Process config
36
- const { attachments, htmlTemplate, senderName, senderEmail, templateData, textTemplate } = {
38
+ const { attachments, htmlTemplate, senderEmail, senderName, templateData, textTemplate } = {
37
39
  senderEmail: this.configService.getFastButReadOnly('email.defaultSender.email'),
38
40
  senderName: this.configService.getFastButReadOnly('email.defaultSender.name'),
39
41
  ...config,
@@ -71,12 +73,12 @@ export class EmailService {
71
73
 
72
74
  // Send mail
73
75
  return transporter.sendMail({
76
+ attachments,
74
77
  from: `"${senderName}" <${senderEmail}>`,
75
- to: recipients,
78
+ html,
76
79
  subject,
77
80
  text,
78
- html,
79
- attachments,
81
+ to: recipients,
80
82
  });
81
83
  }
82
84
  }
@@ -1,5 +1,6 @@
1
1
  import { HttpException, Injectable } from '@nestjs/common';
2
2
  import Mailjet from 'node-mailjet';
3
+
3
4
  import { ConfigService } from './config.service';
4
5
 
5
6
  /**
@@ -20,24 +21,24 @@ export class MailjetService {
20
21
  subject: string,
21
22
  templateId: number,
22
23
  config: {
23
- senderEmail?: string;
24
- senderName?: string;
25
24
  attachments?: {
25
+ Base64Content: string;
26
26
  ContentID?: string;
27
27
  ContentType: string;
28
28
  Filename: string;
29
- Base64Content: string;
30
29
  }[];
31
- templateData?: { [key: string]: any };
32
30
  sandbox?: boolean;
31
+ senderEmail?: string;
32
+ senderName?: string;
33
+ templateData?: { [key: string]: any };
33
34
  },
34
35
  ) {
35
36
  // Process config
36
- const { senderName, senderEmail, templateData, attachments, sandbox } = {
37
+ const { attachments, sandbox, senderEmail, senderName, templateData } = {
38
+ attachments: null,
39
+ sandbox: false,
37
40
  senderEmail: this.configService.getFastButReadOnly('email.defaultSender.email'),
38
41
  senderName: this.configService.getFastButReadOnly('email.defaultSender.name'),
39
- sandbox: false,
40
- attachments: null,
41
42
  templateData: null,
42
43
  ...config,
43
44
  };
@@ -57,16 +58,16 @@ export class MailjetService {
57
58
  const body = {
58
59
  Messages: [
59
60
  {
61
+ Attachments: attachments,
60
62
  From: {
61
63
  Email: senderEmail,
62
64
  Name: senderName,
63
65
  },
64
- To: to,
66
+ Subject: subject,
65
67
  TemplateID: templateId,
66
68
  TemplateLanguage: true,
69
+ To: to,
67
70
  Variables: templateData,
68
- Subject: subject,
69
- Attachments: attachments,
70
71
  },
71
72
  ],
72
73
  SandboxMode: sandbox,
@@ -89,11 +90,11 @@ export class MailjetService {
89
90
  console.debug(
90
91
  JSON.stringify(
91
92
  {
92
- 'info': 'Mailjet credentials are missing',
93
- 'email.mailjet.api_key_public':
94
- this.configService.getFastButReadOnly('email.mailjet.api_key_public') || 'missing',
95
93
  'email.mailjet.api_key_private':
96
94
  this.configService.getFastButReadOnly('email.mailjet.api_key_private') || 'missing',
95
+ 'email.mailjet.api_key_public':
96
+ this.configService.getFastButReadOnly('email.mailjet.api_key_public') || 'missing',
97
+ 'info': 'Mailjet credentials are missing',
97
98
  'templateData': templateData,
98
99
  },
99
100
  null,
@@ -1,7 +1,8 @@
1
- import fs = require('fs');
2
1
  import { Injectable, OnApplicationBootstrap } from '@nestjs/common';
3
2
  import { InjectConnection } from '@nestjs/mongoose';
4
3
  import { Connection } from 'mongoose';
4
+
5
+ import fs = require('fs');
5
6
  import YumlDiagram = require('yuml-diagram');
6
7
 
7
8
  /**
@@ -1,5 +1,5 @@
1
- import _ = require('lodash');
2
1
  import { Document, Model, Types } from 'mongoose';
2
+
3
3
  import { ProcessType } from '../enums/process-type.enum';
4
4
  import { getStringIds, popAndMap } from '../helpers/db.helper';
5
5
  import { check } from '../helpers/input.helper';
@@ -9,6 +9,8 @@ import { CoreModel } from '../models/core-model.model';
9
9
  import { FieldSelection } from '../types/field-selection.type';
10
10
  import { ConfigService } from './config.service';
11
11
 
12
+ import _ = require('lodash');
13
+
12
14
  /**
13
15
  * Module service class to be extended by concrete module services
14
16
  */
@@ -46,7 +48,7 @@ export abstract class ModuleService<T extends CoreModel = any> {
46
48
  */
47
49
  checkRights(
48
50
  input: any,
49
- currentUser: { id: any; hasRole: (roles: string[]) => boolean },
51
+ currentUser: { hasRole: (roles: string[]) => boolean; id: any },
50
52
  options?: {
51
53
  dbObject?: any;
52
54
  metatype?: any;
@@ -73,31 +75,37 @@ export abstract class ModuleService<T extends CoreModel = any> {
73
75
  serviceFunc: (options?: { [key: string]: any; input?: any; serviceOptions?: ServiceOptions }) => any,
74
76
  options?: {
75
77
  [key: string]: any;
76
- dbObject?: string | Types.ObjectId | any;
77
- outputPath?: string | string[];
78
+ dbObject?: Types.ObjectId | any | string;
78
79
  input?: any;
80
+ outputPath?: string | string[];
79
81
  serviceOptions?: ServiceOptions;
80
82
  },
81
83
  ) {
82
84
  // Configuration with default values
83
85
  const config: {
84
- dbObject: string | Types.ObjectId | any;
85
- outputPath: string | string[];
86
+ dbObject: Types.ObjectId | any | string;
86
87
  input: any;
88
+ outputPath: string | string[];
87
89
  } & ServiceOptions = {
88
90
  checkRights: true,
89
91
  dbObject: options?.dbObject,
90
- outputPath: options?.outputPath,
91
92
  force: false,
92
93
  input: options?.input,
93
- processFieldSelection: {},
94
+ outputPath: options?.outputPath,
94
95
  prepareInput: {},
95
96
  prepareOutput: {},
97
+ processFieldSelection: {},
96
98
  pubSub: true,
97
99
  setCreateOrUpdateUserId: true,
98
100
  ...options?.serviceOptions,
99
101
  };
100
102
 
103
+ // Note raw configuration
104
+ if (config.raw) {
105
+ config.prepareInput = null;
106
+ config.prepareOutput = null;
107
+ }
108
+
101
109
  // Set default for ignoreSelections if not set
102
110
  const ignoreSelections = this.configService?.getFastButReadOnly('ignoreSelectionsForPopulate', true);
103
111
  if (ignoreSelections) {
@@ -256,14 +264,14 @@ export abstract class ModuleService<T extends CoreModel = any> {
256
264
  data: any,
257
265
  fieldsSelection: FieldSelection,
258
266
  options: {
259
- model?: new (...args: any[]) => T;
260
267
  dbModel?: Model<T & Document>;
261
268
  ignoreSelections?: boolean;
269
+ model?: new (...args: any[]) => T;
262
270
  } = {},
263
271
  ) {
264
272
  const config = {
265
- model: this.mainModelConstructor,
266
273
  dbModel: this.mainDbModel,
274
+ model: this.mainModelConstructor,
267
275
  ...options,
268
276
  };
269
277
  return popAndMap(data, fieldsSelection, config.model, config.dbModel, {
@@ -1,10 +1,12 @@
1
- import fs = require('fs');
2
- import { join } from 'path';
3
1
  import { Injectable } from '@nestjs/common';
4
- import ejs = require('ejs');
5
2
  import { TemplateFunction } from 'ejs';
3
+ import { join } from 'path';
4
+
6
5
  import { ConfigService } from './config.service';
7
6
 
7
+ import ejs = require('ejs');
8
+ import fs = require('fs');
9
+
8
10
  /**
9
11
  * Template service
10
12
  */
@@ -1,7 +1,6 @@
1
1
  import { CoreModel } from '../models/core-model.model';
2
2
 
3
3
  export interface CoreModelConstructor<T extends CoreModel> {
4
- new (): T;
5
4
  init(this: new (...args: any[]) => T, ...args: any[]): T;
6
5
  map(
7
6
  this: new (...args: any[]) => T,
@@ -27,4 +26,5 @@ export interface CoreModelConstructor<T extends CoreModel> {
27
26
  mapId?: boolean;
28
27
  }
29
28
  ): T;
29
+ new (): T;
30
30
  }
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Falsy type for anything that is considered false if it occurs in a Boolean context
3
3
  */
4
- export type Falsy = false | 0 | '' | null | undefined;
4
+ export type Falsy = '' | 0 | false | null | undefined;
@@ -1,13 +1,14 @@
1
1
  import { SelectionNode } from 'graphql';
2
2
  import { PopulateOptions } from 'mongoose';
3
+
3
4
  import { ResolveSelector } from '../interfaces/resolve-selector.interface';
4
5
 
5
6
  /**
6
7
  * Field selection to set fields of (populated) result
7
8
  */
8
9
  export type FieldSelection =
9
- | string
10
- | PopulateOptions
11
10
  | (PopulateOptions | string)[]
11
+ | PopulateOptions
12
+ | ResolveSelector
12
13
  | SelectionNode[]
13
- | ResolveSelector;
14
+ | string;
@@ -1,7 +1,7 @@
1
1
  import { Types } from 'mongoose';
2
2
 
3
3
  export type IdsType =
4
- | string
4
+ | ({ _id?: Types.ObjectId | string; id?: Types.ObjectId | string } | Types.ObjectId | string)[]
5
+ | { _id?: Types.ObjectId | string; id?: Types.ObjectId | string }
5
6
  | Types.ObjectId
6
- | { id?: string | Types.ObjectId; _id?: string | Types.ObjectId }
7
- | (string | Types.ObjectId | { id?: string | Types.ObjectId; _id?: string | Types.ObjectId })[];
7
+ | string;
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Promise or direct value
3
3
  */
4
- export type MaybePromise<T = any> = T | Promise<T>;
4
+ export type MaybePromise<T = any> = Promise<T> | T;
@@ -2,5 +2,5 @@
2
2
  * Type for plain inputs with only optional properties
3
3
  */
4
4
  export type PlainInput<T> = {
5
- [P in keyof T]?: Partial<T[P]> | Partial<PlainInput<T[P]>>;
5
+ [P in keyof T]?: Partial<PlainInput<T[P]>> | Partial<T[P]>;
6
6
  };
@@ -3,4 +3,4 @@ import { PopulateOptions } from 'mongoose';
3
3
  /**
4
4
  * Configuration (path or options) for Mongoose populate methode
5
5
  */
6
- export type PopulateConfig = string | string[] | PopulateOptions | (PopulateOptions | string)[];
6
+ export type PopulateConfig = (PopulateOptions | string)[] | PopulateOptions | string | string[];
@@ -3,4 +3,4 @@ import { Types } from 'mongoose';
3
3
  /**
4
4
  * Everything which will be used by getStringIds or getObjectIds (see helpers/db.helper.ts)
5
5
  */
6
- export type StringOrObjectId<T = any> = string | Types.ObjectId | T;
6
+ export type StringOrObjectId<T = any> = T | Types.ObjectId | string;
@@ -1,6 +1,7 @@
1
1
  import { Body, Controller, Get, Param, ParseBoolPipe, Post, Res, UseGuards } from '@nestjs/common';
2
2
  import { Args } from '@nestjs/graphql';
3
3
  import { Response as ResponseType } from 'express';
4
+
4
5
  import { CurrentUser } from '../../common/decorators/current-user.decorator';
5
6
  import { ConfigService } from '../../common/services/config.service';
6
7
  import { AuthGuardStrategy } from './auth-guard-strategy.enum';
@@ -30,7 +31,7 @@ export class CoreAuthController {
30
31
  @Res() res: ResponseType,
31
32
  @Param('allDevices', ParseBoolPipe) allDevices?: boolean,
32
33
  ): Promise<boolean> {
33
- const result = await this.authService.logout(token, { currentUser, allDevices });
34
+ const result = await this.authService.logout(token, { allDevices, currentUser });
34
35
  return this.processCookies(res, result);
35
36
  }
36
37
 
@@ -1,4 +1,5 @@
1
1
  import { Field, ObjectType } from '@nestjs/graphql';
2
+
2
3
  import { CoreModel } from '../../common/models/core-model.model';
3
4
  import { CoreUserModel } from '../user/core-user.model';
4
5