serene-core-server 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/dist/apollo/resolvers/mutations/mailing-lists.d.ts +11 -0
  2. package/dist/apollo/resolvers/mutations/mailing-lists.js +30 -0
  3. package/dist/apollo/resolvers/mutations/user-preferences.d.ts +13 -0
  4. package/dist/apollo/resolvers/mutations/user-preferences.js +31 -0
  5. package/dist/apollo/resolvers/mutations/users.d.ts +28 -0
  6. package/dist/apollo/resolvers/mutations/users.js +44 -0
  7. package/dist/apollo/resolvers/queries/access.d.ts +11 -0
  8. package/dist/apollo/resolvers/queries/access.js +25 -0
  9. package/dist/apollo/resolvers/queries/profile.d.ts +11 -0
  10. package/dist/apollo/resolvers/queries/profile.js +25 -0
  11. package/dist/apollo/resolvers/queries/quotas.d.ts +21 -0
  12. package/dist/apollo/resolvers/queries/quotas.js +25 -0
  13. package/dist/apollo/resolvers/queries/tech.d.ts +5 -0
  14. package/dist/apollo/resolvers/queries/tech.js +35 -0
  15. package/dist/apollo/resolvers/queries/user-preferences.d.ts +5 -0
  16. package/dist/apollo/resolvers/queries/user-preferences.js +33 -0
  17. package/dist/apollo/resolvers/queries/users.d.ts +15 -0
  18. package/dist/apollo/resolvers/queries/users.js +28 -0
  19. package/dist/apollo/resolvers/resolvers.d.ts +20 -0
  20. package/dist/apollo/resolvers/resolvers.js +38 -0
  21. package/dist/apollo/typedefs/typedefs.d.ts +1 -0
  22. package/dist/apollo/typedefs/typedefs.js +142 -0
  23. package/dist/index.d.ts +52 -0
  24. package/dist/index.js +68 -0
  25. package/dist/models/chat/chat-message-created-model.d.ts +17 -0
  26. package/dist/models/chat/chat-message-created-model.js +113 -0
  27. package/dist/models/chat/chat-message-model.d.ts +44 -0
  28. package/dist/models/chat/chat-message-model.js +523 -0
  29. package/dist/models/chat/chat-participant-model.d.ts +39 -0
  30. package/dist/models/chat/chat-participant-model.js +211 -0
  31. package/dist/models/chat/chat-session-model.d.ts +92 -0
  32. package/dist/models/chat/chat-session-model.js +301 -0
  33. package/dist/models/chat/chat-settings-model.d.ts +87 -0
  34. package/dist/models/chat/chat-settings-model.js +261 -0
  35. package/dist/models/feature-flags/feature-flag-model.d.ts +40 -0
  36. package/dist/models/feature-flags/feature-flag-model.js +164 -0
  37. package/dist/models/instances/instance-model.d.ts +93 -0
  38. package/dist/models/instances/instance-model.js +432 -0
  39. package/dist/models/instances/instance-setting-model.d.ts +39 -0
  40. package/dist/models/instances/instance-setting-model.js +193 -0
  41. package/dist/models/mailing-lists/mailing-list-model.d.ts +34 -0
  42. package/dist/models/mailing-lists/mailing-list-model.js +154 -0
  43. package/dist/models/mailing-lists/mailing-list-subscriber-model.d.ts +36 -0
  44. package/dist/models/mailing-lists/mailing-list-subscriber-model.js +152 -0
  45. package/dist/models/quotas/resource-quota-total-model.d.ts +46 -0
  46. package/dist/models/quotas/resource-quota-total-model.js +200 -0
  47. package/dist/models/quotas/resource-quota-usage-model.d.ts +51 -0
  48. package/dist/models/quotas/resource-quota-usage-model.js +181 -0
  49. package/dist/models/tech/rate-limited-api-event-model.d.ts +25 -0
  50. package/dist/models/tech/rate-limited-api-event-model.js +161 -0
  51. package/dist/models/tech/rate-limited-api-model.d.ts +21 -0
  52. package/dist/models/tech/rate-limited-api-model.js +141 -0
  53. package/dist/models/tech/tech-model.d.ts +44 -0
  54. package/dist/models/tech/tech-model.js +268 -0
  55. package/dist/models/tech/tech-provider-api-key-model.d.ts +43 -0
  56. package/dist/models/tech/tech-provider-api-key-model.js +224 -0
  57. package/dist/models/tech/tech-provider-model.d.ts +28 -0
  58. package/dist/models/tech/tech-provider-model.js +197 -0
  59. package/dist/models/users/external-user-integration-model.d.ts +36 -0
  60. package/dist/models/users/external-user-integration-model.js +196 -0
  61. package/dist/models/users/user-error-model.d.ts +54 -0
  62. package/dist/models/users/user-error-model.js +173 -0
  63. package/dist/models/users/user-error-summary-model.d.ts +45 -0
  64. package/dist/models/users/user-error-summary-model.js +172 -0
  65. package/dist/models/users/user-group-member-model.d.ts +41 -0
  66. package/dist/models/users/user-group-member-model.js +193 -0
  67. package/dist/models/users/user-group-model.d.ts +27 -0
  68. package/dist/models/users/user-group-model.js +146 -0
  69. package/dist/models/users/user-model.d.ts +46 -0
  70. package/dist/models/users/user-model.js +153 -0
  71. package/dist/models/users/user-preference-model.d.ts +60 -0
  72. package/dist/models/users/user-preference-model.js +228 -0
  73. package/dist/models/users/user-profile-model.d.ts +58 -0
  74. package/dist/models/users/user-profile-model.js +173 -0
  75. package/dist/prisma.config.d.ts +3 -0
  76. package/dist/prisma.config.js +13 -0
  77. package/dist/services/access/access-service.d.ts +12 -0
  78. package/dist/services/access/access-service.js +44 -0
  79. package/dist/services/access/encrypt-service.d.ts +13 -0
  80. package/dist/services/access/encrypt-service.js +84 -0
  81. package/dist/services/api-usage/api-usage-base-service.d.ts +15 -0
  82. package/dist/services/api-usage/api-usage-base-service.js +75 -0
  83. package/dist/services/console/service.d.ts +7 -0
  84. package/dist/services/console/service.js +70 -0
  85. package/dist/services/db/pg/pg-estimate-size-service.d.ts +16 -0
  86. package/dist/services/db/pg/pg-estimate-size-service.js +90 -0
  87. package/dist/services/files/types.d.ts +6 -0
  88. package/dist/services/files/types.js +2 -0
  89. package/dist/services/files/walk-dir-service.d.ts +8 -0
  90. package/dist/services/files/walk-dir-service.js +94 -0
  91. package/dist/services/locale/countries.d.ts +6 -0
  92. package/dist/services/locale/countries.js +484 -0
  93. package/dist/services/mailing-lists/mailing-list-subscriber-service.d.ts +14 -0
  94. package/dist/services/mailing-lists/mailing-list-subscriber-service.js +45 -0
  95. package/dist/services/process/sleep.d.ts +2 -0
  96. package/dist/services/process/sleep.js +10 -0
  97. package/dist/services/quotas/mutate-service.d.ts +5 -0
  98. package/dist/services/quotas/mutate-service.js +54 -0
  99. package/dist/services/quotas/query-service.d.ts +27 -0
  100. package/dist/services/quotas/query-service.js +137 -0
  101. package/dist/services/quotas/utils-service.d.ts +4 -0
  102. package/dist/services/quotas/utils-service.js +28 -0
  103. package/dist/services/tech/tech-provider-mutate-service.d.ts +7 -0
  104. package/dist/services/tech/tech-provider-mutate-service.js +142 -0
  105. package/dist/services/tech/tech-query-service.d.ts +9 -0
  106. package/dist/services/tech/tech-query-service.js +77 -0
  107. package/dist/services/user-preference/service.d.ts +10 -0
  108. package/dist/services/user-preference/service.js +70 -0
  109. package/dist/services/users/external-user-integration-service.d.ts +9 -0
  110. package/dist/services/users/external-user-integration-service.js +42 -0
  111. package/dist/services/users/profile-service.d.ts +40 -0
  112. package/dist/services/users/profile-service.js +408 -0
  113. package/dist/services/users/service.d.ts +64 -0
  114. package/dist/services/users/service.js +187 -0
  115. package/dist/services/users/user-error-service.d.ts +4 -0
  116. package/dist/services/users/user-error-service.js +42 -0
  117. package/dist/services/users/users-group-service.d.ts +16 -0
  118. package/dist/services/users/users-group-service.js +68 -0
  119. package/dist/services/utils/string-utils-service.d.ts +5 -0
  120. package/dist/services/utils/string-utils-service.js +41 -0
  121. package/dist/src/apollo/resolvers/mutations/mailing-lists.d.ts +11 -0
  122. package/dist/src/apollo/resolvers/mutations/mailing-lists.js +19 -0
  123. package/dist/src/apollo/resolvers/mutations/user-preferences.d.ts +13 -0
  124. package/dist/src/apollo/resolvers/mutations/user-preferences.js +20 -0
  125. package/dist/src/apollo/resolvers/mutations/users.d.ts +28 -0
  126. package/dist/src/apollo/resolvers/mutations/users.js +33 -0
  127. package/dist/src/apollo/resolvers/queries/access.d.ts +11 -0
  128. package/dist/src/apollo/resolvers/queries/access.js +14 -0
  129. package/dist/src/apollo/resolvers/queries/profile.d.ts +11 -0
  130. package/dist/src/apollo/resolvers/queries/profile.js +14 -0
  131. package/dist/src/apollo/resolvers/queries/quotas.d.ts +21 -0
  132. package/dist/src/apollo/resolvers/queries/quotas.js +14 -0
  133. package/dist/src/apollo/resolvers/queries/tech.d.ts +5 -0
  134. package/dist/src/apollo/resolvers/queries/tech.js +24 -0
  135. package/dist/src/apollo/resolvers/queries/user-preferences.d.ts +5 -0
  136. package/dist/src/apollo/resolvers/queries/user-preferences.js +22 -0
  137. package/dist/src/apollo/resolvers/queries/users.d.ts +15 -0
  138. package/dist/src/apollo/resolvers/queries/users.js +17 -0
  139. package/dist/src/apollo/typedefs/typedefs.d.ts +1 -0
  140. package/dist/src/apollo/typedefs/typedefs.js +139 -0
  141. package/dist/src/db.d.ts +3 -0
  142. package/dist/src/db.js +11 -0
  143. package/dist/src/index.d.ts +52 -0
  144. package/dist/src/index.js +52 -0
  145. package/dist/src/models/chat/chat-message-created-model.d.ts +17 -0
  146. package/dist/src/models/chat/chat-message-created-model.js +92 -0
  147. package/dist/src/models/chat/chat-message-model.d.ts +44 -0
  148. package/dist/src/models/chat/chat-message-model.js +484 -0
  149. package/dist/src/models/chat/chat-participant-model.d.ts +39 -0
  150. package/dist/src/models/chat/chat-participant-model.js +178 -0
  151. package/dist/src/models/chat/chat-session-model.d.ts +92 -0
  152. package/dist/src/models/chat/chat-session-model.js +266 -0
  153. package/dist/src/models/chat/chat-settings-model.d.ts +87 -0
  154. package/dist/src/models/chat/chat-settings-model.js +230 -0
  155. package/dist/src/models/feature-flags/feature-flag-model.d.ts +40 -0
  156. package/dist/src/models/feature-flags/feature-flag-model.js +137 -0
  157. package/dist/src/models/instances/instance-model.d.ts +100 -0
  158. package/dist/src/models/instances/instance-model.js +466 -0
  159. package/dist/src/models/instances/instance-setting-model.d.ts +39 -0
  160. package/dist/src/models/instances/instance-setting-model.js +164 -0
  161. package/dist/src/models/mailing-lists/mailing-list-model.d.ts +34 -0
  162. package/dist/src/models/mailing-lists/mailing-list-model.js +127 -0
  163. package/dist/src/models/mailing-lists/mailing-list-subscriber-model.d.ts +36 -0
  164. package/dist/src/models/mailing-lists/mailing-list-subscriber-model.js +127 -0
  165. package/dist/src/models/quotas/resource-quota-total-model.d.ts +46 -0
  166. package/dist/src/models/quotas/resource-quota-total-model.js +170 -0
  167. package/dist/src/models/quotas/resource-quota-usage-model.d.ts +51 -0
  168. package/dist/src/models/quotas/resource-quota-usage-model.js +151 -0
  169. package/dist/src/models/tech/rate-limited-api-event-model.d.ts +25 -0
  170. package/dist/src/models/tech/rate-limited-api-event-model.js +134 -0
  171. package/dist/src/models/tech/rate-limited-api-model.d.ts +21 -0
  172. package/dist/src/models/tech/rate-limited-api-model.js +116 -0
  173. package/dist/src/models/tech/tech-model.d.ts +44 -0
  174. package/dist/src/models/tech/tech-model.js +239 -0
  175. package/dist/src/models/tech/tech-provider-api-key-model.d.ts +43 -0
  176. package/dist/src/models/tech/tech-provider-api-key-model.js +195 -0
  177. package/dist/src/models/tech/tech-provider-model.d.ts +28 -0
  178. package/dist/src/models/tech/tech-provider-model.js +170 -0
  179. package/dist/src/models/users/external-user-integration-model.d.ts +36 -0
  180. package/dist/src/models/users/external-user-integration-model.js +167 -0
  181. package/dist/src/models/users/user-error-model.d.ts +54 -0
  182. package/dist/src/models/users/user-error-model.js +146 -0
  183. package/dist/src/models/users/user-error-summary-model.d.ts +45 -0
  184. package/dist/src/models/users/user-error-summary-model.js +145 -0
  185. package/dist/src/models/users/user-group-member-model.d.ts +41 -0
  186. package/dist/src/models/users/user-group-member-model.js +164 -0
  187. package/dist/src/models/users/user-group-model.d.ts +27 -0
  188. package/dist/src/models/users/user-group-model.js +121 -0
  189. package/dist/src/models/users/user-model.d.ts +46 -0
  190. package/dist/src/models/users/user-model.js +126 -0
  191. package/dist/src/models/users/user-preference-model.d.ts +60 -0
  192. package/dist/src/models/users/user-preference-model.js +197 -0
  193. package/dist/src/models/users/user-profile-model.d.ts +58 -0
  194. package/dist/src/models/users/user-profile-model.js +146 -0
  195. package/dist/src/services/access/access-service.d.ts +12 -0
  196. package/dist/src/services/access/access-service.js +27 -0
  197. package/dist/src/services/access/encrypt-service.d.ts +13 -0
  198. package/dist/src/services/access/encrypt-service.js +79 -0
  199. package/dist/src/services/api-usage/api-usage-base-service.d.ts +15 -0
  200. package/dist/src/services/api-usage/api-usage-base-service.js +58 -0
  201. package/dist/src/services/console/service.d.ts +7 -0
  202. package/dist/src/services/console/service.js +18 -0
  203. package/dist/src/services/db/pg/pg-estimate-size-service.d.ts +16 -0
  204. package/dist/src/services/db/pg/pg-estimate-size-service.js +83 -0
  205. package/dist/src/services/files/types.d.ts +6 -0
  206. package/dist/src/services/files/types.js +1 -0
  207. package/dist/src/services/files/walk-dir-service.d.ts +8 -0
  208. package/dist/src/services/files/walk-dir-service.js +77 -0
  209. package/dist/src/services/locale/countries.d.ts +6 -0
  210. package/dist/src/services/locale/countries.js +481 -0
  211. package/dist/src/services/mailing-lists/mailing-list-subscriber-service.d.ts +14 -0
  212. package/dist/src/services/mailing-lists/mailing-list-subscriber-service.js +28 -0
  213. package/dist/src/services/process/sleep.d.ts +2 -0
  214. package/dist/src/services/process/sleep.js +6 -0
  215. package/dist/src/services/quotas/mutate-service.d.ts +5 -0
  216. package/dist/src/services/quotas/mutate-service.js +37 -0
  217. package/dist/src/services/quotas/query-service.d.ts +27 -0
  218. package/dist/src/services/quotas/query-service.js +116 -0
  219. package/dist/src/services/quotas/utils-service.d.ts +4 -0
  220. package/dist/src/services/quotas/utils-service.js +22 -0
  221. package/dist/src/services/tech/tech-provider-mutate-service.d.ts +7 -0
  222. package/dist/src/services/tech/tech-provider-mutate-service.js +85 -0
  223. package/dist/src/services/tech/tech-query-service.d.ts +9 -0
  224. package/dist/src/services/tech/tech-query-service.js +58 -0
  225. package/dist/src/services/user-preference/service.d.ts +10 -0
  226. package/dist/src/services/user-preference/service.js +49 -0
  227. package/dist/src/services/users/external-user-integration-service.d.ts +9 -0
  228. package/dist/src/services/users/external-user-integration-service.js +25 -0
  229. package/dist/src/services/users/profile-service.d.ts +40 -0
  230. package/dist/src/services/users/profile-service.js +385 -0
  231. package/dist/src/services/users/service.d.ts +64 -0
  232. package/dist/src/services/users/service.js +152 -0
  233. package/dist/src/services/users/user-error-service.d.ts +4 -0
  234. package/dist/src/services/users/user-error-service.js +27 -0
  235. package/dist/src/services/users/users-group-service.d.ts +16 -0
  236. package/dist/src/services/users/users-group-service.js +51 -0
  237. package/dist/src/services/utils/field-naming-service.d.ts +20 -0
  238. package/dist/src/services/utils/field-naming-service.js +59 -0
  239. package/dist/src/services/utils/string-utils-service.d.ts +5 -0
  240. package/dist/src/services/utils/string-utils-service.js +37 -0
  241. package/dist/src/types/errors.d.ts +9 -0
  242. package/dist/src/types/errors.js +15 -0
  243. package/dist/src/types/user-types.d.ts +11 -0
  244. package/dist/src/types/user-types.js +14 -0
  245. package/dist/types/errors.d.ts +9 -0
  246. package/dist/types/errors.js +20 -0
  247. package/dist/types/user-types.d.ts +11 -0
  248. package/dist/types/user-types.js +19 -0
  249. package/package.json +21 -0
  250. package/prisma/schema.prisma +572 -0
  251. package/prisma.config.ts +14 -0
  252. package/src/apollo/README.md +4 -0
  253. package/src/apollo/resolvers/mutations/mailing-lists.ts +30 -0
  254. package/src/apollo/resolvers/mutations/user-preferences.ts +33 -0
  255. package/src/apollo/resolvers/mutations/users.ts +61 -0
  256. package/src/apollo/resolvers/queries/access.ts +23 -0
  257. package/src/apollo/resolvers/queries/profile.ts +24 -0
  258. package/src/apollo/resolvers/queries/quotas.ts +25 -0
  259. package/src/apollo/resolvers/queries/tech.ts +42 -0
  260. package/src/apollo/resolvers/queries/user-preferences.ts +34 -0
  261. package/src/apollo/resolvers/queries/users.ts +33 -0
  262. package/src/apollo/typedefs/typedefs.ts +139 -0
  263. package/src/db.ts +19 -0
  264. package/src/index.ts +52 -0
  265. package/src/models/chat/chat-message-created-model.ts +126 -0
  266. package/src/models/chat/chat-message-model.ts +678 -0
  267. package/src/models/chat/chat-participant-model.ts +248 -0
  268. package/src/models/chat/chat-session-model.ts +397 -0
  269. package/src/models/chat/chat-settings-model.ts +336 -0
  270. package/src/models/feature-flags/feature-flag-model.ts +198 -0
  271. package/src/models/instances/instance-model.ts +673 -0
  272. package/src/models/instances/instance-setting-model.ts +235 -0
  273. package/src/models/mailing-lists/mailing-list-model.ts +177 -0
  274. package/src/models/mailing-lists/mailing-list-subscriber-model.ts +194 -0
  275. package/src/models/quotas/resource-quota-total-model.ts +243 -0
  276. package/src/models/quotas/resource-quota-usage-model.ts +219 -0
  277. package/src/models/tech/rate-limited-api-event-model.ts +190 -0
  278. package/src/models/tech/rate-limited-api-model.ts +171 -0
  279. package/src/models/tech/tech-model.ts +360 -0
  280. package/src/models/tech/tech-provider-api-key-model.ts +289 -0
  281. package/src/models/tech/tech-provider-model.ts +247 -0
  282. package/src/models/users/external-user-integration-model.ts +236 -0
  283. package/src/models/users/user-error-model.ts +219 -0
  284. package/src/models/users/user-error-summary-model.ts +216 -0
  285. package/src/models/users/user-group-member-model.ts +233 -0
  286. package/src/models/users/user-group-model.ts +174 -0
  287. package/src/models/users/user-model.ts +172 -0
  288. package/src/models/users/user-preference-model.ts +285 -0
  289. package/src/models/users/user-profile-model.ts +207 -0
  290. package/src/services/access/access-service.ts +36 -0
  291. package/src/services/access/encrypt-service.ts +122 -0
  292. package/src/services/api-usage/api-usage-base-service.ts +95 -0
  293. package/src/services/console/service.ts +24 -0
  294. package/src/services/db/pg/pg-estimate-size-service.ts +119 -0
  295. package/src/services/files/types.ts +7 -0
  296. package/src/services/files/walk-dir-service.ts +135 -0
  297. package/src/services/locale/countries.ts +483 -0
  298. package/src/services/mailing-lists/mailing-list-subscriber-service.ts +54 -0
  299. package/src/services/process/sleep.ts +7 -0
  300. package/src/services/quotas/mutate-service.ts +66 -0
  301. package/src/services/quotas/query-service.ts +197 -0
  302. package/src/services/quotas/utils-service.ts +29 -0
  303. package/src/services/tech/tech-provider-mutate-service.ts +136 -0
  304. package/src/services/tech/tech-query-service.ts +93 -0
  305. package/src/services/user-preference/service.ts +110 -0
  306. package/src/services/users/external-user-integration-service.ts +51 -0
  307. package/src/services/users/profile-service.ts +513 -0
  308. package/src/services/users/service.ts +293 -0
  309. package/src/services/users/user-error-service.ts +74 -0
  310. package/src/services/users/users-group-service.ts +85 -0
  311. package/src/services/utils/field-naming-service.ts +78 -0
  312. package/src/services/utils/string-utils-service.ts +48 -0
  313. package/src/types/errors.ts +18 -0
  314. package/src/types/user-types.ts +19 -0
  315. package/tsconfig.json +25 -0
@@ -0,0 +1,484 @@
1
+ import { Encrypter } from '../../services/access/encrypt-service';
2
+ import { CustomError } from '../../types/errors';
3
+ export class ChatMessageModel {
4
+ // Consts
5
+ clName = 'ChatMessageModel';
6
+ msPerMinute = 60000;
7
+ // Services
8
+ encrypter;
9
+ // Code
10
+ constructor(encryptionKey) {
11
+ this.encrypter = new Encrypter(encryptionKey);
12
+ }
13
+ async countMessages(prisma, userProfileId, startDate, sentByAi) {
14
+ // Debug
15
+ const fnName = `${this.clName}.countMessages()`;
16
+ // Query
17
+ const count = await prisma.chatMessage.count({
18
+ where: {
19
+ sentByAi: sentByAi,
20
+ chatSession: {
21
+ createdById: userProfileId,
22
+ },
23
+ created: {
24
+ gte: startDate,
25
+ },
26
+ },
27
+ });
28
+ // Return
29
+ return count;
30
+ }
31
+ async create(prisma, id, chatSession, replyToId, fromUserProfileId, fromChatParticipantId, toChatParticipantId, externalId, sentByAi, message) {
32
+ // Debug
33
+ const fnName = `${this.clName}.create()`;
34
+ // Validate
35
+ if (chatSession == null) {
36
+ throw new CustomError(`${fnName}: chatMessage == null`);
37
+ }
38
+ // Encrypt the message if required
39
+ if (chatSession.isEncryptedAtRest === true) {
40
+ message = this.encrypter.encrypt(message);
41
+ }
42
+ // Create record
43
+ var chatMessage = undefined;
44
+ try {
45
+ chatMessage = await prisma.chatMessage.create({
46
+ data: {
47
+ id: id,
48
+ chatSessionId: chatSession.id,
49
+ replyToId: replyToId,
50
+ fromChatParticipantId: fromChatParticipantId,
51
+ toChatParticipantId: toChatParticipantId,
52
+ externalId: externalId,
53
+ sentByAi: sentByAi,
54
+ message: message
55
+ }
56
+ });
57
+ }
58
+ catch (error) {
59
+ console.error(`${fnName}: error: ${error}`);
60
+ throw 'Prisma error';
61
+ }
62
+ // Return
63
+ return chatMessage;
64
+ }
65
+ async deleteByChatSessionId(prisma, chatSessionId) {
66
+ // Debug
67
+ const fnName = `${this.clName}.deleteByChatSessionId()`;
68
+ // Delete records
69
+ try {
70
+ await prisma.chatMessage.deleteMany({
71
+ where: {
72
+ chatSessionId: chatSessionId
73
+ }
74
+ });
75
+ }
76
+ catch (error) {
77
+ console.error(`${fnName}: error: ${error}`);
78
+ throw 'Prisma error';
79
+ }
80
+ }
81
+ async deleteById(prisma, id) {
82
+ // Debug
83
+ const fnName = `${this.clName}.deleteById()`;
84
+ // Delete record
85
+ try {
86
+ await prisma.chatMessage.delete({
87
+ where: {
88
+ id: id
89
+ }
90
+ });
91
+ }
92
+ catch (error) {
93
+ console.error(`${fnName}: error: ${error}`);
94
+ throw 'Prisma error';
95
+ }
96
+ }
97
+ async getById(prisma, id, chatSession) {
98
+ // Debug
99
+ const fnName = `${this.clName}.getById()`;
100
+ // Validate
101
+ if (chatSession == null) {
102
+ throw new CustomError(`${fnName}: chatMessage == null`);
103
+ }
104
+ // Query record
105
+ var chatMessage = undefined;
106
+ try {
107
+ chatMessage = await prisma.chatMessage.findUnique({
108
+ where: {
109
+ id: id
110
+ }
111
+ });
112
+ }
113
+ catch (error) {
114
+ if (!(error instanceof error.NotFound)) {
115
+ console.error(`${fnName}: error: ${error}`);
116
+ throw 'Prisma error';
117
+ }
118
+ }
119
+ // Decrypt message if required
120
+ if (chatSession.isEncryptedAtRest === true) {
121
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message);
122
+ }
123
+ // Return OK
124
+ return chatMessage;
125
+ }
126
+ async getByChatSessionId(prisma, chatSession, maxPrevMessages) {
127
+ // Debug
128
+ const fnName = `${this.clName}.getByChatSessionId()`;
129
+ // Validate
130
+ if (chatSession == null) {
131
+ console.error(`${fnName}: chatSessionId == null`);
132
+ throw 'Prisma error';
133
+ }
134
+ if (chatSession.id == null) {
135
+ console.error(`${fnName}: chatSession.id == null`);
136
+ throw 'Prisma error';
137
+ }
138
+ // Query records
139
+ var chatMessages = [];
140
+ if (maxPrevMessages == null) {
141
+ // No max prev messages; get all messages
142
+ try {
143
+ chatMessages = await prisma.chatMessage.findMany({
144
+ where: {
145
+ chatSessionId: chatSession.id
146
+ },
147
+ orderBy: [
148
+ {
149
+ created: 'asc'
150
+ }
151
+ ]
152
+ });
153
+ }
154
+ catch (error) {
155
+ console.error(`${fnName}: error: ${error}`);
156
+ throw 'Prisma error';
157
+ }
158
+ }
159
+ else {
160
+ // Limit by max prev messages
161
+ try {
162
+ chatMessages = await prisma.chatMessage.findMany({
163
+ take: maxPrevMessages,
164
+ where: {
165
+ chatSessionId: chatSession.id
166
+ },
167
+ orderBy: [
168
+ {
169
+ created: 'desc'
170
+ }
171
+ ]
172
+ });
173
+ }
174
+ catch (error) {
175
+ console.error(`${fnName}: error: ${error}`);
176
+ throw 'Prisma error';
177
+ }
178
+ chatMessages.reverse();
179
+ }
180
+ // Decrypts message if required
181
+ if (chatSession.isEncryptedAtRest === true) {
182
+ for (const chatMessage of chatMessages) {
183
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message);
184
+ }
185
+ }
186
+ // Return
187
+ return chatMessages;
188
+ }
189
+ async getByChatSessionAndExternalId(prisma, chatSession, externalId) {
190
+ // Debug
191
+ const fnName = `${this.clName}.getByChatSessionIdAndExternalId()`;
192
+ // Validate
193
+ if (chatSession == null) {
194
+ throw new CustomError(`${fnName}: chatSessionId == null`);
195
+ }
196
+ if (externalId == null) {
197
+ throw new CustomError(`${fnName}: externalId == null`);
198
+ }
199
+ // Query record
200
+ var chatMessage = undefined;
201
+ try {
202
+ chatMessage = await prisma.chatMessage.findFirst({
203
+ where: {
204
+ chatSessionId: chatSession.id,
205
+ externalId: externalId
206
+ }
207
+ });
208
+ }
209
+ catch (error) {
210
+ if (!(error instanceof error.NotFound)) {
211
+ console.error(`${fnName}: error: ${error}`);
212
+ throw 'Prisma error';
213
+ }
214
+ }
215
+ // Decrypt message if required
216
+ if (chatSession.isEncryptedAtRest === true) {
217
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message);
218
+ }
219
+ // Return OK
220
+ return chatMessage;
221
+ }
222
+ async getByLastMessageId(prisma, chatSession, lastMessageId) {
223
+ // Debug
224
+ const fnName = `${this.clName}.getByLastMessageId()`;
225
+ // Validate
226
+ if (chatSession == null) {
227
+ throw new CustomError(`${fnName}: chatMessage == null`);
228
+ }
229
+ // Get the last message if specified
230
+ var lastMessageCreated = new Date();
231
+ if (lastMessageId != null) {
232
+ const lastMessage = await this.getById(prisma, lastMessageId, chatSession);
233
+ if (lastMessage != null) {
234
+ lastMessageCreated = lastMessage.created;
235
+ }
236
+ }
237
+ // Query records
238
+ var chatMessages = [];
239
+ try {
240
+ chatMessages = await prisma.chatMessage.findMany({
241
+ where: {
242
+ chatSessionId: chatSession.id,
243
+ created: {
244
+ gt: lastMessageCreated
245
+ }
246
+ },
247
+ orderBy: [
248
+ {
249
+ created: 'asc'
250
+ }
251
+ ]
252
+ });
253
+ }
254
+ catch (error) {
255
+ if (!(error instanceof error.NotFound)) {
256
+ console.error(`${fnName}: error: ${error}`);
257
+ throw 'Prisma error';
258
+ }
259
+ }
260
+ // Decrypts message if required
261
+ if (chatSession.isEncryptedAtRest === true) {
262
+ for (const chatMessage of chatMessages) {
263
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message);
264
+ }
265
+ }
266
+ // Return
267
+ return chatMessages;
268
+ }
269
+ async getEarliestUnread(prisma, chatSession) {
270
+ // Debug
271
+ const fnName = `${this.clName}.getEarliestUnread()`;
272
+ // Validate
273
+ if (chatSession == null) {
274
+ throw new CustomError(`${fnName}: chatMessage == null`);
275
+ }
276
+ // Query record
277
+ var chatMessage = undefined;
278
+ try {
279
+ chatMessage = await prisma.chatMessage.findFirst({
280
+ where: {
281
+ chatSessionId: chatSession.id,
282
+ sentByAi: true
283
+ },
284
+ orderBy: [
285
+ {
286
+ created: 'desc'
287
+ }
288
+ ]
289
+ });
290
+ }
291
+ catch (error) {
292
+ if (!(error instanceof error.NotFound)) {
293
+ console.error(`${fnName}: error: ${error}`);
294
+ throw 'Prisma error';
295
+ }
296
+ }
297
+ // Decrypt message if required
298
+ if (chatSession.isEncryptedAtRest === true) {
299
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message);
300
+ }
301
+ // Return OK
302
+ return chatMessage;
303
+ }
304
+ async getFirst(prisma, chatSession) {
305
+ // Debug
306
+ const fnName = `${this.clName}.getFirst()`;
307
+ // Validate
308
+ if (chatSession == null) {
309
+ throw new CustomError(`${fnName}: chatMessage == null`);
310
+ }
311
+ // Query record
312
+ var chatMessage = undefined;
313
+ try {
314
+ chatMessage = await prisma.chatMessage.findFirst({
315
+ where: {
316
+ chatSessionId: chatSession.id
317
+ },
318
+ orderBy: [
319
+ {
320
+ created: 'asc'
321
+ }
322
+ ]
323
+ });
324
+ }
325
+ catch (error) {
326
+ if (!(error instanceof error.NotFound)) {
327
+ console.error(`${fnName}: error: ${error}`);
328
+ throw 'Prisma error';
329
+ }
330
+ }
331
+ // Decrypt message if required
332
+ if (chatSession.isEncryptedAtRest === true) {
333
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message);
334
+ }
335
+ // Return OK
336
+ return chatMessage;
337
+ }
338
+ async getLast(prisma, chatSession) {
339
+ // Debug
340
+ const fnName = `${this.clName}.getLast()`;
341
+ // Validate
342
+ if (chatSession == null) {
343
+ throw new CustomError(`${fnName}: chatMessage == null`);
344
+ }
345
+ // Query record
346
+ var chatMessage = undefined;
347
+ try {
348
+ chatMessage = await prisma.chatMessage.findFirst({
349
+ where: {
350
+ chatSessionId: chatSession.id
351
+ },
352
+ orderBy: [
353
+ {
354
+ created: 'desc'
355
+ }
356
+ ]
357
+ });
358
+ }
359
+ catch (error) {
360
+ if (!(error instanceof error.NotFound)) {
361
+ console.error(`${fnName}: error: ${error}`);
362
+ throw 'Prisma error';
363
+ }
364
+ }
365
+ // Decrypt message if required
366
+ if (chatSession.isEncryptedAtRest === true) {
367
+ chatMessage.message = this.encrypter.decrypt(chatMessage.message);
368
+ }
369
+ // Return OK
370
+ return chatMessage;
371
+ }
372
+ async setExternalId(prisma, id, externalId) {
373
+ // Debug
374
+ const fnName = `${this.clName}.setExternalId()`;
375
+ // Validate
376
+ if (id == null) {
377
+ throw new CustomError(`${fnName}: id == null`);
378
+ }
379
+ if (externalId === undefined) {
380
+ throw new CustomError(`${fnName}: externalId == null`);
381
+ }
382
+ // Update record
383
+ try {
384
+ return await prisma.chatMessage.update({
385
+ data: {
386
+ externalId: externalId
387
+ },
388
+ where: {
389
+ id: id
390
+ }
391
+ });
392
+ }
393
+ catch (error) {
394
+ // Don't fail, this can happen due to a unique constraint violation in
395
+ // some valid scenarios.
396
+ // Trying to handle the specific Prisma error code didn't work
397
+ console.warn(`${fnName}: warning: ` + JSON.stringify(error));
398
+ return null;
399
+ }
400
+ }
401
+ async update(prisma, id, chatSession, replyToId, fromChatParticipantId, toChatParticipantId, externalId, sentByAi, message) {
402
+ // Debug
403
+ const fnName = `${this.clName}.update()`;
404
+ // Validate
405
+ if (chatSession == null) {
406
+ throw new CustomError(`${fnName}: chatMessage == null`);
407
+ }
408
+ // Encrypt the message if required
409
+ if (message != null &&
410
+ chatSession.isEncryptedAtRest === true) {
411
+ message = this.encrypter.encrypt(message);
412
+ }
413
+ // Update record
414
+ try {
415
+ return await prisma.chatMessage.update({
416
+ data: {
417
+ chatSessionId: chatSession.id,
418
+ replyToId: replyToId,
419
+ fromChatParticipantId: fromChatParticipantId,
420
+ toChatParticipantId: toChatParticipantId,
421
+ externalId: externalId,
422
+ sentByAi: sentByAi,
423
+ message: message
424
+ },
425
+ where: {
426
+ id: id
427
+ }
428
+ });
429
+ }
430
+ catch (error) {
431
+ console.error(`${fnName}: error: ${error}`);
432
+ throw 'Prisma error';
433
+ }
434
+ }
435
+ async upsert(prisma, id, chatSession, replyToId, fromUserProfileId, fromChatParticipantId, toChatParticipantId, externalId, sentByAi, message) {
436
+ // Debug
437
+ const fnName = `${this.clName}.upsert()`;
438
+ // If the id is specified, try to get it
439
+ if (id != null) {
440
+ const chatMessage = await this.getById(prisma, id, chatSession);
441
+ if (chatMessage != null) {
442
+ id = chatMessage.id;
443
+ }
444
+ }
445
+ // Upsert
446
+ if (id == null) {
447
+ // Validate for create (mainly for type validation of the create call)
448
+ if (replyToId === undefined) {
449
+ console.error(`${fnName}: id is null and replyToId is undefined`);
450
+ throw 'Prisma error';
451
+ }
452
+ if (fromUserProfileId == null) {
453
+ console.error(`${fnName}: id is null and fromUserProfileId is null`);
454
+ throw 'Prisma error';
455
+ }
456
+ if (fromChatParticipantId === undefined) {
457
+ console.error(`${fnName}: id is null and fromChatParticipantId is undefined`);
458
+ throw 'Prisma error';
459
+ }
460
+ if (toChatParticipantId === undefined) {
461
+ console.error(`${fnName}: id is null and toChatParticipantId is undefined`);
462
+ throw 'Prisma error';
463
+ }
464
+ if (externalId === undefined) {
465
+ console.error(`${fnName}: id is null and externalId is undefined`);
466
+ throw 'Prisma error';
467
+ }
468
+ if (sentByAi === undefined) {
469
+ console.error(`${fnName}: id is null and sentByAi is undefined`);
470
+ throw 'Prisma error';
471
+ }
472
+ if (message === undefined) {
473
+ console.error(`${fnName}: id is null and message is undefined`);
474
+ throw 'Prisma error';
475
+ }
476
+ // Create
477
+ return await this.create(prisma, id, chatSession, replyToId, fromUserProfileId, fromChatParticipantId, toChatParticipantId, externalId, sentByAi, message);
478
+ }
479
+ else {
480
+ // Update
481
+ return await this.update(prisma, id, chatSession, replyToId, fromChatParticipantId, toChatParticipantId, externalId, sentByAi, message);
482
+ }
483
+ }
484
+ }
@@ -0,0 +1,39 @@
1
+ import { PrismaClient } from '@/prisma/client';
2
+ import { UsersService } from '../../services/users/service';
3
+ export declare class ChatParticipantModel {
4
+ clName: string;
5
+ usersService: UsersService;
6
+ create(prisma: PrismaClient, id: string | undefined, chatSessionId: string, userProfileId: string): Promise<{
7
+ id: string;
8
+ userProfileId: string;
9
+ chatSessionId: string;
10
+ }>;
11
+ deleteByChatSessionId(prisma: PrismaClient, chatSessionId: string): Promise<void>;
12
+ getById(prisma: PrismaClient, id: string): Promise<any>;
13
+ getByChatSessionId(prisma: PrismaClient, chatSessionId: string): Promise<{
14
+ id: string;
15
+ userProfileId: string;
16
+ chatSessionId: string;
17
+ }[] | undefined>;
18
+ getByChatSessionIdAndOwnerType(prisma: PrismaClient, chatSessionId: string, ownerType: string): Promise<{
19
+ id: string;
20
+ userProfileId: string;
21
+ chatSessionId: string;
22
+ } | null | undefined>;
23
+ getByChatSessionIdAndUserProfileId(prisma: PrismaClient, chatSessionId: string, userProfileId: string): Promise<{
24
+ id: string;
25
+ userProfileId: string;
26
+ chatSessionId: string;
27
+ } | null | undefined>;
28
+ getParticipantTypeByUserProfileId(prisma: PrismaClient, userProfileId: string): Promise<string | null>;
29
+ update(prisma: PrismaClient, id: string, chatSessionId: string, userProfileId: string): Promise<{
30
+ id: string;
31
+ userProfileId: string;
32
+ chatSessionId: string;
33
+ }>;
34
+ upsert(prisma: PrismaClient, id: string | undefined, chatSessionId: string, userProfileId: string): Promise<{
35
+ id: string;
36
+ userProfileId: string;
37
+ chatSessionId: string;
38
+ }>;
39
+ }
@@ -0,0 +1,178 @@
1
+ import { CustomError } from '../../types/errors';
2
+ import { UsersService } from '../../services/users/service';
3
+ export class ChatParticipantModel {
4
+ // Consts
5
+ clName = 'ChatParticipantModel';
6
+ // Services
7
+ usersService = new UsersService();
8
+ // Code
9
+ async create(prisma, id, chatSessionId, userProfileId) {
10
+ // Debug
11
+ const fnName = `${this.clName}.create()`;
12
+ // Validate
13
+ if (userProfileId == null) {
14
+ console.error(`${fnName}: userProfileId not specified`);
15
+ throw `Validation error`;
16
+ }
17
+ // Create record
18
+ try {
19
+ return await prisma.chatParticipant.create({
20
+ data: {
21
+ id: id,
22
+ chatSessionId: chatSessionId,
23
+ userProfileId: userProfileId
24
+ }
25
+ });
26
+ }
27
+ catch (error) {
28
+ console.error(`${fnName}: error: ${error}`);
29
+ throw 'Prisma error';
30
+ }
31
+ }
32
+ async deleteByChatSessionId(prisma, chatSessionId) {
33
+ // Debug
34
+ const fnName = `${this.clName}.deleteByChatSessionId()`;
35
+ // Delete records
36
+ try {
37
+ await prisma.chatParticipant.deleteMany({
38
+ where: {
39
+ chatSessionId: chatSessionId
40
+ }
41
+ });
42
+ }
43
+ catch (error) {
44
+ console.error(`${fnName}: error: ${error}`);
45
+ throw 'Prisma error';
46
+ }
47
+ }
48
+ async getById(prisma, id) {
49
+ // Debug
50
+ const fnName = `${this.clName}.getById()`;
51
+ // Query record
52
+ var chatParticipant = undefined;
53
+ try {
54
+ chatParticipant = await prisma.chatParticipant.findUnique({
55
+ where: {
56
+ id: id
57
+ }
58
+ });
59
+ }
60
+ catch (error) {
61
+ if (!(error instanceof error.NotFound)) {
62
+ console.error(`${fnName}: error: ${error}`);
63
+ throw 'Prisma error';
64
+ }
65
+ }
66
+ // Return OK
67
+ return chatParticipant;
68
+ }
69
+ async getByChatSessionId(prisma, chatSessionId) {
70
+ // Debug
71
+ const fnName = `${this.clName}.getByChatSessionId()`;
72
+ // Get by chatSessionId
73
+ // Query records
74
+ try {
75
+ return await prisma.chatParticipant.findMany({
76
+ where: {
77
+ chatSessionId: chatSessionId
78
+ }
79
+ });
80
+ }
81
+ catch (error) {
82
+ if (!(error instanceof error.NotFound)) {
83
+ console.error(`${fnName}: error: ${error}`);
84
+ throw 'Prisma error';
85
+ }
86
+ }
87
+ }
88
+ async getByChatSessionIdAndOwnerType(prisma, chatSessionId, ownerType) {
89
+ // Debug
90
+ const fnName = `${this.clName}.getByChatSessionId()`;
91
+ // Query record
92
+ try {
93
+ return await prisma.chatParticipant.findFirst({
94
+ where: {
95
+ chatSessionId: chatSessionId,
96
+ userProfile: {
97
+ ownerType: ownerType
98
+ }
99
+ }
100
+ });
101
+ }
102
+ catch (error) {
103
+ if (!(error instanceof error.NotFound)) {
104
+ console.error(`${fnName}: error: ${error}`);
105
+ throw 'Prisma error';
106
+ }
107
+ }
108
+ }
109
+ async getByChatSessionIdAndUserProfileId(prisma, chatSessionId, userProfileId) {
110
+ // Debug
111
+ const fnName = `${this.clName}.getByChatSessionId()`;
112
+ // Query record
113
+ try {
114
+ return await prisma.chatParticipant.findFirst({
115
+ where: {
116
+ chatSessionId: chatSessionId,
117
+ userProfileId: userProfileId
118
+ }
119
+ });
120
+ }
121
+ catch (error) {
122
+ if (!(error instanceof error.NotFound)) {
123
+ console.error(`${fnName}: error: ${error}`);
124
+ throw 'Prisma error';
125
+ }
126
+ }
127
+ }
128
+ async getParticipantTypeByUserProfileId(prisma, userProfileId) {
129
+ // Debug
130
+ const fnName = `${this.clName}.getParticipantTypeByUserProfileId()`;
131
+ // Query record
132
+ const userProfile = await this.usersService.getById(prisma, userProfileId);
133
+ // Validate
134
+ if (userProfile == null) {
135
+ throw new CustomError(`${fnName}: userProfile == null`);
136
+ }
137
+ // Return OK
138
+ return userProfile.ownerType;
139
+ }
140
+ async update(prisma, id, chatSessionId, userProfileId) {
141
+ // Debug
142
+ const fnName = `${this.clName}.update()`;
143
+ // Create record
144
+ try {
145
+ return await prisma.chatParticipant.update({
146
+ data: {
147
+ chatSessionId: chatSessionId,
148
+ userProfileId: userProfileId
149
+ },
150
+ where: {
151
+ id: id
152
+ }
153
+ });
154
+ }
155
+ catch (error) {
156
+ console.error(`${fnName}: error: ${error}`);
157
+ throw 'Prisma error';
158
+ }
159
+ }
160
+ async upsert(prisma, id, chatSessionId, userProfileId) {
161
+ // Debug
162
+ const fnName = `${this.clName}.upsert()`;
163
+ // If the id is specified, try to get it
164
+ if (id != null) {
165
+ const chatParticipant = await this.getById(prisma, id);
166
+ if (chatParticipant != null) {
167
+ id = chatParticipant.id;
168
+ }
169
+ }
170
+ // Upsert
171
+ if (id == null) {
172
+ return await this.create(prisma, id, chatSessionId, userProfileId);
173
+ }
174
+ else {
175
+ return await this.update(prisma, id, chatSessionId, userProfileId);
176
+ }
177
+ }
178
+ }