@messenger-box/platform-server 10.0.3-alpha.50 → 10.0.3-alpha.54
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/lib/containers/containers.js.map +1 -1
- package/lib/graphql/resolvers/channel-member.d.ts +2 -1
- package/lib/graphql/resolvers/channel-member.js +13 -3
- package/lib/graphql/resolvers/channel-member.js.map +1 -1
- package/lib/graphql/resolvers/channel.d.ts +2 -1
- package/lib/graphql/resolvers/channel.js +260 -126
- package/lib/graphql/resolvers/channel.js.map +1 -1
- package/lib/graphql/resolvers/extended-token-account.d.ts +2 -1
- package/lib/graphql/resolvers/extended-token-account.js +90 -23
- package/lib/graphql/resolvers/extended-token-account.js.map +1 -1
- package/lib/graphql/resolvers/post-thread.js +285 -179
- package/lib/graphql/resolvers/post-thread.js.map +1 -1
- package/lib/graphql/resolvers/post.js +669 -242
- package/lib/graphql/resolvers/post.js.map +1 -1
- package/lib/graphql/resolvers/reaction.d.ts +2 -1
- package/lib/graphql/resolvers/reaction.js +96 -14
- package/lib/graphql/resolvers/reaction.js.map +1 -1
- package/lib/graphql/schema/channel.graphql +331 -39
- package/lib/graphql/schema/channel.graphql.js +1 -1
- package/lib/graphql/schema/post-thread.graphql +157 -21
- package/lib/graphql/schema/post-thread.graphql.js +1 -1
- package/lib/graphql/schema/post.graphql +265 -40
- package/lib/graphql/schema/post.graphql.js +1 -1
- package/lib/graphql/schema/reaction.graphql +71 -13
- package/lib/graphql/schema/reaction.graphql.js +1 -1
- package/lib/graphql/schema/users.graphql +76 -13
- package/lib/graphql/schema/users.graphql.js +1 -1
- package/lib/plugins/channel-moleculer-service.d.ts +21 -1
- package/lib/plugins/channel-moleculer-service.js +417 -115
- package/lib/plugins/channel-moleculer-service.js.map +1 -1
- package/lib/plugins/extended-token-account-moleculer-service.d.ts +25 -1
- package/lib/plugins/extended-token-account-moleculer-service.js +348 -22
- package/lib/plugins/extended-token-account-moleculer-service.js.map +1 -1
- package/lib/plugins/messenger-notification-moleculer-service.d.ts +26 -3
- package/lib/plugins/messenger-notification-moleculer-service.js +403 -57
- package/lib/plugins/messenger-notification-moleculer-service.js.map +1 -1
- package/lib/plugins/post-moleculer-service.d.ts +84 -20
- package/lib/plugins/post-moleculer-service.js +891 -259
- package/lib/plugins/post-moleculer-service.js.map +1 -1
- package/lib/plugins/post-thread-moleculer-service.d.ts +33 -1
- package/lib/plugins/post-thread-moleculer-service.js +320 -13
- package/lib/plugins/post-thread-moleculer-service.js.map +1 -1
- package/lib/services/channel-service.d.ts +185 -33
- package/lib/services/channel-service.js +767 -282
- package/lib/services/channel-service.js.map +1 -1
- package/lib/services/extended-token-account-service.d.ts +127 -14
- package/lib/services/extended-token-account-service.js +459 -52
- package/lib/services/extended-token-account-service.js.map +1 -1
- package/lib/services/messenger-notification-service.d.ts +106 -13
- package/lib/services/messenger-notification-service.js +824 -442
- package/lib/services/messenger-notification-service.js.map +1 -1
- package/lib/services/post-service.d.ts +176 -16
- package/lib/services/post-service.js +553 -119
- package/lib/services/post-service.js.map +1 -1
- package/lib/services/post-thread-service.d.ts +114 -6
- package/lib/services/post-thread-service.js +397 -18
- package/lib/services/post-thread-service.js.map +1 -1
- package/lib/services/proxy-services/channel-microservice.d.ts +4 -3
- package/lib/services/proxy-services/channel-microservice.js +12 -9
- package/lib/services/proxy-services/channel-microservice.js.map +1 -1
- package/lib/services/proxy-services/messenger-notification-microservice.d.ts +128 -8
- package/lib/services/proxy-services/messenger-notification-microservice.js +324 -29
- package/lib/services/proxy-services/messenger-notification-microservice.js.map +1 -1
- package/lib/services/proxy-services/post-microservice.d.ts +186 -13
- package/lib/services/proxy-services/post-microservice.js +543 -59
- package/lib/services/proxy-services/post-microservice.js.map +1 -1
- package/lib/services/proxy-services/post-thread-microservice.d.ts +134 -4
- package/lib/services/proxy-services/post-thread-microservice.js +387 -10
- package/lib/services/proxy-services/post-thread-microservice.js.map +1 -1
- package/lib/services/proxy-services/reaction-microservice.d.ts +161 -3
- package/lib/services/proxy-services/reaction-microservice.js +474 -2
- package/lib/services/proxy-services/reaction-microservice.js.map +1 -1
- package/lib/services/reaction-service.d.ts +124 -4
- package/lib/services/reaction-service.js +415 -3
- package/lib/services/reaction-service.js.map +1 -1
- package/lib/store/models/channel.d.ts +2 -3
- package/lib/store/models/channel.js +169 -71
- package/lib/store/models/channel.js.map +1 -1
- package/lib/store/models/post-thread.d.ts +3 -3
- package/lib/store/models/post-thread.js +96 -14
- package/lib/store/models/post-thread.js.map +1 -1
- package/lib/store/models/post.d.ts +2 -3
- package/lib/store/models/post.js +85 -18
- package/lib/store/models/post.js.map +1 -1
- package/lib/store/models/reaction.d.ts +2 -3
- package/lib/store/models/reaction.js +67 -8
- package/lib/store/models/reaction.js.map +1 -1
- package/lib/store/repositories/channel-repository.d.ts +6 -6
- package/lib/store/repositories/channel-repository.js +5 -2
- package/lib/store/repositories/channel-repository.js.map +1 -1
- package/lib/store/repositories/post-repository.d.ts +6 -6
- package/lib/store/repositories/post-repository.js +5 -2
- package/lib/store/repositories/post-repository.js.map +1 -1
- package/lib/store/repositories/post-thread-repository.d.ts +6 -6
- package/lib/store/repositories/post-thread-repository.js +5 -2
- package/lib/store/repositories/post-thread-repository.js.map +1 -1
- package/lib/store/repositories/reaction-repository.d.ts +6 -6
- package/lib/store/repositories/reaction-repository.js +5 -2
- package/lib/store/repositories/reaction-repository.js.map +1 -1
- package/lib/templates/repositories/ChannelRepository.ts.template +3 -3
- package/lib/templates/repositories/PostRepository.ts.template +3 -3
- package/lib/templates/repositories/PostThreadRepository.ts.template +3 -3
- package/lib/templates/repositories/ReactionRepository.ts.template +3 -4
- package/lib/templates/services/ChannelService.ts.template +277 -38
- package/lib/templates/services/ExtendedTokenAccountService.ts.template +93 -8
- package/lib/templates/services/PostService.ts.template +182 -20
- package/lib/templates/services/PostThreadService.ts.template +100 -5
- package/lib/templates/services/ReactionService.ts.template +129 -2
- package/package.json +3 -3
- package/lib/store/models/common-options.js +0 -20
- package/lib/store/models/common-options.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.js","sources":["../../src/containers/containers.ts"],"sourcesContent":[null],"names":[],"mappings":"siDAgCA;;;;;AAKG;AACI,MAAM,2BAA2B,GAA6C,QAAS,IAAI,mBAC3E,CAAA,IAAE;MACb,CAAA,oBAAmB,EAAC,CAAA,oCAAA,CAAA,CAAA,eAAA,CAAA,oCAAA,CAAA,IAAA,CAAA;;AAEnB,EAAA,IAAA,CAAA,kBAAgB,CAAA,CAAA,EAAA,CAAA,+BAAoC,CAAC,CAAA,eAAM,CAAA,+BAAA,CAAA,IAAA,CAAA;MAC5C,CAAA,YAAA,CAAA,2BAAA,CAAA,CAAA,EAAA,CAAA,2BAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;MAChB,CAAA,2BAAoB,CAAA,CAAA,EAAA,CAAA,mBAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,eAAA,CAAA,UAAA,CAAA,YAAA,CAAA;oDACgB,CAAA,CAAA,gBAAA,EAAA,CAAA,eAAA,CAAA,UAAA,CAAA,YAAA,CAAA;AACnC,EAAA,IAAA,CAAA,YAAA,CAAA,iBAAgB,CAAA,CAAA,EAAA,CAAA,sBAAsC,CAAA,CAAA,gBAAA,EAAA,CAAA,eAAA,CAAA,UAAA,CAAA,YAAA,CAAA;AAC3D,EAAA,IAAA,CAAA,YAAK,CAAA,eAAa,CAAA,CAAA,EAAA,CAAA,oBAA4B,CAAA,CAAA,gBAAA,EAAA,CAAA,eAAA,CAAA,UAAA,CAAA,YAAA,CAAA;gDACV,CAAA,CAAA,EAAA,CAAA,iCAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,eAAA,CAAA,UAAA,CAAA,YAAA,CAAA;AAC/B,CAAA;AACA;AAEL;;AAEK;AACA;AAEL;AACQ,
|
|
1
|
+
{"version":3,"file":"containers.js","sources":["../../src/containers/containers.ts"],"sourcesContent":[null],"names":[],"mappings":"siDAgCA;;;;;AAKG;AACI,MAAM,2BAA2B,GAA6C,QAAS,IAAI,mBAC3E,CAAA,IAAE;MACb,CAAA,oBAAmB,EAAC,CAAA,oCAAA,CAAA,CAAA,eAAA,CAAA,oCAAA,CAAA,IAAA,CAAA;;AAEnB,EAAA,IAAA,CAAA,kBAAgB,CAAA,CAAA,EAAA,CAAA,+BAAoC,CAAC,CAAA,eAAM,CAAA,+BAAA,CAAA,IAAA,CAAA;MAC5C,CAAA,YAAA,CAAA,2BAAA,CAAA,CAAA,EAAA,CAAA,2BAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;MAChB,CAAA,2BAAoB,CAAA,CAAA,EAAA,CAAA,mBAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,eAAA,CAAA,UAAA,CAAA,YAAA,CAAA;oDACgB,CAAA,CAAA,gBAAA,EAAA,CAAA,eAAA,CAAA,UAAA,CAAA,YAAA,CAAA;AACnC,EAAA,IAAA,CAAA,YAAA,CAAA,iBAAgB,CAAA,CAAA,EAAA,CAAA,sBAAsC,CAAA,CAAA,gBAAA,EAAA,CAAA,eAAA,CAAA,UAAA,CAAA,YAAA,CAAA;AAC3D,EAAA,IAAA,CAAA,YAAK,CAAA,eAAa,CAAA,CAAA,EAAA,CAAA,oBAA4B,CAAA,CAAA,gBAAA,EAAA,CAAA,eAAA,CAAA,UAAA,CAAA,YAAA,CAAA;gDACV,CAAA,CAAA,EAAA,CAAA,iCAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,eAAA,CAAA,UAAA,CAAA,YAAA,CAAA;AAC/B,CAAA;AACA;AAEL;;AAEK;AACA;AAEL;AACQ,4BAAwB,GAAA,QAAA,IAAA,IAAA,eAAA,CAAA,IAAA,IAAA;AAC3B,EAAA,IAAA,CAAA,YAAA,CAAA,2BAAkB,CAAA,CAAA,EAAA,CAAA,2BAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;AAClB,EAAA,IAAA,CAAA,YAAA,CAAA,iBAA2B,CAAA,CAAA,EAAA,CAAA,iBAAc,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;AAC9C,EAAA,IAAA,CAAA,YAAyB,CAAA,cAAa,CAAA,CAAA,EAAA,CAAiB,cAAC,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;wCAClB,CAAA,CAAA,EAAA,CAAA,oBAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;AACjC,EAAA,IAAA,CAAA,YAAA,CAAA,kBAAkB,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;AAClB,EAAA,IAAA,CAAA,YAAA,CAAA,cAAgB,CAAU,CAAC,EAAA,CAAA,cAAc,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;AAE9C,EAAA,IAAA,CAAA,YAAuB,CAAA,WAAa,CAAA,CAAA,EAAA,CAAA,WAAgB,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;qCAChB,CAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;AAC/B,EAAA,IAAA,CAAA,YAAA,CAAA,eAAkB,CAAA,CAAA,EAAA,CAAA,eAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;AAClB,EAAA,IAAA,CAAA,YAAA,CAAA,4BAAuC,CAAC,CAAC,EAAA,CAAA,4BAAA,CAAA,CAAA,gBAAA,EAAA,CAAA,mBAAA,EAAA;AAE9C,CAAA"}
|
|
@@ -1,16 +1,26 @@
|
|
|
1
|
-
const channelMemberResolvers =
|
|
1
|
+
const channelMemberResolvers = options => ({
|
|
2
2
|
Channel: {
|
|
3
3
|
creator(src, args, {
|
|
4
4
|
accountService
|
|
5
5
|
}) {
|
|
6
|
-
|
|
6
|
+
options.logger.trace('(Channel.creator) src.creator [%s]', src.creator);
|
|
7
|
+
// Check if creator exists and is not null/undefined before calling service
|
|
8
|
+
if (!src.creator || src.creator === null || src.creator === undefined) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
return accountService.findAccountById(src.creator.toString());
|
|
7
12
|
}
|
|
8
13
|
},
|
|
9
14
|
ChannelMember: {
|
|
10
15
|
user(src, args, {
|
|
11
16
|
accountService
|
|
12
17
|
}) {
|
|
13
|
-
|
|
18
|
+
options.logger.trace('(ChannelMember.user) src.user [%s]', src.user);
|
|
19
|
+
// Check if user exists and is not null/undefined before calling service
|
|
20
|
+
if (!src.user || src.user === null || src.user === undefined) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return accountService.findAccountById(src.user.toString());
|
|
14
24
|
}
|
|
15
25
|
},
|
|
16
26
|
Query: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-member.js","sources":["../../../src/graphql/resolvers/channel-member.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel-member.js","sources":["../../../src/graphql/resolvers/channel-member.ts"],"sourcesContent":[null],"names":[],"mappings":"MAGa,sBAAsB,GAAG,OAA0B,KAAgB;AAC5E,EAAA,OAAA,EAAO;AACH,IAAA,OAAA,CAAA,GAAO,EAAI,IAAE;;;AAIT,MAAA,OAAA,CAAA,MAAQ,CAAC,KAAO,CAAA,yCAA4C,CAAA,OAAA,CAAA;AACxD;cACH,CAAA,OAAA,IAAA,GAAA,CAAA,OAAA,KAAA,IAAA,IAAA,GAAA,CAAA,OAAA,KAAA,SAAA,EAAA;eAEM,IAAA;;AAEd,MAAA,OAAA,cAAA,CAAA,eAAA,CAAA,GAAA,CAAA,OAAA,CAAA,QAAA,EAAA,CAAA;AACD;AACI,GAAA;eACW,EAAA;YAEP,EAAwE,IAAA,EAAA;AACxE,MAAA;AACI,KAAA,EAAA;aACH,CAAA,MAAA,CAAA,KAAA,CAAA,oCAAA,EAAA,GAAA,CAAA,IAAA,CAAA;;UAGJ,CAAA,GAAA,CAAA,IAAA,IAAA,GAAA,CAAA,IAAA,KAAA,IAAA,IAAA,GAAA,CAAA,IAAA,KAAA,SAAA,EAAA;AACJ,QAAA,OAAA,IAAA;AACD;AACA,MAAA,qBAAY,CAAA,eAAA,CAAA,GAAA,CAAA,IAAA,CAAA,QAAA,EAAA,CAAA;AACf;;;;"}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import {RoomType}from'common/server';const channelResolvers =
|
|
1
|
+
import {RoomType}from'common/server';const channelResolvers = options => ({
|
|
2
2
|
Channel: {
|
|
3
3
|
creator(src, args, {
|
|
4
4
|
accountService
|
|
5
5
|
}) {
|
|
6
|
+
options.logger.trace('(Channel.creator) src.creator [%s]', src.creator);
|
|
7
|
+
// Check if creator exists and is not null/undefined before calling service
|
|
8
|
+
if (!src.creator || src.creator === null || src.creator === undefined) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
6
11
|
return accountService.findAccountById(src.creator.toString());
|
|
7
12
|
},
|
|
8
13
|
lastMessage(src, args, {
|
|
9
14
|
postService
|
|
10
15
|
}) {
|
|
16
|
+
options.logger.trace('(Channel.lastMessage) src.id [%s]', src.id);
|
|
17
|
+
// Check if src.id exists before calling service
|
|
18
|
+
if (!src.id || src.id === null || src.id === undefined) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
11
21
|
return postService.getLastMessage(src.id);
|
|
12
22
|
}
|
|
13
23
|
},
|
|
@@ -18,27 +28,46 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
18
28
|
channelService,
|
|
19
29
|
userContext
|
|
20
30
|
}) {
|
|
31
|
+
options.logger.trace('(Query.channelByName) name [%s]', name);
|
|
32
|
+
if (!name) {
|
|
33
|
+
options.logger.warn('Missing channel name');
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
21
36
|
return channelService.getByName(name);
|
|
22
|
-
// return channelService.getByName(userContext.teamId, name) as Promise<IChannel>;
|
|
37
|
+
// return channelService.getByName(userContext.teamId, name) as unknown as Promise<IChannel>;
|
|
23
38
|
},
|
|
24
39
|
channels(src, _, {
|
|
25
40
|
channelService,
|
|
26
41
|
userContext
|
|
27
42
|
}) {
|
|
43
|
+
options.logger.trace('(Query.channels) userContext [%j]', {
|
|
44
|
+
accountId: userContext.accountId,
|
|
45
|
+
teamId: userContext.teamId,
|
|
46
|
+
orgId: userContext.orgId
|
|
47
|
+
});
|
|
28
48
|
const {
|
|
29
49
|
accountId,
|
|
30
50
|
teamId,
|
|
31
51
|
orgId
|
|
32
52
|
} = userContext;
|
|
53
|
+
if (!accountId || !teamId) {
|
|
54
|
+
options.logger.warn('Missing required user context');
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
33
57
|
return channelService.getChannels(teamId, accountId, false, new Date().getTime(), orgId);
|
|
34
58
|
},
|
|
35
59
|
async channelsByUser(src, args, {
|
|
36
60
|
channelService,
|
|
37
61
|
userContext
|
|
38
62
|
}) {
|
|
63
|
+
options.logger.trace('(Query.channelsByUser) args [%j]', args);
|
|
39
64
|
const {
|
|
40
65
|
accountId
|
|
41
66
|
} = userContext;
|
|
67
|
+
if (!accountId) {
|
|
68
|
+
options.logger.warn('Missing accountId in user context');
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
42
71
|
const {
|
|
43
72
|
criteria,
|
|
44
73
|
role,
|
|
@@ -46,105 +75,111 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
46
75
|
} = args || {
|
|
47
76
|
criteria: {}
|
|
48
77
|
};
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
// Fetch SERVICE channels separately (no orgName restriction)
|
|
68
|
-
const serviceChannels = await channelService.getAll({
|
|
69
|
-
...rest,
|
|
70
|
-
criteria: {
|
|
71
|
-
type: RoomType.Service
|
|
78
|
+
try {
|
|
79
|
+
// Check if Service type is included in the query
|
|
80
|
+
const includesService = criteria?.type === RoomType.Service || Array.isArray(criteria?.type) && criteria.type.includes(RoomType.Service) || criteria?.type?.$in && criteria.type.$in.includes(RoomType.Service);
|
|
81
|
+
if (includesService) {
|
|
82
|
+
// If Service type is included, fetch SERVICE and non-SERVICE channels separately
|
|
83
|
+
const {
|
|
84
|
+
type,
|
|
85
|
+
...restCriteria
|
|
86
|
+
} = criteria;
|
|
87
|
+
// Build non-service types from original query
|
|
88
|
+
let nonServiceTypes;
|
|
89
|
+
if (Array.isArray(type)) {
|
|
90
|
+
nonServiceTypes = type.filter(t => t !== RoomType.Service);
|
|
91
|
+
} else if (type?.$in) {
|
|
92
|
+
nonServiceTypes = type.$in.filter(t => t !== RoomType.Service);
|
|
93
|
+
} else {
|
|
94
|
+
// Single type that's not Service (shouldn't happen in this branch but for safety)
|
|
95
|
+
nonServiceTypes = type !== RoomType.Service ? [type] : [];
|
|
72
96
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
let otherChannels = [];
|
|
76
|
-
if (nonServiceTypes.length > 0) {
|
|
77
|
-
otherChannels = await channelService.getAll({
|
|
97
|
+
// Fetch SERVICE channels separately (no orgName restriction)
|
|
98
|
+
const serviceChannels = await channelService.getAll({
|
|
78
99
|
...rest,
|
|
79
100
|
criteria: {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
101
|
+
type: RoomType.Service
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
// Fetch non-SERVICE channels separately (with orgName and member restrictions)
|
|
105
|
+
let otherChannels = [];
|
|
106
|
+
if (nonServiceTypes.length > 0) {
|
|
107
|
+
otherChannels = await channelService.getAll({
|
|
108
|
+
...rest,
|
|
109
|
+
criteria: {
|
|
110
|
+
...restCriteria,
|
|
111
|
+
type: nonServiceTypes.length === 1 ? nonServiceTypes[0] : {
|
|
112
|
+
$in: nonServiceTypes
|
|
113
|
+
},
|
|
114
|
+
members: criteria?.members ?? {
|
|
115
|
+
$elemMatch: {
|
|
116
|
+
user: accountId,
|
|
117
|
+
...(role ? {
|
|
118
|
+
roles: role
|
|
119
|
+
} : {})
|
|
120
|
+
}
|
|
90
121
|
}
|
|
91
122
|
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
// Sort each group separately
|
|
126
|
+
const sortedServiceChannels = serviceChannels.sort((a, b) => (a.title || '').localeCompare(b.title || ''));
|
|
127
|
+
const sortedOtherChannels = otherChannels.sort((a, b) => {
|
|
128
|
+
const aTime = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
129
|
+
const bTime = b.updatedAt ? new Date(b.updatedAt).getTime() : 0;
|
|
130
|
+
return bTime - aTime;
|
|
131
|
+
});
|
|
132
|
+
options.logger.trace('SERVICE channels count: %d', sortedServiceChannels.length);
|
|
133
|
+
options.logger.trace('Other channels count: %d', sortedOtherChannels.length);
|
|
134
|
+
if (sortedServiceChannels.length > 0) {
|
|
135
|
+
options.logger.trace('First SERVICE channel: %s', sortedServiceChannels[0].title);
|
|
136
|
+
}
|
|
137
|
+
// GUARANTEE: SERVICE channels first, then others
|
|
138
|
+
const finalResult = [...sortedServiceChannels, ...sortedOtherChannels];
|
|
139
|
+
options.logger.trace('Final result order: %j', finalResult.map(ch => `${ch.type}: ${ch.title}`));
|
|
140
|
+
return finalResult;
|
|
141
|
+
} else {
|
|
142
|
+
// No Service type - apply member filter to all channels
|
|
143
|
+
const querycriteria = {
|
|
144
|
+
...criteria,
|
|
145
|
+
members: criteria?.members ?? {
|
|
146
|
+
$elemMatch: {
|
|
147
|
+
user: accountId,
|
|
148
|
+
...(role ? {
|
|
149
|
+
roles: role
|
|
150
|
+
} : {})
|
|
151
|
+
}
|
|
92
152
|
}
|
|
153
|
+
};
|
|
154
|
+
const results = await channelService.getAll({
|
|
155
|
+
...rest,
|
|
156
|
+
criteria: querycriteria
|
|
93
157
|
});
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
console.log('---SERVICE channels count---', sortedServiceChannels.length);
|
|
103
|
-
console.log('---Other channels count---', sortedOtherChannels.length);
|
|
104
|
-
if (sortedServiceChannels.length > 0) {
|
|
105
|
-
console.log('---First SERVICE channel---', sortedServiceChannels[0].title);
|
|
106
|
-
}
|
|
107
|
-
// GUARANTEE: SERVICE channels first, then others
|
|
108
|
-
const finalResult = [...sortedServiceChannels, ...sortedOtherChannels];
|
|
109
|
-
console.log('---Final result order---', finalResult.map(ch => `${ch.type}: ${ch.title}`));
|
|
110
|
-
return finalResult;
|
|
111
|
-
} else {
|
|
112
|
-
// No Service type - apply member filter to all channels
|
|
113
|
-
const querycriteria = {
|
|
114
|
-
...criteria,
|
|
115
|
-
members: criteria?.members ?? {
|
|
116
|
-
$elemMatch: {
|
|
117
|
-
user: accountId,
|
|
118
|
-
...(role ? {
|
|
119
|
-
roles: role
|
|
120
|
-
} : {})
|
|
158
|
+
// Sort results to put SERVICE channels first
|
|
159
|
+
return results.sort((a, b) => {
|
|
160
|
+
// SERVICE channels always come first
|
|
161
|
+
if (a.type === RoomType.Service && b.type !== RoomType.Service) return -1;
|
|
162
|
+
if (a.type !== RoomType.Service && b.type === RoomType.Service) return 1;
|
|
163
|
+
// If both are SERVICE channels, sort by title/name
|
|
164
|
+
if (a.type === RoomType.Service && b.type === RoomType.Service) {
|
|
165
|
+
return (a.title || '').localeCompare(b.title || '');
|
|
121
166
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (a.type === RoomType.Service && b.type !== RoomType.Service) return -1;
|
|
132
|
-
if (a.type !== RoomType.Service && b.type === RoomType.Service) return 1;
|
|
133
|
-
// If both are SERVICE channels, sort by title/name
|
|
134
|
-
if (a.type === RoomType.Service && b.type === RoomType.Service) {
|
|
135
|
-
return (a.title || '').localeCompare(b.title || '');
|
|
136
|
-
}
|
|
137
|
-
// For non-SERVICE channels, sort by updatedAt (most recent first)
|
|
138
|
-
const aTime = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
139
|
-
const bTime = b.updatedAt ? new Date(b.updatedAt).getTime() : 0;
|
|
140
|
-
return bTime - aTime;
|
|
141
|
-
});
|
|
167
|
+
// For non-SERVICE channels, sort by updatedAt (most recent first)
|
|
168
|
+
const aTime = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
169
|
+
const bTime = b.updatedAt ? new Date(b.updatedAt).getTime() : 0;
|
|
170
|
+
return bTime - aTime;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
} catch (error) {
|
|
174
|
+
options.logger.error('Error in channelsByUser: %o', error);
|
|
175
|
+
return [];
|
|
142
176
|
}
|
|
143
177
|
},
|
|
144
178
|
supportServiceChannels(src, args, {
|
|
145
179
|
channelService,
|
|
146
180
|
userContext
|
|
147
181
|
}) {
|
|
182
|
+
options.logger.trace('(Query.supportServiceChannels) args [%j]', args);
|
|
148
183
|
const {
|
|
149
184
|
accountId
|
|
150
185
|
} = userContext;
|
|
@@ -155,12 +190,17 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
155
190
|
} = args || {
|
|
156
191
|
criteria: {}
|
|
157
192
|
};
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
193
|
+
try {
|
|
194
|
+
return channelService.getAll({
|
|
195
|
+
...rest,
|
|
196
|
+
criteria: {
|
|
197
|
+
...criteria
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
} catch (error) {
|
|
201
|
+
options.logger.error('Error in supportServiceChannels: %o', error);
|
|
202
|
+
return [];
|
|
203
|
+
}
|
|
164
204
|
},
|
|
165
205
|
directChannel(src, {
|
|
166
206
|
id
|
|
@@ -168,6 +208,15 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
168
208
|
channelService,
|
|
169
209
|
userContext
|
|
170
210
|
}) {
|
|
211
|
+
options.logger.trace('(Query.directChannel) id [%s]', id);
|
|
212
|
+
if (!id) {
|
|
213
|
+
options.logger.warn('Missing channel id');
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
if (!userContext.accountId) {
|
|
217
|
+
options.logger.warn('Missing accountId in user context');
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
171
220
|
return channelService.get({
|
|
172
221
|
criteria: {
|
|
173
222
|
id,
|
|
@@ -182,6 +231,11 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
182
231
|
channelService,
|
|
183
232
|
userContext
|
|
184
233
|
}) {
|
|
234
|
+
options.logger.trace('(Query.viewChannelDetail) id [%s]', id);
|
|
235
|
+
if (!id) {
|
|
236
|
+
options.logger.warn('Missing channel id');
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
185
239
|
return channelService.get(id);
|
|
186
240
|
}
|
|
187
241
|
},
|
|
@@ -195,27 +249,49 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
195
249
|
channelService,
|
|
196
250
|
userContext
|
|
197
251
|
}) {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
const formatedName = name[0].toUpperCase() + name.slice(1).toLowerCase();
|
|
204
|
-
const title = formatedName?.replace(/-/g, ' ') ?? '';
|
|
205
|
-
// const channelDetail = await channelService.getByName(userContext.teamId, title);
|
|
206
|
-
const channelDetail = await channelService.getByName(title);
|
|
207
|
-
if (channelDetail) return;
|
|
208
|
-
const channel = channelService.saveChannel({
|
|
209
|
-
type: type || RoomType.Channel,
|
|
210
|
-
orgName: orgId,
|
|
211
|
-
creator: accountId,
|
|
212
|
-
title: title,
|
|
213
|
-
displayName: name?.toLowerCase(),
|
|
214
|
-
topic: name?.toLowerCase(),
|
|
215
|
-
team: team || teamId,
|
|
216
|
-
description
|
|
252
|
+
options.logger.trace('(Mutation.createChannel) args [%j]', {
|
|
253
|
+
name,
|
|
254
|
+
description,
|
|
255
|
+
type,
|
|
256
|
+
team
|
|
217
257
|
});
|
|
218
|
-
|
|
258
|
+
try {
|
|
259
|
+
if (!name) {
|
|
260
|
+
options.logger.warn('Missing channel name');
|
|
261
|
+
throw new Error('Channel name is required');
|
|
262
|
+
}
|
|
263
|
+
if (!userContext.accountId) {
|
|
264
|
+
options.logger.warn('Missing accountId in user context');
|
|
265
|
+
throw new Error('User not authenticated');
|
|
266
|
+
}
|
|
267
|
+
const {
|
|
268
|
+
accountId,
|
|
269
|
+
teamId,
|
|
270
|
+
orgId
|
|
271
|
+
} = userContext;
|
|
272
|
+
const formatedName = name[0].toUpperCase() + name.slice(1).toLowerCase();
|
|
273
|
+
const title = formatedName?.replace(/-/g, ' ') ?? '';
|
|
274
|
+
// const channelDetail = await channelService.getByName(userContext.teamId, title);
|
|
275
|
+
const channelDetail = await channelService.getByName(title);
|
|
276
|
+
if (channelDetail) {
|
|
277
|
+
options.logger.warn('Channel already exists with name: %s', title);
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
const channel = channelService.saveChannel({
|
|
281
|
+
type: type || RoomType.Channel,
|
|
282
|
+
orgName: orgId,
|
|
283
|
+
creator: accountId,
|
|
284
|
+
title: title,
|
|
285
|
+
displayName: name?.toLowerCase(),
|
|
286
|
+
topic: name?.toLowerCase(),
|
|
287
|
+
team: team || teamId,
|
|
288
|
+
description
|
|
289
|
+
});
|
|
290
|
+
return channel;
|
|
291
|
+
} catch (error) {
|
|
292
|
+
options.logger.error('Error creating channel: %o', error);
|
|
293
|
+
throw error;
|
|
294
|
+
}
|
|
219
295
|
},
|
|
220
296
|
addMemberToChannel(src, {
|
|
221
297
|
channelId,
|
|
@@ -224,6 +300,11 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
224
300
|
channelService,
|
|
225
301
|
userContext
|
|
226
302
|
}) {
|
|
303
|
+
options.logger.trace('(Mutation.addMemberToChannel) channelId [%s], memberId [%s]', channelId, memberId);
|
|
304
|
+
if (!channelId || !memberId) {
|
|
305
|
+
options.logger.warn('Missing channelId or memberId');
|
|
306
|
+
throw new Error('Channel ID and Member ID are required');
|
|
307
|
+
}
|
|
227
308
|
return channelService.addMemberToChannel(channelId, memberId);
|
|
228
309
|
},
|
|
229
310
|
saveMembersToChannel(src, {
|
|
@@ -233,6 +314,11 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
233
314
|
channelService,
|
|
234
315
|
userContext
|
|
235
316
|
}) {
|
|
317
|
+
options.logger.trace('(Mutation.saveMembersToChannel) channelId [%s], membersIds [%j]', channelId, membersIds);
|
|
318
|
+
if (!channelId || !membersIds) {
|
|
319
|
+
options.logger.warn('Missing channelId or membersIds');
|
|
320
|
+
throw new Error('Channel ID and Members IDs are required');
|
|
321
|
+
}
|
|
236
322
|
return channelService.saveMembersToChannel({
|
|
237
323
|
membersIds,
|
|
238
324
|
channelId
|
|
@@ -246,23 +332,42 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
246
332
|
channelService,
|
|
247
333
|
userContext
|
|
248
334
|
}) {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
335
|
+
options.logger.trace('(Mutation.createDirectChannel) receiver [%s], displayName [%s]', receiver, displayName);
|
|
336
|
+
try {
|
|
337
|
+
if (!receiver || !displayName) {
|
|
338
|
+
options.logger.warn('Missing receiver or displayName');
|
|
339
|
+
throw new Error('Receiver and display name are required');
|
|
340
|
+
}
|
|
341
|
+
if (!userContext.accountId || !userContext.orgId) {
|
|
342
|
+
options.logger.warn('Missing user context');
|
|
343
|
+
throw new Error('User context required');
|
|
344
|
+
}
|
|
345
|
+
const {
|
|
346
|
+
accountId,
|
|
347
|
+
orgId
|
|
348
|
+
} = userContext;
|
|
349
|
+
return channelService.createDirectChannel({
|
|
350
|
+
sender: accountId,
|
|
351
|
+
receiver: receiver,
|
|
352
|
+
displayName,
|
|
353
|
+
orgName: orgId,
|
|
354
|
+
channelOptions
|
|
355
|
+
});
|
|
356
|
+
} catch (error) {
|
|
357
|
+
options.logger.error('Error creating direct channel: %o', error);
|
|
358
|
+
throw error;
|
|
359
|
+
}
|
|
260
360
|
},
|
|
261
361
|
hideChannel(src, {
|
|
262
362
|
id
|
|
263
363
|
}, {
|
|
264
364
|
channelService
|
|
265
365
|
}) {
|
|
366
|
+
options.logger.trace('(Mutation.hideChannel) id [%s]', id);
|
|
367
|
+
if (!id) {
|
|
368
|
+
options.logger.warn('Missing channel id');
|
|
369
|
+
throw new Error('Channel ID is required');
|
|
370
|
+
}
|
|
266
371
|
return channelService.hideChannel(id);
|
|
267
372
|
},
|
|
268
373
|
leaveChannel(src, {
|
|
@@ -270,6 +375,11 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
270
375
|
}, {
|
|
271
376
|
channelService
|
|
272
377
|
}) {
|
|
378
|
+
options.logger.trace('(Mutation.leaveChannel) id [%s]', id);
|
|
379
|
+
if (!id) {
|
|
380
|
+
options.logger.warn('Missing channel id');
|
|
381
|
+
throw new Error('Channel ID is required');
|
|
382
|
+
}
|
|
273
383
|
return channelService.leaveChannel(id);
|
|
274
384
|
},
|
|
275
385
|
deleteChannel(src, {
|
|
@@ -277,6 +387,11 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
277
387
|
}, {
|
|
278
388
|
channelService
|
|
279
389
|
}) {
|
|
390
|
+
options.logger.trace('(Mutation.deleteChannel) id [%s]', id);
|
|
391
|
+
if (!id) {
|
|
392
|
+
options.logger.warn('Missing channel id');
|
|
393
|
+
throw new Error('Channel ID is required');
|
|
394
|
+
}
|
|
280
395
|
return channelService.deleteChannel(id);
|
|
281
396
|
},
|
|
282
397
|
viewChannel(src, {
|
|
@@ -285,6 +400,15 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
285
400
|
userContext,
|
|
286
401
|
channelService
|
|
287
402
|
}) {
|
|
403
|
+
options.logger.trace('(Mutation.viewChannel) id [%s], accountId [%s]', id, userContext.accountId);
|
|
404
|
+
if (!id) {
|
|
405
|
+
options.logger.warn('Missing channel id');
|
|
406
|
+
throw new Error('Channel ID is required');
|
|
407
|
+
}
|
|
408
|
+
if (!userContext.accountId) {
|
|
409
|
+
options.logger.warn('Missing accountId in user context');
|
|
410
|
+
throw new Error('User context required');
|
|
411
|
+
}
|
|
288
412
|
return channelService.viewChannel(id, userContext.accountId);
|
|
289
413
|
},
|
|
290
414
|
async sendNotificationOfUnreadMessages(src, {
|
|
@@ -293,8 +417,18 @@ import {RoomType}from'common/server';const channelResolvers = () => ({
|
|
|
293
417
|
}, {
|
|
294
418
|
messengerNotificationService
|
|
295
419
|
}) {
|
|
296
|
-
|
|
297
|
-
|
|
420
|
+
options.logger.trace('(Mutation.sendNotificationOfUnreadMessages) unit [%s], value [%s]', unit, value);
|
|
421
|
+
try {
|
|
422
|
+
if (!unit || value === undefined || value === null) {
|
|
423
|
+
options.logger.warn('Missing unit or value');
|
|
424
|
+
throw new Error('Unit and value are required');
|
|
425
|
+
}
|
|
426
|
+
await messengerNotificationService.sendNotificationOfUnreadMessages(unit, value);
|
|
427
|
+
return true;
|
|
428
|
+
} catch (error) {
|
|
429
|
+
options.logger.error('Error sending notification: %o', error);
|
|
430
|
+
return false;
|
|
431
|
+
}
|
|
298
432
|
}
|
|
299
433
|
}
|
|
300
434
|
});export{channelResolvers};//# sourceMappingURL=channel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sources":["../../../src/graphql/resolvers/channel.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel.js","sources":["../../../src/graphql/resolvers/channel.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|