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.
- package/dist/apollo/resolvers/mutations/mailing-lists.d.ts +11 -0
- package/dist/apollo/resolvers/mutations/mailing-lists.js +30 -0
- package/dist/apollo/resolvers/mutations/user-preferences.d.ts +13 -0
- package/dist/apollo/resolvers/mutations/user-preferences.js +31 -0
- package/dist/apollo/resolvers/mutations/users.d.ts +28 -0
- package/dist/apollo/resolvers/mutations/users.js +44 -0
- package/dist/apollo/resolvers/queries/access.d.ts +11 -0
- package/dist/apollo/resolvers/queries/access.js +25 -0
- package/dist/apollo/resolvers/queries/profile.d.ts +11 -0
- package/dist/apollo/resolvers/queries/profile.js +25 -0
- package/dist/apollo/resolvers/queries/quotas.d.ts +21 -0
- package/dist/apollo/resolvers/queries/quotas.js +25 -0
- package/dist/apollo/resolvers/queries/tech.d.ts +5 -0
- package/dist/apollo/resolvers/queries/tech.js +35 -0
- package/dist/apollo/resolvers/queries/user-preferences.d.ts +5 -0
- package/dist/apollo/resolvers/queries/user-preferences.js +33 -0
- package/dist/apollo/resolvers/queries/users.d.ts +15 -0
- package/dist/apollo/resolvers/queries/users.js +28 -0
- package/dist/apollo/resolvers/resolvers.d.ts +20 -0
- package/dist/apollo/resolvers/resolvers.js +38 -0
- package/dist/apollo/typedefs/typedefs.d.ts +1 -0
- package/dist/apollo/typedefs/typedefs.js +142 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.js +68 -0
- package/dist/models/chat/chat-message-created-model.d.ts +17 -0
- package/dist/models/chat/chat-message-created-model.js +113 -0
- package/dist/models/chat/chat-message-model.d.ts +44 -0
- package/dist/models/chat/chat-message-model.js +523 -0
- package/dist/models/chat/chat-participant-model.d.ts +39 -0
- package/dist/models/chat/chat-participant-model.js +211 -0
- package/dist/models/chat/chat-session-model.d.ts +92 -0
- package/dist/models/chat/chat-session-model.js +301 -0
- package/dist/models/chat/chat-settings-model.d.ts +87 -0
- package/dist/models/chat/chat-settings-model.js +261 -0
- package/dist/models/feature-flags/feature-flag-model.d.ts +40 -0
- package/dist/models/feature-flags/feature-flag-model.js +164 -0
- package/dist/models/instances/instance-model.d.ts +93 -0
- package/dist/models/instances/instance-model.js +432 -0
- package/dist/models/instances/instance-setting-model.d.ts +39 -0
- package/dist/models/instances/instance-setting-model.js +193 -0
- package/dist/models/mailing-lists/mailing-list-model.d.ts +34 -0
- package/dist/models/mailing-lists/mailing-list-model.js +154 -0
- package/dist/models/mailing-lists/mailing-list-subscriber-model.d.ts +36 -0
- package/dist/models/mailing-lists/mailing-list-subscriber-model.js +152 -0
- package/dist/models/quotas/resource-quota-total-model.d.ts +46 -0
- package/dist/models/quotas/resource-quota-total-model.js +200 -0
- package/dist/models/quotas/resource-quota-usage-model.d.ts +51 -0
- package/dist/models/quotas/resource-quota-usage-model.js +181 -0
- package/dist/models/tech/rate-limited-api-event-model.d.ts +25 -0
- package/dist/models/tech/rate-limited-api-event-model.js +161 -0
- package/dist/models/tech/rate-limited-api-model.d.ts +21 -0
- package/dist/models/tech/rate-limited-api-model.js +141 -0
- package/dist/models/tech/tech-model.d.ts +44 -0
- package/dist/models/tech/tech-model.js +268 -0
- package/dist/models/tech/tech-provider-api-key-model.d.ts +43 -0
- package/dist/models/tech/tech-provider-api-key-model.js +224 -0
- package/dist/models/tech/tech-provider-model.d.ts +28 -0
- package/dist/models/tech/tech-provider-model.js +197 -0
- package/dist/models/users/external-user-integration-model.d.ts +36 -0
- package/dist/models/users/external-user-integration-model.js +196 -0
- package/dist/models/users/user-error-model.d.ts +54 -0
- package/dist/models/users/user-error-model.js +173 -0
- package/dist/models/users/user-error-summary-model.d.ts +45 -0
- package/dist/models/users/user-error-summary-model.js +172 -0
- package/dist/models/users/user-group-member-model.d.ts +41 -0
- package/dist/models/users/user-group-member-model.js +193 -0
- package/dist/models/users/user-group-model.d.ts +27 -0
- package/dist/models/users/user-group-model.js +146 -0
- package/dist/models/users/user-model.d.ts +46 -0
- package/dist/models/users/user-model.js +153 -0
- package/dist/models/users/user-preference-model.d.ts +60 -0
- package/dist/models/users/user-preference-model.js +228 -0
- package/dist/models/users/user-profile-model.d.ts +58 -0
- package/dist/models/users/user-profile-model.js +173 -0
- package/dist/prisma.config.d.ts +3 -0
- package/dist/prisma.config.js +13 -0
- package/dist/services/access/access-service.d.ts +12 -0
- package/dist/services/access/access-service.js +44 -0
- package/dist/services/access/encrypt-service.d.ts +13 -0
- package/dist/services/access/encrypt-service.js +84 -0
- package/dist/services/api-usage/api-usage-base-service.d.ts +15 -0
- package/dist/services/api-usage/api-usage-base-service.js +75 -0
- package/dist/services/console/service.d.ts +7 -0
- package/dist/services/console/service.js +70 -0
- package/dist/services/db/pg/pg-estimate-size-service.d.ts +16 -0
- package/dist/services/db/pg/pg-estimate-size-service.js +90 -0
- package/dist/services/files/types.d.ts +6 -0
- package/dist/services/files/types.js +2 -0
- package/dist/services/files/walk-dir-service.d.ts +8 -0
- package/dist/services/files/walk-dir-service.js +94 -0
- package/dist/services/locale/countries.d.ts +6 -0
- package/dist/services/locale/countries.js +484 -0
- package/dist/services/mailing-lists/mailing-list-subscriber-service.d.ts +14 -0
- package/dist/services/mailing-lists/mailing-list-subscriber-service.js +45 -0
- package/dist/services/process/sleep.d.ts +2 -0
- package/dist/services/process/sleep.js +10 -0
- package/dist/services/quotas/mutate-service.d.ts +5 -0
- package/dist/services/quotas/mutate-service.js +54 -0
- package/dist/services/quotas/query-service.d.ts +27 -0
- package/dist/services/quotas/query-service.js +137 -0
- package/dist/services/quotas/utils-service.d.ts +4 -0
- package/dist/services/quotas/utils-service.js +28 -0
- package/dist/services/tech/tech-provider-mutate-service.d.ts +7 -0
- package/dist/services/tech/tech-provider-mutate-service.js +142 -0
- package/dist/services/tech/tech-query-service.d.ts +9 -0
- package/dist/services/tech/tech-query-service.js +77 -0
- package/dist/services/user-preference/service.d.ts +10 -0
- package/dist/services/user-preference/service.js +70 -0
- package/dist/services/users/external-user-integration-service.d.ts +9 -0
- package/dist/services/users/external-user-integration-service.js +42 -0
- package/dist/services/users/profile-service.d.ts +40 -0
- package/dist/services/users/profile-service.js +408 -0
- package/dist/services/users/service.d.ts +64 -0
- package/dist/services/users/service.js +187 -0
- package/dist/services/users/user-error-service.d.ts +4 -0
- package/dist/services/users/user-error-service.js +42 -0
- package/dist/services/users/users-group-service.d.ts +16 -0
- package/dist/services/users/users-group-service.js +68 -0
- package/dist/services/utils/string-utils-service.d.ts +5 -0
- package/dist/services/utils/string-utils-service.js +41 -0
- package/dist/src/apollo/resolvers/mutations/mailing-lists.d.ts +11 -0
- package/dist/src/apollo/resolvers/mutations/mailing-lists.js +19 -0
- package/dist/src/apollo/resolvers/mutations/user-preferences.d.ts +13 -0
- package/dist/src/apollo/resolvers/mutations/user-preferences.js +20 -0
- package/dist/src/apollo/resolvers/mutations/users.d.ts +28 -0
- package/dist/src/apollo/resolvers/mutations/users.js +33 -0
- package/dist/src/apollo/resolvers/queries/access.d.ts +11 -0
- package/dist/src/apollo/resolvers/queries/access.js +14 -0
- package/dist/src/apollo/resolvers/queries/profile.d.ts +11 -0
- package/dist/src/apollo/resolvers/queries/profile.js +14 -0
- package/dist/src/apollo/resolvers/queries/quotas.d.ts +21 -0
- package/dist/src/apollo/resolvers/queries/quotas.js +14 -0
- package/dist/src/apollo/resolvers/queries/tech.d.ts +5 -0
- package/dist/src/apollo/resolvers/queries/tech.js +24 -0
- package/dist/src/apollo/resolvers/queries/user-preferences.d.ts +5 -0
- package/dist/src/apollo/resolvers/queries/user-preferences.js +22 -0
- package/dist/src/apollo/resolvers/queries/users.d.ts +15 -0
- package/dist/src/apollo/resolvers/queries/users.js +17 -0
- package/dist/src/apollo/typedefs/typedefs.d.ts +1 -0
- package/dist/src/apollo/typedefs/typedefs.js +139 -0
- package/dist/src/db.d.ts +3 -0
- package/dist/src/db.js +11 -0
- package/dist/src/index.d.ts +52 -0
- package/dist/src/index.js +52 -0
- package/dist/src/models/chat/chat-message-created-model.d.ts +17 -0
- package/dist/src/models/chat/chat-message-created-model.js +92 -0
- package/dist/src/models/chat/chat-message-model.d.ts +44 -0
- package/dist/src/models/chat/chat-message-model.js +484 -0
- package/dist/src/models/chat/chat-participant-model.d.ts +39 -0
- package/dist/src/models/chat/chat-participant-model.js +178 -0
- package/dist/src/models/chat/chat-session-model.d.ts +92 -0
- package/dist/src/models/chat/chat-session-model.js +266 -0
- package/dist/src/models/chat/chat-settings-model.d.ts +87 -0
- package/dist/src/models/chat/chat-settings-model.js +230 -0
- package/dist/src/models/feature-flags/feature-flag-model.d.ts +40 -0
- package/dist/src/models/feature-flags/feature-flag-model.js +137 -0
- package/dist/src/models/instances/instance-model.d.ts +100 -0
- package/dist/src/models/instances/instance-model.js +466 -0
- package/dist/src/models/instances/instance-setting-model.d.ts +39 -0
- package/dist/src/models/instances/instance-setting-model.js +164 -0
- package/dist/src/models/mailing-lists/mailing-list-model.d.ts +34 -0
- package/dist/src/models/mailing-lists/mailing-list-model.js +127 -0
- package/dist/src/models/mailing-lists/mailing-list-subscriber-model.d.ts +36 -0
- package/dist/src/models/mailing-lists/mailing-list-subscriber-model.js +127 -0
- package/dist/src/models/quotas/resource-quota-total-model.d.ts +46 -0
- package/dist/src/models/quotas/resource-quota-total-model.js +170 -0
- package/dist/src/models/quotas/resource-quota-usage-model.d.ts +51 -0
- package/dist/src/models/quotas/resource-quota-usage-model.js +151 -0
- package/dist/src/models/tech/rate-limited-api-event-model.d.ts +25 -0
- package/dist/src/models/tech/rate-limited-api-event-model.js +134 -0
- package/dist/src/models/tech/rate-limited-api-model.d.ts +21 -0
- package/dist/src/models/tech/rate-limited-api-model.js +116 -0
- package/dist/src/models/tech/tech-model.d.ts +44 -0
- package/dist/src/models/tech/tech-model.js +239 -0
- package/dist/src/models/tech/tech-provider-api-key-model.d.ts +43 -0
- package/dist/src/models/tech/tech-provider-api-key-model.js +195 -0
- package/dist/src/models/tech/tech-provider-model.d.ts +28 -0
- package/dist/src/models/tech/tech-provider-model.js +170 -0
- package/dist/src/models/users/external-user-integration-model.d.ts +36 -0
- package/dist/src/models/users/external-user-integration-model.js +167 -0
- package/dist/src/models/users/user-error-model.d.ts +54 -0
- package/dist/src/models/users/user-error-model.js +146 -0
- package/dist/src/models/users/user-error-summary-model.d.ts +45 -0
- package/dist/src/models/users/user-error-summary-model.js +145 -0
- package/dist/src/models/users/user-group-member-model.d.ts +41 -0
- package/dist/src/models/users/user-group-member-model.js +164 -0
- package/dist/src/models/users/user-group-model.d.ts +27 -0
- package/dist/src/models/users/user-group-model.js +121 -0
- package/dist/src/models/users/user-model.d.ts +46 -0
- package/dist/src/models/users/user-model.js +126 -0
- package/dist/src/models/users/user-preference-model.d.ts +60 -0
- package/dist/src/models/users/user-preference-model.js +197 -0
- package/dist/src/models/users/user-profile-model.d.ts +58 -0
- package/dist/src/models/users/user-profile-model.js +146 -0
- package/dist/src/services/access/access-service.d.ts +12 -0
- package/dist/src/services/access/access-service.js +27 -0
- package/dist/src/services/access/encrypt-service.d.ts +13 -0
- package/dist/src/services/access/encrypt-service.js +79 -0
- package/dist/src/services/api-usage/api-usage-base-service.d.ts +15 -0
- package/dist/src/services/api-usage/api-usage-base-service.js +58 -0
- package/dist/src/services/console/service.d.ts +7 -0
- package/dist/src/services/console/service.js +18 -0
- package/dist/src/services/db/pg/pg-estimate-size-service.d.ts +16 -0
- package/dist/src/services/db/pg/pg-estimate-size-service.js +83 -0
- package/dist/src/services/files/types.d.ts +6 -0
- package/dist/src/services/files/types.js +1 -0
- package/dist/src/services/files/walk-dir-service.d.ts +8 -0
- package/dist/src/services/files/walk-dir-service.js +77 -0
- package/dist/src/services/locale/countries.d.ts +6 -0
- package/dist/src/services/locale/countries.js +481 -0
- package/dist/src/services/mailing-lists/mailing-list-subscriber-service.d.ts +14 -0
- package/dist/src/services/mailing-lists/mailing-list-subscriber-service.js +28 -0
- package/dist/src/services/process/sleep.d.ts +2 -0
- package/dist/src/services/process/sleep.js +6 -0
- package/dist/src/services/quotas/mutate-service.d.ts +5 -0
- package/dist/src/services/quotas/mutate-service.js +37 -0
- package/dist/src/services/quotas/query-service.d.ts +27 -0
- package/dist/src/services/quotas/query-service.js +116 -0
- package/dist/src/services/quotas/utils-service.d.ts +4 -0
- package/dist/src/services/quotas/utils-service.js +22 -0
- package/dist/src/services/tech/tech-provider-mutate-service.d.ts +7 -0
- package/dist/src/services/tech/tech-provider-mutate-service.js +85 -0
- package/dist/src/services/tech/tech-query-service.d.ts +9 -0
- package/dist/src/services/tech/tech-query-service.js +58 -0
- package/dist/src/services/user-preference/service.d.ts +10 -0
- package/dist/src/services/user-preference/service.js +49 -0
- package/dist/src/services/users/external-user-integration-service.d.ts +9 -0
- package/dist/src/services/users/external-user-integration-service.js +25 -0
- package/dist/src/services/users/profile-service.d.ts +40 -0
- package/dist/src/services/users/profile-service.js +385 -0
- package/dist/src/services/users/service.d.ts +64 -0
- package/dist/src/services/users/service.js +152 -0
- package/dist/src/services/users/user-error-service.d.ts +4 -0
- package/dist/src/services/users/user-error-service.js +27 -0
- package/dist/src/services/users/users-group-service.d.ts +16 -0
- package/dist/src/services/users/users-group-service.js +51 -0
- package/dist/src/services/utils/field-naming-service.d.ts +20 -0
- package/dist/src/services/utils/field-naming-service.js +59 -0
- package/dist/src/services/utils/string-utils-service.d.ts +5 -0
- package/dist/src/services/utils/string-utils-service.js +37 -0
- package/dist/src/types/errors.d.ts +9 -0
- package/dist/src/types/errors.js +15 -0
- package/dist/src/types/user-types.d.ts +11 -0
- package/dist/src/types/user-types.js +14 -0
- package/dist/types/errors.d.ts +9 -0
- package/dist/types/errors.js +20 -0
- package/dist/types/user-types.d.ts +11 -0
- package/dist/types/user-types.js +19 -0
- package/package.json +21 -0
- package/prisma/schema.prisma +572 -0
- package/prisma.config.ts +14 -0
- package/src/apollo/README.md +4 -0
- package/src/apollo/resolvers/mutations/mailing-lists.ts +30 -0
- package/src/apollo/resolvers/mutations/user-preferences.ts +33 -0
- package/src/apollo/resolvers/mutations/users.ts +61 -0
- package/src/apollo/resolvers/queries/access.ts +23 -0
- package/src/apollo/resolvers/queries/profile.ts +24 -0
- package/src/apollo/resolvers/queries/quotas.ts +25 -0
- package/src/apollo/resolvers/queries/tech.ts +42 -0
- package/src/apollo/resolvers/queries/user-preferences.ts +34 -0
- package/src/apollo/resolvers/queries/users.ts +33 -0
- package/src/apollo/typedefs/typedefs.ts +139 -0
- package/src/db.ts +19 -0
- package/src/index.ts +52 -0
- package/src/models/chat/chat-message-created-model.ts +126 -0
- package/src/models/chat/chat-message-model.ts +678 -0
- package/src/models/chat/chat-participant-model.ts +248 -0
- package/src/models/chat/chat-session-model.ts +397 -0
- package/src/models/chat/chat-settings-model.ts +336 -0
- package/src/models/feature-flags/feature-flag-model.ts +198 -0
- package/src/models/instances/instance-model.ts +673 -0
- package/src/models/instances/instance-setting-model.ts +235 -0
- package/src/models/mailing-lists/mailing-list-model.ts +177 -0
- package/src/models/mailing-lists/mailing-list-subscriber-model.ts +194 -0
- package/src/models/quotas/resource-quota-total-model.ts +243 -0
- package/src/models/quotas/resource-quota-usage-model.ts +219 -0
- package/src/models/tech/rate-limited-api-event-model.ts +190 -0
- package/src/models/tech/rate-limited-api-model.ts +171 -0
- package/src/models/tech/tech-model.ts +360 -0
- package/src/models/tech/tech-provider-api-key-model.ts +289 -0
- package/src/models/tech/tech-provider-model.ts +247 -0
- package/src/models/users/external-user-integration-model.ts +236 -0
- package/src/models/users/user-error-model.ts +219 -0
- package/src/models/users/user-error-summary-model.ts +216 -0
- package/src/models/users/user-group-member-model.ts +233 -0
- package/src/models/users/user-group-model.ts +174 -0
- package/src/models/users/user-model.ts +172 -0
- package/src/models/users/user-preference-model.ts +285 -0
- package/src/models/users/user-profile-model.ts +207 -0
- package/src/services/access/access-service.ts +36 -0
- package/src/services/access/encrypt-service.ts +122 -0
- package/src/services/api-usage/api-usage-base-service.ts +95 -0
- package/src/services/console/service.ts +24 -0
- package/src/services/db/pg/pg-estimate-size-service.ts +119 -0
- package/src/services/files/types.ts +7 -0
- package/src/services/files/walk-dir-service.ts +135 -0
- package/src/services/locale/countries.ts +483 -0
- package/src/services/mailing-lists/mailing-list-subscriber-service.ts +54 -0
- package/src/services/process/sleep.ts +7 -0
- package/src/services/quotas/mutate-service.ts +66 -0
- package/src/services/quotas/query-service.ts +197 -0
- package/src/services/quotas/utils-service.ts +29 -0
- package/src/services/tech/tech-provider-mutate-service.ts +136 -0
- package/src/services/tech/tech-query-service.ts +93 -0
- package/src/services/user-preference/service.ts +110 -0
- package/src/services/users/external-user-integration-service.ts +51 -0
- package/src/services/users/profile-service.ts +513 -0
- package/src/services/users/service.ts +293 -0
- package/src/services/users/user-error-service.ts +74 -0
- package/src/services/users/users-group-service.ts +85 -0
- package/src/services/utils/field-naming-service.ts +78 -0
- package/src/services/utils/string-utils-service.ts +48 -0
- package/src/types/errors.ts +18 -0
- package/src/types/user-types.ts +19 -0
- 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
|
+
}
|