itlab-internal-services 2.15.7 → 2.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/README.md +1 -187
  2. package/dist/classes/document-merger.class.js +2 -3
  3. package/dist/classes/index.d.ts +4 -1
  4. package/dist/classes/index.js +7 -3
  5. package/dist/classes/report-category.class.d.ts +55 -0
  6. package/dist/classes/report-category.class.js +120 -0
  7. package/dist/classes/schema-builder.class.d.ts +75 -0
  8. package/dist/classes/schema-builder.class.js +109 -0
  9. package/dist/classes/task-manager.class.d.ts +71 -0
  10. package/dist/classes/task-manager.class.js +99 -0
  11. package/dist/decorators/{account.decorator.d.ts → authenticated-account.decorator.d.ts} +4 -4
  12. package/dist/decorators/{account.decorator.js → authenticated-account.decorator.js} +8 -10
  13. package/dist/decorators/index.d.ts +1 -1
  14. package/dist/decorators/index.js +1 -1
  15. package/dist/exceptions/authenticated-user-required.exception.d.ts +34 -0
  16. package/dist/exceptions/authenticated-user-required.exception.js +51 -0
  17. package/dist/exceptions/bad-body.exception.d.ts +19 -8
  18. package/dist/exceptions/bad-body.exception.js +26 -10
  19. package/dist/exceptions/bad-parameter.exception.d.ts +23 -8
  20. package/dist/exceptions/bad-parameter.exception.js +41 -18
  21. package/dist/exceptions/duplicate.exception.d.ts +20 -8
  22. package/dist/exceptions/duplicate.exception.js +27 -10
  23. package/dist/exceptions/index.d.ts +1 -0
  24. package/dist/exceptions/index.js +1 -0
  25. package/dist/functions/add-views-likes-virtuals.function.d.ts +15 -0
  26. package/dist/functions/add-views-likes-virtuals.function.js +43 -0
  27. package/dist/functions/create-internal-axios-client.function.js +2 -2
  28. package/dist/functions/index.d.ts +1 -0
  29. package/dist/functions/index.js +3 -1
  30. package/dist/index.d.ts +5 -5
  31. package/dist/index.js +5 -5
  32. package/dist/interceptors/attribute-sanitizer.interceptor.d.ts +68 -0
  33. package/dist/interceptors/attribute-sanitizer.interceptor.js +154 -0
  34. package/dist/interceptors/index.d.ts +1 -0
  35. package/dist/interceptors/index.js +17 -0
  36. package/dist/middleware/http-logging.middleware.d.ts +19 -0
  37. package/dist/middleware/http-logging.middleware.js +50 -0
  38. package/dist/middleware/index.d.ts +1 -0
  39. package/dist/middleware/index.js +17 -0
  40. package/dist/models/account.model.d.ts +23 -0
  41. package/dist/models/account.model.js +59 -0
  42. package/dist/models/index.d.ts +3 -1
  43. package/dist/models/index.js +7 -3
  44. package/dist/{modules/search/models → models}/search-document.model.d.ts +1 -1
  45. package/dist/{modules/search/models → models}/search-document.model.js +1 -1
  46. package/dist/models/{account-entity.model.d.ts → user.model.d.ts} +8 -21
  47. package/dist/models/{account-entity.model.js → user.model.js} +11 -25
  48. package/dist/modules/authentication/authentication-module-options.interface.d.ts +2 -8
  49. package/dist/modules/authentication/authentication-options.parameter.d.ts +4 -0
  50. package/dist/modules/authentication/{inject-auth-options.decorator.js → authentication-options.parameter.js} +5 -2
  51. package/dist/modules/authentication/authentication.module.d.ts +23 -0
  52. package/dist/modules/authentication/authentication.module.js +24 -1
  53. package/dist/modules/authentication/guards/index.d.ts +2 -2
  54. package/dist/modules/authentication/guards/index.js +7 -7
  55. package/dist/modules/authentication/guards/jwt-auth.guard.d.ts +17 -0
  56. package/dist/modules/authentication/guards/jwt-auth.guard.js +67 -0
  57. package/dist/modules/authentication/guards/permissions.guard.d.ts +5 -27
  58. package/dist/modules/authentication/guards/permissions.guard.js +27 -59
  59. package/dist/modules/authentication/guards/public.guard.d.ts +7 -13
  60. package/dist/modules/authentication/guards/public.guard.js +10 -24
  61. package/dist/modules/authentication/guards/service-auth.guard.d.ts +22 -0
  62. package/dist/modules/authentication/guards/service-auth.guard.js +65 -0
  63. package/dist/modules/authentication/index.d.ts +3 -3
  64. package/dist/modules/authentication/index.js +3 -5
  65. package/dist/modules/cache/cache-response.interceptor.d.ts +2 -2
  66. package/dist/modules/cache/cache-response.interceptor.js +2 -2
  67. package/dist/modules/cache/index.d.ts +1 -0
  68. package/dist/modules/cache/index.js +1 -0
  69. package/dist/modules/comment/comment-module-options.interface.d.ts +38 -0
  70. package/dist/modules/comment/comment.controller.d.ts +24 -30
  71. package/dist/modules/comment/comment.controller.js +59 -61
  72. package/dist/modules/comment/comment.module-definition.d.ts +1 -42
  73. package/dist/modules/comment/comment.module-definition.js +1 -2
  74. package/dist/modules/comment/comment.module.d.ts +13 -13
  75. package/dist/modules/comment/comment.module.js +15 -42
  76. package/dist/modules/comment/comment.service.d.ts +27 -37
  77. package/dist/modules/comment/comment.service.js +50 -84
  78. package/dist/modules/comment/index.d.ts +2 -3
  79. package/dist/modules/comment/index.js +16 -7
  80. package/dist/modules/database/database.module.js +2 -5
  81. package/dist/modules/database/index.d.ts +2 -5
  82. package/dist/modules/database/index.js +17 -9
  83. package/dist/modules/index.d.ts +2 -6
  84. package/dist/modules/index.js +2 -6
  85. package/dist/modules/like/index.d.ts +2 -1
  86. package/dist/modules/like/index.js +16 -3
  87. package/dist/modules/like/like-module-options.interface.d.ts +21 -0
  88. package/dist/modules/like/like.controller.d.ts +45 -37
  89. package/dist/modules/like/like.controller.js +117 -102
  90. package/dist/modules/like/like.module-definition.d.ts +1 -17
  91. package/dist/modules/like/like.module-definition.js +1 -2
  92. package/dist/modules/like/like.module.d.ts +12 -12
  93. package/dist/modules/like/like.module.js +14 -37
  94. package/dist/modules/like/like.service.d.ts +31 -27
  95. package/dist/modules/like/like.service.js +42 -35
  96. package/dist/modules/merge/index.d.ts +3 -0
  97. package/dist/modules/merge/index.js +19 -0
  98. package/dist/modules/merge/merge-module-options.interface.d.ts +21 -0
  99. package/dist/modules/merge/merge.controller.d.ts +30 -0
  100. package/dist/modules/merge/merge.controller.js +76 -0
  101. package/dist/modules/merge/merge.module.d.ts +18 -0
  102. package/dist/modules/merge/merge.module.js +41 -0
  103. package/dist/modules/merge/merge.service.interface.d.ts +17 -0
  104. package/dist/modules/services/base-http.service.d.ts +83 -0
  105. package/dist/modules/services/base-http.service.js +124 -0
  106. package/dist/modules/services/base-urls.d.ts +22 -0
  107. package/dist/modules/services/base-urls.js +121 -0
  108. package/dist/modules/services/index.d.ts +4 -0
  109. package/dist/modules/services/index.js +20 -0
  110. package/dist/modules/services/providers/accounts.service.d.ts +52 -0
  111. package/dist/modules/services/providers/accounts.service.js +84 -0
  112. package/dist/modules/services/providers/books.service.d.ts +29 -0
  113. package/dist/modules/services/providers/books.service.js +55 -0
  114. package/dist/modules/services/providers/changelog.service.d.ts +18 -0
  115. package/dist/modules/services/providers/changelog.service.js +43 -0
  116. package/dist/modules/services/providers/comments/comments.service-definition.d.ts +1 -0
  117. package/dist/modules/services/providers/comments/comments.service-definition.js +4 -0
  118. package/dist/modules/services/providers/comments/comments.service.d.ts +60 -0
  119. package/dist/modules/services/providers/comments/comments.service.js +139 -0
  120. package/dist/modules/services/providers/comments/index.d.ts +1 -0
  121. package/dist/{factories → modules/services/providers/comments}/index.js +1 -1
  122. package/dist/modules/services/providers/content/content-return-types.d.ts +19 -0
  123. package/dist/modules/services/providers/content/content-return-types.js +7 -0
  124. package/dist/modules/services/providers/content/content.service-definition.d.ts +1 -0
  125. package/dist/modules/services/providers/content/content.service-definition.js +4 -0
  126. package/dist/modules/services/providers/content/content.service.d.ts +96 -0
  127. package/dist/modules/services/providers/content/content.service.js +231 -0
  128. package/dist/modules/services/providers/content/index.d.ts +2 -0
  129. package/dist/modules/{search/models → services/providers/content}/index.js +1 -1
  130. package/dist/modules/services/providers/demo-hive.service.d.ts +29 -0
  131. package/dist/modules/services/providers/demo-hive.service.js +55 -0
  132. package/dist/modules/services/providers/events.service.d.ts +29 -0
  133. package/dist/modules/services/providers/events.service.js +55 -0
  134. package/dist/modules/services/providers/hackschool.service.d.ts +49 -0
  135. package/dist/modules/services/providers/hackschool.service.js +79 -0
  136. package/dist/modules/services/providers/ideas.service.d.ts +18 -0
  137. package/dist/modules/services/providers/ideas.service.js +43 -0
  138. package/dist/modules/services/providers/index.d.ts +19 -0
  139. package/dist/modules/services/providers/index.js +35 -0
  140. package/dist/modules/services/providers/lunch-roulette.service.d.ts +18 -0
  141. package/dist/modules/services/providers/lunch-roulette.service.js +43 -0
  142. package/dist/modules/services/providers/mail/index.d.ts +3 -0
  143. package/dist/modules/services/providers/mail/index.js +19 -0
  144. package/dist/modules/services/providers/mail/mail-types.d.ts +30 -0
  145. package/dist/modules/services/providers/mail/mail-types.js +22 -0
  146. package/dist/modules/services/providers/mail/mail.service.d.ts +99 -0
  147. package/dist/modules/{mail → services/providers/mail}/mail.service.js +55 -92
  148. package/dist/modules/services/providers/newletter.service.d.ts +29 -0
  149. package/dist/modules/services/providers/newletter.service.js +55 -0
  150. package/dist/modules/services/providers/newsroom.service.d.ts +47 -0
  151. package/dist/modules/services/providers/newsroom.service.js +73 -0
  152. package/dist/modules/services/providers/notification/dtos/schedule-notification.dto.js +2 -0
  153. package/dist/modules/services/providers/notification/index.d.ts +2 -0
  154. package/dist/modules/services/providers/notification/index.js +18 -0
  155. package/dist/modules/services/providers/notification/notification.service-definition.d.ts +1 -0
  156. package/dist/modules/services/providers/notification/notification.service-definition.js +4 -0
  157. package/dist/modules/services/providers/notification/notification.service.d.ts +50 -0
  158. package/dist/modules/services/providers/notification/notification.service.js +130 -0
  159. package/dist/modules/services/providers/pass/dtos/create-guild-member-pass.dto.js +2 -0
  160. package/dist/modules/services/providers/pass/dtos/create-team-member-pass.dto.js +2 -0
  161. package/dist/modules/services/providers/pass/index.d.ts +2 -0
  162. package/dist/modules/services/providers/pass/index.js +18 -0
  163. package/dist/modules/services/providers/pass/pass-types.d.ts +18 -0
  164. package/dist/modules/services/providers/pass/pass-types.js +7 -0
  165. package/dist/modules/{pass → services/providers/pass}/pass.service.d.ts +15 -39
  166. package/dist/modules/{pass → services/providers/pass}/pass.service.js +46 -61
  167. package/dist/modules/services/providers/podcasts.service.d.ts +29 -0
  168. package/dist/modules/services/providers/podcasts.service.js +55 -0
  169. package/dist/modules/services/providers/search/dtos/index-search-document.dto.js +2 -0
  170. package/dist/modules/services/providers/search/index.d.ts +2 -0
  171. package/dist/modules/services/providers/search/index.js +18 -0
  172. package/dist/modules/services/providers/search/search.service-definition.d.ts +1 -0
  173. package/dist/modules/services/providers/search/search.service-definition.js +4 -0
  174. package/dist/modules/services/providers/search/search.service.d.ts +66 -0
  175. package/dist/modules/services/providers/search/search.service.js +171 -0
  176. package/dist/modules/services/providers/team.service.d.ts +29 -0
  177. package/dist/modules/services/providers/team.service.js +55 -0
  178. package/dist/modules/services/providers/tech-radar.service.d.ts +39 -0
  179. package/dist/modules/services/providers/tech-radar.service.js +67 -0
  180. package/dist/modules/services/services-module-options.interface.d.ts +4 -0
  181. package/dist/modules/services/services-module-options.interface.js +2 -0
  182. package/dist/modules/services/services-options.parameter.d.ts +1 -0
  183. package/dist/modules/services/services-options.parameter.js +8 -0
  184. package/dist/modules/services/services.module-definition.d.ts +16 -0
  185. package/dist/modules/services/services.module-definition.js +21 -0
  186. package/dist/modules/services/services.module.d.ts +17 -0
  187. package/dist/modules/services/services.module.js +63 -0
  188. package/dist/pipes/index.d.ts +2 -3
  189. package/dist/pipes/index.js +2 -3
  190. package/dist/pipes/params/hub-id.pipe.d.ts +22 -0
  191. package/dist/pipes/{hub-id.pipe.js → params/hub-id.pipe.js} +14 -17
  192. package/dist/pipes/params/hub-resource.pipe.d.ts +22 -0
  193. package/dist/pipes/{hub-resource.pipe.js → params/hub-resource.pipe.js} +19 -20
  194. package/dist/pipes/params/index.d.ts +3 -0
  195. package/dist/pipes/params/index.js +19 -0
  196. package/dist/pipes/params/mongo-id.pipe.d.ts +15 -0
  197. package/dist/pipes/params/mongo-id.pipe.js +52 -0
  198. package/dist/pipes/queries/index.d.ts +3 -0
  199. package/dist/pipes/queries/index.js +19 -0
  200. package/dist/pipes/queries/mongo-ids.pipe.d.ts +22 -0
  201. package/dist/pipes/queries/mongo-ids.pipe.js +60 -0
  202. package/dist/pipes/queries/optional-boolean.pipe.d.ts +29 -0
  203. package/dist/pipes/queries/optional-boolean.pipe.js +72 -0
  204. package/dist/pipes/queries/optional-include-drafts.pipe.d.ts +28 -0
  205. package/dist/pipes/queries/optional-include-drafts.pipe.js +38 -0
  206. package/dist/properties/content-return-type.property.d.ts +7 -0
  207. package/dist/properties/content-return-type.property.js +22 -0
  208. package/dist/properties/index.d.ts +4 -0
  209. package/dist/properties/index.js +11 -0
  210. package/dist/properties/likeable.properties.d.ts +1 -0
  211. package/dist/properties/likeable.properties.js +66 -0
  212. package/dist/properties/viewable.properties.d.ts +1 -0
  213. package/dist/properties/viewable.properties.js +66 -0
  214. package/dist/swagger/index.d.ts +1 -0
  215. package/dist/swagger/index.js +5 -0
  216. package/dist/swagger/remove-public-route-auth.plugin.d.ts +9 -0
  217. package/dist/swagger/remove-public-route-auth.plugin.js +25 -0
  218. package/dist/swagger/swagger-options.interface.d.ts +14 -0
  219. package/dist/swagger/swagger-options.interface.js +2 -0
  220. package/dist/swagger/swagger.function.d.ts +11 -0
  221. package/dist/swagger/swagger.function.js +47 -0
  222. package/dist/transform/boolean.transform.js +3 -3
  223. package/dist/types/index.d.ts +2 -0
  224. package/dist/types/index.js +18 -0
  225. package/dist/types/likeable.type.d.ts +15 -0
  226. package/dist/types/likeable.type.js +2 -0
  227. package/dist/types/viewable.type.d.ts +15 -0
  228. package/dist/types/viewable.type.js +2 -0
  229. package/package.json +2 -2
  230. package/dist/classes/document-updater.class.d.ts +0 -39
  231. package/dist/classes/document-updater.class.js +0 -57
  232. package/dist/factories/index.d.ts +0 -1
  233. package/dist/factories/virtuals.factory.d.ts +0 -79
  234. package/dist/factories/virtuals.factory.js +0 -171
  235. package/dist/http-logger.middleware.d.ts +0 -12
  236. package/dist/http-logger.middleware.js +0 -43
  237. package/dist/likeable.interface.d.ts +0 -41
  238. package/dist/likeable.interface.js +0 -48
  239. package/dist/modules/authentication/guards/auth.guard.d.ts +0 -36
  240. package/dist/modules/authentication/guards/auth.guard.js +0 -107
  241. package/dist/modules/authentication/guards/internal.guard.d.ts +0 -33
  242. package/dist/modules/authentication/guards/internal.guard.js +0 -72
  243. package/dist/modules/authentication/inject-auth-options.decorator.d.ts +0 -1
  244. package/dist/modules/comment/comment.model.d.ts +0 -29
  245. package/dist/modules/comment/comment.model.js +0 -43
  246. package/dist/modules/content/content.module-definition.d.ts +0 -5
  247. package/dist/modules/content/content.module-definition.js +0 -8
  248. package/dist/modules/content/content.module.d.ts +0 -31
  249. package/dist/modules/content/content.module.js +0 -60
  250. package/dist/modules/content/content.service.d.ts +0 -50
  251. package/dist/modules/content/content.service.js +0 -145
  252. package/dist/modules/content/index.d.ts +0 -3
  253. package/dist/modules/content/index.js +0 -9
  254. package/dist/modules/database/model-service/dbs/hub-account.db.d.ts +0 -28
  255. package/dist/modules/database/model-service/dbs/hub-account.db.js +0 -44
  256. package/dist/modules/database/model-service/dbs/hub-books.db.d.ts +0 -23
  257. package/dist/modules/database/model-service/dbs/hub-books.db.js +0 -45
  258. package/dist/modules/database/model-service/dbs/hub-comments.db.d.ts +0 -29
  259. package/dist/modules/database/model-service/dbs/hub-comments.db.js +0 -68
  260. package/dist/modules/database/model-service/dbs/hub-content.db.d.ts +0 -24
  261. package/dist/modules/database/model-service/dbs/hub-content.db.js +0 -49
  262. package/dist/modules/database/model-service/dbs/hub-demo-hive.db.d.ts +0 -23
  263. package/dist/modules/database/model-service/dbs/hub-demo-hive.db.js +0 -45
  264. package/dist/modules/database/model-service/dbs/hub-events.db.d.ts +0 -24
  265. package/dist/modules/database/model-service/dbs/hub-events.db.js +0 -49
  266. package/dist/modules/database/model-service/dbs/hub-hackschool.db.d.ts +0 -60
  267. package/dist/modules/database/model-service/dbs/hub-hackschool.db.js +0 -106
  268. package/dist/modules/database/model-service/dbs/hub-newsroom.db.d.ts +0 -25
  269. package/dist/modules/database/model-service/dbs/hub-newsroom.db.js +0 -53
  270. package/dist/modules/database/model-service/dbs/hub-podcasts.db.d.ts +0 -23
  271. package/dist/modules/database/model-service/dbs/hub-podcasts.db.js +0 -45
  272. package/dist/modules/database/model-service/dbs/hub-team.db.d.ts +0 -22
  273. package/dist/modules/database/model-service/dbs/hub-team.db.js +0 -41
  274. package/dist/modules/database/model-service/dbs/hub-tech-radar.db.d.ts +0 -42
  275. package/dist/modules/database/model-service/dbs/hub-tech-radar.db.js +0 -81
  276. package/dist/modules/database/model-service/model.service.d.ts +0 -6407
  277. package/dist/modules/database/model-service/model.service.js +0 -136
  278. package/dist/modules/database/populate-service/populate.service.d.ts +0 -73
  279. package/dist/modules/database/populate-service/populate.service.js +0 -163
  280. package/dist/modules/database/service-mapper-service/service-mapper.service.d.ts +0 -32
  281. package/dist/modules/database/service-mapper-service/service-mapper.service.js +0 -73
  282. package/dist/modules/fetch/fetch.module.d.ts +0 -31
  283. package/dist/modules/fetch/fetch.module.js +0 -60
  284. package/dist/modules/fetch/fetch.service.d.ts +0 -153
  285. package/dist/modules/fetch/fetch.service.js +0 -274
  286. package/dist/modules/fetch/index.d.ts +0 -2
  287. package/dist/modules/fetch/index.js +0 -7
  288. package/dist/modules/mail/index.d.ts +0 -4
  289. package/dist/modules/mail/index.js +0 -23
  290. package/dist/modules/mail/mail.module.d.ts +0 -31
  291. package/dist/modules/mail/mail.module.js +0 -60
  292. package/dist/modules/mail/mail.service.d.ts +0 -136
  293. package/dist/modules/notification/index.d.ts +0 -3
  294. package/dist/modules/notification/index.js +0 -22
  295. package/dist/modules/notification/notification.module-definition.d.ts +0 -5
  296. package/dist/modules/notification/notification.module-definition.js +0 -8
  297. package/dist/modules/notification/notification.module.d.ts +0 -34
  298. package/dist/modules/notification/notification.module.js +0 -63
  299. package/dist/modules/notification/notification.service.d.ts +0 -42
  300. package/dist/modules/notification/notification.service.js +0 -100
  301. package/dist/modules/pass/index.d.ts +0 -3
  302. package/dist/modules/pass/index.js +0 -22
  303. package/dist/modules/pass/pass.module.d.ts +0 -32
  304. package/dist/modules/pass/pass.module.js +0 -61
  305. package/dist/modules/search/index.d.ts +0 -4
  306. package/dist/modules/search/index.js +0 -23
  307. package/dist/modules/search/models/index.d.ts +0 -1
  308. package/dist/modules/search/search.module-definition.d.ts +0 -5
  309. package/dist/modules/search/search.module-definition.js +0 -8
  310. package/dist/modules/search/search.module.d.ts +0 -33
  311. package/dist/modules/search/search.module.js +0 -62
  312. package/dist/modules/search/search.service.d.ts +0 -49
  313. package/dist/modules/search/search.service.js +0 -120
  314. package/dist/pipes/hub-id.pipe.d.ts +0 -22
  315. package/dist/pipes/hub-resource.pipe.d.ts +0 -22
  316. package/dist/pipes/mongo-id.pipe.d.ts +0 -14
  317. package/dist/pipes/mongo-id.pipe.js +0 -52
  318. package/dist/swagger.config.d.ts +0 -36
  319. package/dist/swagger.config.js +0 -76
  320. package/dist/viewable.interface.d.ts +0 -41
  321. package/dist/viewable.interface.js +0 -48
  322. /package/dist/modules/{mail/dtos/auth-login-token-mail.dto.js → comment/comment-module-options.interface.js} +0 -0
  323. /package/dist/modules/{mail/dtos/auth-password-reset-mail.dto.js → like/like-module-options.interface.js} +0 -0
  324. /package/dist/modules/{mail/dtos/event-cancel-mail.dto.js → merge/merge-module-options.interface.js} +0 -0
  325. /package/dist/modules/{mail/dtos/event-invite-mail.dto.js → merge/merge.service.interface.js} +0 -0
  326. /package/dist/modules/{mail → services/providers/mail}/dtos/auth-login-token-mail.dto.d.ts +0 -0
  327. /package/dist/modules/{mail/dtos/idea-status-updated-mail.dto.js → services/providers/mail/dtos/auth-login-token-mail.dto.js} +0 -0
  328. /package/dist/modules/{mail → services/providers/mail}/dtos/auth-password-reset-mail.dto.d.ts +0 -0
  329. /package/dist/modules/{mail/dtos/idea-submitted-mail.dto.js → services/providers/mail/dtos/auth-password-reset-mail.dto.js} +0 -0
  330. /package/dist/modules/{mail → services/providers/mail}/dtos/event-cancel-mail.dto.d.ts +0 -0
  331. /package/dist/modules/{mail/dtos/lunch-roulette-cancel-mail.dto.js → services/providers/mail/dtos/event-cancel-mail.dto.js} +0 -0
  332. /package/dist/modules/{mail → services/providers/mail}/dtos/event-invite-mail.dto.d.ts +0 -0
  333. /package/dist/modules/{mail/dtos/lunch-roulette-matched-mail.dto.js → services/providers/mail/dtos/event-invite-mail.dto.js} +0 -0
  334. /package/dist/modules/{mail → services/providers/mail}/dtos/idea-status-updated-mail.dto.d.ts +0 -0
  335. /package/dist/modules/{mail/dtos/lunch-roulette-submitted-mail.dto.js → services/providers/mail/dtos/idea-status-updated-mail.dto.js} +0 -0
  336. /package/dist/modules/{mail → services/providers/mail}/dtos/idea-submitted-mail.dto.d.ts +0 -0
  337. /package/dist/modules/{mail/dtos/lunch-roulette-unmatched-mail.dto.js → services/providers/mail/dtos/idea-submitted-mail.dto.js} +0 -0
  338. /package/dist/modules/{mail → services/providers/mail}/dtos/index.d.ts +0 -0
  339. /package/dist/modules/{mail → services/providers/mail}/dtos/index.js +0 -0
  340. /package/dist/modules/{mail → services/providers/mail}/dtos/lunch-roulette-cancel-mail.dto.d.ts +0 -0
  341. /package/dist/modules/{mail/dtos/newsletter-issue-mail.dto.js → services/providers/mail/dtos/lunch-roulette-cancel-mail.dto.js} +0 -0
  342. /package/dist/modules/{mail → services/providers/mail}/dtos/lunch-roulette-matched-mail.dto.d.ts +0 -0
  343. /package/dist/modules/{mail/dtos/newsletter-subscribed-mail.dto.js → services/providers/mail/dtos/lunch-roulette-matched-mail.dto.js} +0 -0
  344. /package/dist/modules/{mail → services/providers/mail}/dtos/lunch-roulette-submitted-mail.dto.d.ts +0 -0
  345. /package/dist/modules/{mail/dtos/newsletter-unsubscribed-mail.dto.js → services/providers/mail/dtos/lunch-roulette-submitted-mail.dto.js} +0 -0
  346. /package/dist/modules/{mail → services/providers/mail}/dtos/lunch-roulette-unmatched-mail.dto.d.ts +0 -0
  347. /package/dist/modules/{mail/dtos/notification-mail.dto.js → services/providers/mail/dtos/lunch-roulette-unmatched-mail.dto.js} +0 -0
  348. /package/dist/modules/{mail → services/providers/mail}/dtos/newsletter-issue-mail.dto.d.ts +0 -0
  349. /package/dist/modules/{notification/dtos/schedule-notification.dto.js → services/providers/mail/dtos/newsletter-issue-mail.dto.js} +0 -0
  350. /package/dist/modules/{mail → services/providers/mail}/dtos/newsletter-subscribed-mail.dto.d.ts +0 -0
  351. /package/dist/modules/{pass/dtos/create-guild-member-pass.dto.js → services/providers/mail/dtos/newsletter-subscribed-mail.dto.js} +0 -0
  352. /package/dist/modules/{mail → services/providers/mail}/dtos/newsletter-unsubscribed-mail.dto.d.ts +0 -0
  353. /package/dist/modules/{pass/dtos/create-team-member-pass.dto.js → services/providers/mail/dtos/newsletter-unsubscribed-mail.dto.js} +0 -0
  354. /package/dist/modules/{mail → services/providers/mail}/dtos/notification-mail.dto.d.ts +0 -0
  355. /package/dist/modules/{search/dtos/index-search-document.dto.js → services/providers/mail/dtos/notification-mail.dto.js} +0 -0
  356. /package/dist/modules/{mail → services/providers/mail}/models/index.d.ts +0 -0
  357. /package/dist/modules/{mail → services/providers/mail}/models/index.js +0 -0
  358. /package/dist/modules/{mail → services/providers/mail}/models/mail-recipient.model.d.ts +0 -0
  359. /package/dist/modules/{mail → services/providers/mail}/models/mail-recipient.model.js +0 -0
  360. /package/dist/modules/{notification → services/providers/notification}/dtos/index.d.ts +0 -0
  361. /package/dist/modules/{notification → services/providers/notification}/dtos/index.js +0 -0
  362. /package/dist/modules/{notification → services/providers/notification}/dtos/schedule-notification.dto.d.ts +0 -0
  363. /package/dist/modules/{pass → services/providers/pass}/dtos/create-guild-member-pass.dto.d.ts +0 -0
  364. /package/dist/modules/{pass → services/providers/pass}/dtos/create-team-member-pass.dto.d.ts +0 -0
  365. /package/dist/modules/{pass → services/providers/pass}/dtos/index.d.ts +0 -0
  366. /package/dist/modules/{pass → services/providers/pass}/dtos/index.js +0 -0
  367. /package/dist/modules/{search → services/providers/search}/dtos/index-search-document.dto.d.ts +0 -0
  368. /package/dist/modules/{search → services/providers/search}/dtos/index.d.ts +0 -0
  369. /package/dist/modules/{search → services/providers/search}/dtos/index.js +0 -0
  370. /package/dist/{modules/content → properties}/content.property.d.ts +0 -0
  371. /package/dist/{modules/content → properties}/content.property.js +0 -0
@@ -11,123 +11,89 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  return function (target, key) { decorator(target, key, paramIndex); }
13
13
  };
14
- var CommentService_1;
15
14
  Object.defineProperty(exports, "__esModule", { value: true });
16
15
  exports.CommentService = void 0;
17
16
  const common_1 = require("@nestjs/common");
18
17
  const config_1 = require("@nestjs/config");
19
18
  const mongoose_1 = require("@nestjs/mongoose");
20
- const class_validator_1 = require("class-validator");
21
19
  const mongoose_2 = require("mongoose");
22
- const create_internal_axios_client_function_1 = require("../../functions/create-internal-axios-client.function");
23
20
  const authentication_1 = require("../authentication");
21
+ const base_http_service_1 = require("../services/base-http.service");
24
22
  const comment_module_definition_1 = require("./comment.module-definition");
25
23
  /**
26
- * @class CommentService
27
- * @description
28
- * Handles business logic for posting and deleting comments associated with a resource.
29
- * Integrates with external/internal comment services and supports resource ownership validation.
24
+ * CommentService manages persistence and business logic
25
+ * for adding, comments on resource entities.
26
+ *
27
+ * Why: Encapsulates MongoDB operations and ensures consistent handling
28
+ * of comment-related behavior across all resources that support comments.
30
29
  */
31
- let CommentService = CommentService_1 = class CommentService {
30
+ let CommentService = class CommentService extends base_http_service_1.BaseHttpService {
32
31
  /**
33
- * Initializes the CommentService with injected dependencies and constructs
34
- * an axios client for internal comment service communication.
32
+ * Constructs the CommentService with a configured model instance.
35
33
  *
36
- * @param moduleOptions - Configuration for comment handling (resource, model, ownership fields)
37
- * @param connection - Optional Mongoose connection for fetching resource documents
38
- * @param authOptions - Auth options including Kubernetes token for service calls
39
- * @param configService - Global config service for environment settings
34
+ * Why: Using the provided Mongoose connection and model options ensures
35
+ * that comments are tied to the correct resource collection dynamically.
36
+ *
37
+ * @param {CommentModuleOptions} moduleOptions - Config for the commentable resource model.
38
+ * @param {Connection} connection - Mongoose database connection.
40
39
  */
41
- constructor(moduleOptions, connection, authOptions, configService) {
40
+ constructor(moduleOptions, connection, authenticationOptions, configService) {
41
+ super('Comment', [
42
+ 'http://organisation-hub-comments-service.organisation-hub-services.svc.cluster.local:3000/',
43
+ 'https://services.svi-itlab.com/comments/',
44
+ ], authenticationOptions, configService);
42
45
  this.moduleOptions = moduleOptions;
43
46
  this.connection = connection;
44
- this.authOptions = authOptions;
45
- this.configService = configService;
46
- this.logger = new common_1.Logger(CommentService_1.name);
47
- this.resource = this.moduleOptions.resource;
48
- // If a model is provided, bind the commentModel to allow ownership lookup
49
- if (this.moduleOptions.model) {
50
- this.commentModel = this.connection.model(this.moduleOptions.model.name, this.moduleOptions.model.schema);
51
- }
52
- const isProduction = this.configService.get('NODE_ENV') === 'production';
53
- // Construct base URL conditionally based on environment.
54
- const baseUrl = isProduction
55
- ? 'http://organisation-hub-comments-service.organisation-hub-services.svc.cluster.local:3000/internal/'
56
- : 'https://services.svi-itlab.com/comments/internal/';
57
- // Initialize axios instance with k8s token and appropriate URL.
58
- this.axiosInstance = (0, create_internal_axios_client_function_1.createInternalAxiosClient)({
59
- k8sToken: this.authOptions.k8sToken,
60
- baseUrl: `${baseUrl}${this.resource}/`,
61
- });
47
+ const { name, schema } = this.moduleOptions.model;
48
+ this.commentModel = this.connection.model(name, schema);
62
49
  }
63
50
  /**
64
- * Posts a comment to a given resource, with optional ownership metadata attached.
51
+ * Posts a comment to a given resource, optionally attaching ownership metadata.
65
52
  *
66
- * - Validates that the resource exists if a model is defined.
67
- * - Looks up `ownerId` or `ownerIds` for authorization use by downstream services.
53
+ * Why:
54
+ * - Ensures that the resource exists before attempting to save a comment.
55
+ * - Optionally extracts `ownerId` or `ownerIds` for downstream authorization or notifications.
56
+ * - Wraps the internal HTTP call in a promise with proper error handling and logging.
68
57
  *
69
- * @param {string} resourceId - ID of the resource being commented on
70
- * @param {string} accountId - ID of the user posting the comment
71
- * @param {LabContentRichtext} comment - Comment content in rich-text format
72
- * @returns {Promise<Comment>} - Resolves with the saved comment or throws an HTTP exception
58
+ * @param {string} resourceId - MongoDB ObjectId of the resource being commented on.
59
+ * @param {string} accountId - Authenticated user ID posting the comment.
60
+ * @param {LabContentRichtext} richtext - Comment content in rich-text format.
61
+ * @returns {Promise<LabComment>} Resolves with the saved comment or throws an HTTP exception.
62
+ * @throws {NotFoundException} If the resource does not exist.
63
+ * @throws {HttpException} If the internal service call fails.
73
64
  */
74
- async postComment(resourceId, accountId, comment) {
75
- var _a, _b, _c;
76
- // Exit early if no model is defined (e.g., management context)
77
- if (!(0, class_validator_1.isDefined)(this.commentModel)) {
78
- this.logger.error('Kommentare können nicht vom Management aus erstellt werden');
79
- return;
80
- }
81
- // Ensure the referenced resource exists before allowing comments
82
- const resourceDoc = await this.commentModel.findOne({ _id: resourceId });
83
- if (!resourceDoc) {
65
+ async postComment(resourceId, accountId, richtext) {
66
+ const resourceType = this.commentModel.name.toLowerCase();
67
+ // Verify that the resource exists before posting a comment.
68
+ const resource = await this.commentModel.findOne({ _id: resourceId });
69
+ if (!resource) {
70
+ this.logger.error(`Cannot post comment: ${resourceType} ${resourceId} not found`);
84
71
  throw new common_1.NotFoundException('Kommentar konnte nicht erstellt werden');
85
72
  }
86
- // Optionally extract ownerId or ownerIds from the resource document
87
- const { ownerIdField, ownerIdsField } = this.moduleOptions;
88
- const ownerId = ownerIdField ? resourceDoc[ownerIdField] : undefined;
89
- const ownerIds = ownerIdsField ? resourceDoc[ownerIdsField] : undefined;
90
- this.logger.log(`Posting comment for ${this.resource} (${resourceId}) by account ${accountId}`);
73
+ // Extract ownership metadata if configured for downstream use.
74
+ const ownerId = this.moduleOptions.ownerIdField ? resource[this.moduleOptions.ownerIdField] : undefined;
75
+ const ownerIds = this.moduleOptions.ownerIdsField ? resource[this.moduleOptions.ownerIdsField] : undefined;
76
+ const endpoint = `internal/${this.moduleOptions.resource}/${resourceId}/${accountId}`;
77
+ this.logger.log(`Account ${accountId} is posting a comment on ${resourceType} resource ${resourceId}`);
91
78
  try {
92
- const response = await this.axiosInstance.post(`${resourceId}/${accountId}`, comment, {
79
+ const { data } = await this.client.post(endpoint, richtext, {
93
80
  params: { ownerId, ownerIds },
94
81
  });
95
- this.logger.log(`Comment for ${this.resource} (${resourceId}) posted`);
96
- return response.data;
82
+ this.logger.log(`Account ${accountId} successfully posted a comment on ${resourceType} resource ${resourceId}`);
83
+ return data;
97
84
  }
98
85
  catch (error) {
99
- const axiosError = error;
100
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
101
- this.logger.error(`Couldn't post comment for ${this.resource} (${resourceId}): ${(_a = axiosError.response) === null || _a === void 0 ? void 0 : _a.data}`);
102
- throw new common_1.HttpException(((_b = axiosError.response) === null || _b === void 0 ? void 0 : _b.data) || 'Internal error', ((_c = axiosError.response) === null || _c === void 0 ? void 0 : _c.status) || 500);
86
+ const { status, data, message } = this.parseError(error);
87
+ this.logger.error(`Account ${accountId} failed to post comment on ${resourceType} resource ${resourceId}: ${message}`);
88
+ throw new common_1.HttpException(data, status);
103
89
  }
104
90
  }
105
- /**
106
- * Deletes all comments associated with the specified resource.
107
- *
108
- * - Primarily used for cleanup during resource deletion.
109
- * - Logs success or failure, but does not throw exceptions on error.
110
- *
111
- * @param {string} resourceId - ID of the resource whose comments should be deleted
112
- * @returns {void}
113
- */
114
- delete(resourceId) {
115
- this.logger.log(`Deleting all comments for ${this.resource} (${resourceId})`);
116
- this.axiosInstance
117
- .delete(resourceId)
118
- .then(() => {
119
- this.logger.log(`All comments for ${this.resource} (${resourceId}) deleted`);
120
- })
121
- .catch(({ response }) => {
122
- this.logger.error(`Couldn't delete all comments for ${this.resource} (${resourceId}): ${JSON.stringify(response === null || response === void 0 ? void 0 : response.data)}`);
123
- });
124
- }
125
91
  };
126
92
  exports.CommentService = CommentService;
127
- exports.CommentService = CommentService = CommentService_1 = __decorate([
93
+ exports.CommentService = CommentService = __decorate([
128
94
  (0, common_1.Injectable)(),
129
95
  __param(0, (0, common_1.Inject)(comment_module_definition_1.COMMENT_MODULE_OPTIONS_TOKEN)),
130
96
  __param(1, (0, mongoose_1.InjectConnection)()),
131
- __param(2, (0, authentication_1.InjectAuthOptions)()),
97
+ __param(2, (0, authentication_1.InjectAuthenticationOptions)()),
132
98
  __metadata("design:paramtypes", [Object, mongoose_2.Connection, Object, config_1.ConfigService])
133
99
  ], CommentService);
@@ -1,3 +1,2 @@
1
- export { Comment } from './comment.model';
2
- export { CommentModule } from './comment.module';
3
- export { CommentService } from './comment.service';
1
+ export * from './comment-module-options.interface';
2
+ export * from './comment.module';
@@ -1,9 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CommentService = exports.CommentModule = exports.Comment = void 0;
4
- var comment_model_1 = require("./comment.model");
5
- Object.defineProperty(exports, "Comment", { enumerable: true, get: function () { return comment_model_1.Comment; } });
6
- var comment_module_1 = require("./comment.module");
7
- Object.defineProperty(exports, "CommentModule", { enumerable: true, get: function () { return comment_module_1.CommentModule; } });
8
- var comment_service_1 = require("./comment.service");
9
- Object.defineProperty(exports, "CommentService", { enumerable: true, get: function () { return comment_service_1.CommentService; } });
17
+ __exportStar(require("./comment-module-options.interface"), exports);
18
+ __exportStar(require("./comment.module"), exports);
@@ -16,9 +16,6 @@ const mongoose_1 = require("@nestjs/mongoose");
16
16
  const mongoose_2 = __importDefault(require("mongoose"));
17
17
  const database_liveness_controller_1 = require("./database.liveness-controller");
18
18
  const lock_service_1 = require("./lock-service/lock.service");
19
- const model_service_1 = require("./model-service/model.service");
20
- const populate_service_1 = require("./populate-service/populate.service");
21
- const service_mapper_service_1 = require("./service-mapper-service/service-mapper.service");
22
19
  /**
23
20
  * DatabaseModule centralizes all database-related configuration and services.
24
21
  * It wraps Mongoose integration, model registration, liveness health checks,
@@ -90,8 +87,8 @@ let DatabaseModule = DatabaseModule_1 = class DatabaseModule {
90
87
  exports.DatabaseModule = DatabaseModule;
91
88
  exports.DatabaseModule = DatabaseModule = DatabaseModule_1 = __decorate([
92
89
  (0, common_1.Module)({
93
- providers: [model_service_1.ModelService, populate_service_1.PopulateService, service_mapper_service_1.ServiceMapperService, lock_service_1.LockService],
94
- exports: [model_service_1.ModelService, populate_service_1.PopulateService, service_mapper_service_1.ServiceMapperService, lock_service_1.LockService],
90
+ providers: [lock_service_1.LockService],
91
+ exports: [lock_service_1.LockService],
95
92
  controllers: [database_liveness_controller_1.DatabaseLivenessProbeController],
96
93
  })
97
94
  ], DatabaseModule);
@@ -1,6 +1,3 @@
1
- export { DatabaseModuleOptions } from './database-module-options.interface';
2
- export { DatabaseModule } from './database.module';
1
+ export * from './database-module-options.interface';
2
+ export * from './database.module';
3
3
  export { LockService } from './lock-service/lock.service';
4
- export { ModelService } from './model-service/model.service';
5
- export { PopulateService } from './populate-service/populate.service';
6
- export { ServiceMapperService } from './service-mapper-service/service-mapper.service';
@@ -1,13 +1,21 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ServiceMapperService = exports.PopulateService = exports.ModelService = exports.LockService = exports.DatabaseModule = void 0;
4
- var database_module_1 = require("./database.module");
5
- Object.defineProperty(exports, "DatabaseModule", { enumerable: true, get: function () { return database_module_1.DatabaseModule; } });
17
+ exports.LockService = void 0;
18
+ __exportStar(require("./database-module-options.interface"), exports);
19
+ __exportStar(require("./database.module"), exports);
6
20
  var lock_service_1 = require("./lock-service/lock.service");
7
21
  Object.defineProperty(exports, "LockService", { enumerable: true, get: function () { return lock_service_1.LockService; } });
8
- var model_service_1 = require("./model-service/model.service");
9
- Object.defineProperty(exports, "ModelService", { enumerable: true, get: function () { return model_service_1.ModelService; } });
10
- var populate_service_1 = require("./populate-service/populate.service");
11
- Object.defineProperty(exports, "PopulateService", { enumerable: true, get: function () { return populate_service_1.PopulateService; } });
12
- var service_mapper_service_1 = require("./service-mapper-service/service-mapper.service");
13
- Object.defineProperty(exports, "ServiceMapperService", { enumerable: true, get: function () { return service_mapper_service_1.ServiceMapperService; } });
@@ -1,11 +1,7 @@
1
1
  export * from './authentication';
2
2
  export * from './cache';
3
3
  export * from './comment';
4
- export * from './content';
5
4
  export * from './database';
6
- export * from './fetch';
7
5
  export * from './like';
8
- export * from './mail';
9
- export * from './notification';
10
- export * from './pass';
11
- export * from './search';
6
+ export * from './merge';
7
+ export * from './services';
@@ -17,11 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./authentication"), exports);
18
18
  __exportStar(require("./cache"), exports);
19
19
  __exportStar(require("./comment"), exports);
20
- __exportStar(require("./content"), exports);
21
20
  __exportStar(require("./database"), exports);
22
- __exportStar(require("./fetch"), exports);
23
21
  __exportStar(require("./like"), exports);
24
- __exportStar(require("./mail"), exports);
25
- __exportStar(require("./notification"), exports);
26
- __exportStar(require("./pass"), exports);
27
- __exportStar(require("./search"), exports);
22
+ __exportStar(require("./merge"), exports);
23
+ __exportStar(require("./services"), exports);
@@ -1 +1,2 @@
1
- export { LikeModule } from './like.module';
1
+ export * from './like-module-options.interface';
2
+ export * from './like.module';
@@ -1,5 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LikeModule = void 0;
4
- var like_module_1 = require("./like.module");
5
- Object.defineProperty(exports, "LikeModule", { enumerable: true, get: function () { return like_module_1.LikeModule; } });
17
+ __exportStar(require("./like-module-options.interface"), exports);
18
+ __exportStar(require("./like.module"), exports);
@@ -0,0 +1,21 @@
1
+ import { ModelDefinition } from '@nestjs/mongoose';
2
+ /**
3
+ * Module options for configuring and dynamically registering the LikeModule.
4
+ *
5
+ * This allows developers to specify the resource model that supports "likes"
6
+ * and optionally provide a custom route suffix. The modular design ensures
7
+ * consistent, reusable like functionality across multiple resource types
8
+ * (e.g. News, Events, Demos).
9
+ */
10
+ export type LikeModuleOptions = {
11
+ /**
12
+ * Mongoose model definition representing the resource type
13
+ * that can receive likes.
14
+ */
15
+ model: ModelDefinition;
16
+ /**
17
+ * Suffix used to customize the controller route.
18
+ * For example, setting this to "news" will expose routes like `/like/news/:id`.
19
+ */
20
+ routeSuffix: string;
21
+ };
@@ -1,41 +1,49 @@
1
1
  import { LikeService } from './like.service';
2
2
  /**
3
- * LikeController handles all HTTP requests related to "like" interactions on resources.
3
+ * Factory function for creating a LikeController bound to a specific route suffix.
4
4
  *
5
- * It provides endpoints for users to add a like, remove a like, and check if they have liked a resource.
6
- * Authentication is enforced via JWT to ensure only authorized users can interact with these endpoints.
7
- * Resource IDs are validated as MongoDB ObjectIds to maintain data integrity.
5
+ * Why: Instead of writing separate controllers for each resource type,
6
+ * we generate one dynamically. This ensures DRY principles while still
7
+ * supporting custom routes (e.g. `/like/news` or `/like/event`).
8
+ *
9
+ * @param {string} [routeSuffix] - Suffix appended to the "like" route.
10
+ * @returns A dynamically generated controller class.
8
11
  */
9
- export declare class LikeController {
10
- private readonly likeService;
11
- /**
12
- * Initializes LikeController with LikeService dependency.
13
- *
14
- * @param {LikeService} likeService - Service handling like operations.
15
- */
16
- constructor(likeService: LikeService);
17
- /**
18
- * Adds the authenticated user's like to the specified resource.
19
- *
20
- * @param {string} resourceId - MongoDB ObjectId of the resource to be liked.
21
- * @param {string} accountId - The ID of the authenticated account performing the like.
22
- * @returns {Promise<number>} The updated total number of likes after addition.
23
- */
24
- addLikeToResource(resourceId: string, accountId: string): Promise<number>;
25
- /**
26
- * Removes the authenticated user's like from the specified resource.
27
- *
28
- * @param {string} resourceId - MongoDB ObjectId of the resource to unlike.
29
- * @param {string} accountId - The ID of the authenticated account removing the like.
30
- * @returns {Promise<number>} The updated total number of likes after removal.
31
- */
32
- removeLikeFromResource(resourceId: string, accountId: string): Promise<number>;
33
- /**
34
- * Checks if the authenticated user has liked the given resource.
35
- *
36
- * @param {string} resourceId - MongoDB ObjectId of the resource.
37
- * @param {string} accountId - The ID of the authenticated account to check.
38
- * @returns {Promise<boolean>} True if the user has liked the resource, false otherwise.
39
- */
40
- isResourceLikedByUser(resourceId: string, accountId: string): Promise<boolean>;
41
- }
12
+ export declare function createLikeController(routeSuffix: string): {
13
+ new (likeService: LikeService): {
14
+ readonly likeService: LikeService;
15
+ /**
16
+ * Adds the authenticated user's like to a given resource.
17
+ *
18
+ * Why: Prevents duplicate likes using `$addToSet`,
19
+ * ensuring idempotency of repeated requests.
20
+ *
21
+ * @param {string} resourceId - The MongoDB ObjectId of the resource.
22
+ * @param {string} accountId - The authenticated account performing the like.
23
+ * @returns {Promise<number>} The updated like count.
24
+ */
25
+ addLikeToResource(resourceId: string, accountId: string): Promise<number>;
26
+ /**
27
+ * Removes the authenticated user's like from a given resource.
28
+ *
29
+ * Why: Uses `$pull` to ensure the users ID is removed only if present,
30
+ * maintaining database consistency without errors.
31
+ *
32
+ * @param {string} resourceId - The MongoDB ObjectId of the resource.
33
+ * @param {string} accountId - The authenticated account removing the like.
34
+ * @returns {Promise<number>} The updated like count.
35
+ */
36
+ removeLikeFromResource(resourceId: string, accountId: string): Promise<number>;
37
+ /**
38
+ * Determines whether the authenticated user has liked a given resource.
39
+ *
40
+ * Why: Useful for rendering UI states (e.g. "Like" vs. "Unlike" buttons)
41
+ * without fetching all likes.
42
+ *
43
+ * @param {string} resourceId - The MongoDB ObjectId of the resource.
44
+ * @param {string} accountId - The authenticated account to check.
45
+ * @returns {Promise<boolean>} True if the resource is liked by the user.
46
+ */
47
+ isResourceLikedByUser(resourceId: string, accountId: string): Promise<boolean>;
48
+ };
49
+ };