@@ -42,13 +42,26 @@ import { MetaEntityService } from '@/core/entities/MetaEntityService.js';
42
42
import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityService.js' ;
43
43
import { ClipEntityService } from '@/core/entities/ClipEntityService.js' ;
44
44
import { ChannelEntityService } from '@/core/entities/ChannelEntityService.js' ;
45
- import type { ChannelsRepository , ClipsRepository , FlashsRepository , GalleryPostsRepository , MiMeta , NotesRepository , PagesRepository , ReversiGamesRepository , UserProfilesRepository , UsersRepository } from '@/models/_.js' ;
45
+ import type {
46
+ AnnouncementsRepository ,
47
+ ChannelsRepository ,
48
+ ClipsRepository ,
49
+ FlashsRepository ,
50
+ GalleryPostsRepository ,
51
+ MiMeta ,
52
+ NotesRepository ,
53
+ PagesRepository ,
54
+ ReversiGamesRepository ,
55
+ UserProfilesRepository ,
56
+ UsersRepository ,
57
+ } from '@/models/_.js' ;
46
58
import type Logger from '@/logger.js' ;
47
59
import { handleRequestRedirectToOmitSearch } from '@/misc/fastify-hook-handlers.js' ;
48
60
import { bindThis } from '@/decorators.js' ;
49
61
import { FlashEntityService } from '@/core/entities/FlashEntityService.js' ;
50
62
import { RoleService } from '@/core/RoleService.js' ;
51
63
import { ReversiGameEntityService } from '@/core/entities/ReversiGameEntityService.js' ;
64
+ import { AnnouncementEntityService } from '@/core/entities/AnnouncementEntityService.js' ;
52
65
import { FeedService } from './FeedService.js' ;
53
66
import { UrlPreviewService } from './UrlPreviewService.js' ;
54
67
import { ClientLoggerService } from './ClientLoggerService.js' ;
@@ -103,6 +116,9 @@ export class ClientServerService {
103
116
@Inject ( DI . reversiGamesRepository )
104
117
private reversiGamesRepository : ReversiGamesRepository ,
105
118
119
+ @Inject ( DI . announcementsRepository )
120
+ private announcementsRepository : AnnouncementsRepository ,
121
+
106
122
private flashEntityService : FlashEntityService ,
107
123
private userEntityService : UserEntityService ,
108
124
private noteEntityService : NoteEntityService ,
@@ -112,6 +128,7 @@ export class ClientServerService {
112
128
private clipEntityService : ClipEntityService ,
113
129
private channelEntityService : ChannelEntityService ,
114
130
private reversiGameEntityService : ReversiGameEntityService ,
131
+ private announcementEntityService : AnnouncementEntityService ,
115
132
private urlPreviewService : UrlPreviewService ,
116
133
private feedService : FeedService ,
117
134
private roleService : RoleService ,
@@ -776,6 +793,24 @@ export class ClientServerService {
776
793
return await renderBase ( reply ) ;
777
794
}
778
795
} ) ;
796
+
797
+ // 個別お知らせページ
798
+ fastify . get < { Params : { announcementId : string ; } } > ( '/announcements/:announcementId' , async ( request , reply ) => {
799
+ const announcement = await this . announcementsRepository . findOneBy ( {
800
+ id : request . params . announcementId ,
801
+ } ) ;
802
+
803
+ if ( announcement ) {
804
+ const _announcement = await this . announcementEntityService . pack ( announcement ) ;
805
+ reply . header ( 'Cache-Control' , 'public, max-age=3600' ) ;
806
+ return await reply . view ( 'announcement' , {
807
+ announcement : _announcement ,
808
+ ...await this . generateCommonPugData ( this . meta ) ,
809
+ } ) ;
810
+ } else {
811
+ return await renderBase ( reply ) ;
812
+ }
813
+ } ) ;
779
814
//#endregion
780
815
781
816
//#region noindex pages
0 commit comments