diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2024-05-27 17:15:11 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-27 17:15:11 +0900 |
| commit | 3ffbf6296f44c6f8837f0b8533a3b60b64403bf9 (patch) | |
| tree | 8c550ce179f61238f2a0beaf0209bdcce2799ba5 /packages/backend/src/core/AnnouncementService.ts | |
| parent | fix(backend): `read:admin:show-user` と `read:admin:show-users` を統合 (#... (diff) | |
| download | sharkey-3ffbf6296f44c6f8837f0b8533a3b60b64403bf9.tar.gz sharkey-3ffbf6296f44c6f8837f0b8533a3b60b64403bf9.tar.bz2 sharkey-3ffbf6296f44c6f8837f0b8533a3b60b64403bf9.zip | |
feat: 個別のお知らせにリンクで飛べるように (#13885)
* feat(announcement): 個別のお知らせにリンクで飛べるように (MisskeyIO#639)
(cherry picked from commit f6bf7f992a78e54d86a4701dbd1e4fda7ef4eb27)
* fix
Co-authored-by: まっちゃとーにゅ <17376330+u1-liquid@users.noreply.github.com>
* fix
Co-authored-by: まっちゃとーにゅ <17376330+u1-liquid@users.noreply.github.com>
* 一覧ページではお知らせpanel全体を押せるように
* お知らせバーは個別ページに飛ばすように
* Update Changelog
* spdx
* attempt to fox test
* remove unnecessary thong
* `announcement` → `announcements/show`
* リンクを押せる場所をタイトルと日付部分のみに変更
---------
Co-authored-by: まっちゃとーにゅ <17376330+u1-liquid@users.noreply.github.com>
Diffstat (limited to 'packages/backend/src/core/AnnouncementService.ts')
| -rw-r--r-- | packages/backend/src/core/AnnouncementService.ts | 49 |
1 files changed, 22 insertions, 27 deletions
diff --git a/packages/backend/src/core/AnnouncementService.ts b/packages/backend/src/core/AnnouncementService.ts index b298a70929..9b60df2cae 100644 --- a/packages/backend/src/core/AnnouncementService.ts +++ b/packages/backend/src/core/AnnouncementService.ts @@ -4,13 +4,14 @@ */ import { Inject, Injectable } from '@nestjs/common'; -import { Brackets } from 'typeorm'; +import { Brackets, EntityNotFoundError } from 'typeorm'; import { DI } from '@/di-symbols.js'; import type { MiUser } from '@/models/User.js'; import type { AnnouncementReadsRepository, AnnouncementsRepository, MiAnnouncement, MiAnnouncementRead, UsersRepository } from '@/models/_.js'; import { bindThis } from '@/decorators.js'; import { Packed } from '@/misc/json-schema.js'; import { IdService } from '@/core/IdService.js'; +import { AnnouncementEntityService } from '@/core/entities/AnnouncementEntityService.js'; import { GlobalEventService } from '@/core/GlobalEventService.js'; import { ModerationLogService } from '@/core/ModerationLogService.js'; @@ -29,6 +30,7 @@ export class AnnouncementService { private idService: IdService, private globalEventService: GlobalEventService, private moderationLogService: ModerationLogService, + private announcementEntityService: AnnouncementEntityService, ) { } @@ -79,7 +81,7 @@ export class AnnouncementService { userId: values.userId, }).then(x => this.announcementsRepository.findOneByOrFail(x.identifiers[0])); - const packed = (await this.packMany([announcement]))[0]; + const packed = await this.announcementEntityService.pack(announcement); if (values.userId) { this.globalEventService.publishMainStream(values.userId, 'announcementCreated', { @@ -178,6 +180,24 @@ export class AnnouncementService { } @bindThis + public async getAnnouncement(announcementId: MiAnnouncement['id'], me: MiUser | null): Promise<Packed<'Announcement'>> { + const announcement = await this.announcementsRepository.findOneByOrFail({ id: announcementId }); + if (me) { + if (announcement.userId && announcement.userId !== me.id) { + throw new EntityNotFoundError(this.announcementsRepository.metadata.target, { id: announcementId }); + } + + const read = await this.announcementReadsRepository.findOneBy({ + announcementId: announcement.id, + userId: me.id, + }); + return this.announcementEntityService.pack({ ...announcement, isRead: read !== null }, me); + } else { + return this.announcementEntityService.pack(announcement, null); + } + } + + @bindThis public async read(user: MiUser, announcementId: MiAnnouncement['id']): Promise<void> { try { await this.announcementReadsRepository.insert({ @@ -193,29 +213,4 @@ export class AnnouncementService { this.globalEventService.publishMainStream(user.id, 'readAllAnnouncements'); } } - - @bindThis - public async packMany( - announcements: MiAnnouncement[], - me?: { id: MiUser['id'] } | null | undefined, - options?: { - reads?: MiAnnouncementRead[]; - }, - ): Promise<Packed<'Announcement'>[]> { - const reads = me ? (options?.reads ?? await this.getReads(me.id)) : []; - return announcements.map(announcement => ({ - id: announcement.id, - createdAt: this.idService.parse(announcement.id).date.toISOString(), - updatedAt: announcement.updatedAt?.toISOString() ?? null, - text: announcement.text, - title: announcement.title, - imageUrl: announcement.imageUrl, - icon: announcement.icon, - display: announcement.display, - needConfirmationToRead: announcement.needConfirmationToRead, - silence: announcement.silence, - forYou: announcement.userId === me?.id, - isRead: reads.some(read => read.announcementId === announcement.id), - })); - } } |