summaryrefslogtreecommitdiff
path: root/packages/backend
diff options
context:
space:
mode:
authorsyuilo <4439005+syuilo@users.noreply.github.com>2025-05-10 11:25:00 +0900
committersyuilo <4439005+syuilo@users.noreply.github.com>2025-05-10 11:25:00 +0900
commit0a0d42bb4865320c728ff892ffe41a9bc060e3c2 (patch)
tree8c2d235d602499f35dac53ffb431e18c9cfc340b /packages/backend
parentrefactor(frontend): use* 関数の格納場所のフォルダ名を composabl... (diff)
downloadmisskey-0a0d42bb4865320c728ff892ffe41a9bc060e3c2.tar.gz
misskey-0a0d42bb4865320c728ff892ffe41a9bc060e3c2.tar.bz2
misskey-0a0d42bb4865320c728ff892ffe41a9bc060e3c2.zip
enhance: 招待されているが参加していないルームを開いたときに、招待を承認するかどうか尋ねるように
Diffstat (limited to 'packages/backend')
-rw-r--r--packages/backend/src/core/entities/ChatEntityService.ts17
-rw-r--r--packages/backend/src/models/json-schema/chat-room.ts4
2 files changed, 17 insertions, 4 deletions
diff --git a/packages/backend/src/core/entities/ChatEntityService.ts b/packages/backend/src/core/entities/ChatEntityService.ts
index da112d5444..6bce2413fd 100644
--- a/packages/backend/src/core/entities/ChatEntityService.ts
+++ b/packages/backend/src/core/entities/ChatEntityService.ts
@@ -238,13 +238,15 @@ export class ChatEntityService {
options?: {
_hint_?: {
packedOwners: Map<MiChatRoom['id'], Packed<'UserLite'>>;
- memberships?: Map<MiChatRoom['id'], MiChatRoomMembership | null | undefined>;
+ myMemberships?: Map<MiChatRoom['id'], MiChatRoomMembership | null | undefined>;
+ myInvitations?: Map<MiChatRoom['id'], MiChatRoomInvitation | null | undefined>;
};
},
): Promise<Packed<'ChatRoom'>> {
const room = typeof src === 'object' ? src : await this.chatRoomsRepository.findOneByOrFail({ id: src });
- const membership = me && me.id !== room.ownerId ? (options?._hint_?.memberships?.get(room.id) ?? await this.chatRoomMembershipsRepository.findOneBy({ roomId: room.id, userId: me.id })) : null;
+ const membership = me && me.id !== room.ownerId ? (options?._hint_?.myMemberships?.get(room.id) ?? await this.chatRoomMembershipsRepository.findOneBy({ roomId: room.id, userId: me.id })) : null;
+ const invitation = me && me.id !== room.ownerId ? (options?._hint_?.myInvitations?.get(room.id) ?? await this.chatRoomInvitationsRepository.findOneBy({ roomId: room.id, userId: me.id })) : null;
return {
id: room.id,
@@ -254,6 +256,7 @@ export class ChatEntityService {
ownerId: room.ownerId,
owner: options?._hint_?.packedOwners.get(room.ownerId) ?? await this.userEntityService.pack(room.owner ?? room.ownerId, me),
isMuted: membership != null ? membership.isMuted : false,
+ invitationExists: invitation != null,
};
}
@@ -278,7 +281,7 @@ export class ChatEntityService {
const owners = _rooms.map(x => x.owner ?? x.ownerId);
- const [packedOwners, memberships] = await Promise.all([
+ const [packedOwners, myMemberships, myInvitations] = await Promise.all([
this.userEntityService.packMany(owners, me)
.then(users => new Map(users.map(u => [u.id, u]))),
this.chatRoomMembershipsRepository.find({
@@ -287,9 +290,15 @@ export class ChatEntityService {
userId: me.id,
},
}).then(memberships => new Map(_rooms.map(r => [r.id, memberships.find(m => m.roomId === r.id)]))),
+ this.chatRoomInvitationsRepository.find({
+ where: {
+ roomId: In(_rooms.map(x => x.id)),
+ userId: me.id,
+ },
+ }).then(invitations => new Map(_rooms.map(r => [r.id, invitations.find(i => i.roomId === r.id)]))),
]);
- return Promise.all(_rooms.map(room => this.packRoom(room, me, { _hint_: { packedOwners, memberships } })));
+ return Promise.all(_rooms.map(room => this.packRoom(room, me, { _hint_: { packedOwners, myMemberships, myInvitations } })));
}
@bindThis
diff --git a/packages/backend/src/models/json-schema/chat-room.ts b/packages/backend/src/models/json-schema/chat-room.ts
index e97556e378..e628a9baa3 100644
--- a/packages/backend/src/models/json-schema/chat-room.ts
+++ b/packages/backend/src/models/json-schema/chat-room.ts
@@ -36,5 +36,9 @@ export const packedChatRoomSchema = {
type: 'boolean',
optional: true, nullable: false,
},
+ invitationExists: {
+ type: 'boolean',
+ optional: true, nullable: false,
+ },
},
} as const;