enhance: チャットルームに招待されたときの通知を追加

This commit is contained in:
syuilo 2025-03-25 15:25:43 +09:00
parent 2fc3baa988
commit 304d0eb83b
15 changed files with 105 additions and 13 deletions

View file

@ -16,6 +16,7 @@ import { bindThis } from '@/decorators.js';
import { FilterUnionByProperty, groupedNotificationTypes } from '@/types.js';
import { CacheService } from '@/core/CacheService.js';
import { RoleEntityService } from './RoleEntityService.js';
import { ChatEntityService } from './ChatEntityService.js';
import type { OnModuleInit } from '@nestjs/common';
import type { UserEntityService } from './UserEntityService.js';
import type { NoteEntityService } from './NoteEntityService.js';
@ -27,6 +28,7 @@ export class NotificationEntityService implements OnModuleInit {
private userEntityService: UserEntityService;
private noteEntityService: NoteEntityService;
private roleEntityService: RoleEntityService;
private chatEntityService: ChatEntityService;
constructor(
private moduleRef: ModuleRef,
@ -41,9 +43,6 @@ export class NotificationEntityService implements OnModuleInit {
private followRequestsRepository: FollowRequestsRepository,
private cacheService: CacheService,
//private userEntityService: UserEntityService,
//private noteEntityService: NoteEntityService,
) {
}
@ -51,6 +50,7 @@ export class NotificationEntityService implements OnModuleInit {
this.userEntityService = this.moduleRef.get('UserEntityService');
this.noteEntityService = this.moduleRef.get('NoteEntityService');
this.roleEntityService = this.moduleRef.get('RoleEntityService');
this.chatEntityService = this.moduleRef.get('ChatEntityService');
}
/**
@ -59,7 +59,6 @@ export class NotificationEntityService implements OnModuleInit {
async #packInternal <T extends MiNotification | MiGroupedNotification> (
src: T,
meId: MiUser['id'],
options: {
checkValidNotifier?: boolean;
},
@ -92,7 +91,7 @@ export class NotificationEntityService implements OnModuleInit {
// if the user has been deleted, don't show this notification
if (needsUser && !userIfNeed) return null;
// #region Grouped notifications
//#region Grouped notifications
if (notification.type === 'reaction:grouped') {
const reactions = (await Promise.all(notification.reactions.map(async reaction => {
const user = hint?.packedUsers != null
@ -137,7 +136,7 @@ export class NotificationEntityService implements OnModuleInit {
users,
});
}
// #endregion
//#endregion
const needsRole = notification.type === 'roleAssigned';
const role = needsRole ? await this.roleEntityService.pack(notification.roleId) : undefined;
@ -146,6 +145,13 @@ export class NotificationEntityService implements OnModuleInit {
return null;
}
const needsChatRoomInvitation = notification.type === 'chatRoomInvitationReceived';
const chatRoomInvitation = needsChatRoomInvitation ? await this.chatEntityService.packRoomInvitation(notification.invitationId, { id: meId }) : undefined;
// if the invitation has been deleted, don't show this notification
if (needsChatRoomInvitation && !chatRoomInvitation) {
return null;
}
return await awaitAll({
id: notification.id,
createdAt: new Date(notification.createdAt).toISOString(),
@ -159,6 +165,9 @@ export class NotificationEntityService implements OnModuleInit {
...(notification.type === 'roleAssigned' ? {
role: role,
} : {}),
...(notification.type === 'chatRoomInvitationReceived' ? {
invitation: chatRoomInvitation,
} : {}),
...(notification.type === 'followRequestAccepted' ? {
message: notification.message,
} : {}),
@ -236,7 +245,7 @@ export class NotificationEntityService implements OnModuleInit {
public async pack(
src: MiNotification | MiGroupedNotification,
meId: MiUser['id'],
options: {
checkValidNotifier?: boolean;
},