@@ -15,6 +15,8 @@ import { scheduleManager } from '~/utils/schedule.util'
1515import { getAvatar } from '~/utils/tool.util'
1616
1717import { ConfigsService } from '../configs/configs.service'
18+ import { FileDeletionReason } from '../file/file-reference.model'
19+ import { FileReferenceService } from '../file/file-reference.service'
1820import { OwnerModel } from '../owner/owner.model'
1921import { OwnerService } from '../owner/owner.service'
2022import { ReaderService } from '../reader/reader.service'
@@ -53,6 +55,7 @@ export class CommentLifecycleService implements OnModuleInit, OnModuleDestroy {
5355 private readonly serverlessService : ServerlessService ,
5456 private readonly eventManager : EventManagerService ,
5557 private readonly barkService : BarkPushService ,
58+ private readonly fileReferenceService : FileReferenceService ,
5659 ) { }
5760
5861 async onModuleInit ( ) {
@@ -92,10 +95,22 @@ export class CommentLifecycleService implements OnModuleInit, OnModuleDestroy {
9295 this . commentCreateListenerDisposer ?.( )
9396 }
9497
95- async afterCreateComment (
96- commentId : string ,
97- ipLocation : { ip : string } ,
98- ) {
98+ private async cascadeDeleteFilesIfSpamConfigured ( commentId : string ) {
99+ try {
100+ const config = await this . configsService . get ( 'commentUploadOptions' )
101+ if ( config . deleteFilesOnSpam === false ) return
102+ await this . fileReferenceService . hardDeleteFilesForComment (
103+ commentId ,
104+ FileDeletionReason . CommentSpam ,
105+ )
106+ } catch ( err ) {
107+ this . logger . warn (
108+ `cascade file delete after spam(${ commentId } ) failed: ${ err instanceof Error ? err . message : err } ` ,
109+ )
110+ }
111+ }
112+
113+ async afterCreateComment ( commentId : string , ipLocation : { ip : string } ) {
99114 const comment = await this . commentModel
100115 . findById ( commentId )
101116 . lean ( { getters : true } )
@@ -121,6 +136,7 @@ export class CommentLifecycleService implements OnModuleInit, OnModuleDestroy {
121136 { _id : commentId } ,
122137 { state : CommentState . Junk } ,
123138 )
139+ await this . cascadeDeleteFilesIfSpamConfigured ( commentId )
124140 return
125141 }
126142
@@ -142,10 +158,7 @@ export class CommentLifecycleService implements OnModuleInit, OnModuleDestroy {
142158 } )
143159 }
144160
145- async afterReplyComment (
146- comment : CommentModel ,
147- ipLocation : { ip : string } ,
148- ) {
161+ async afterReplyComment ( comment : CommentModel , ipLocation : { ip : string } ) {
149162 const commentId = comment . id ?? ( comment as any ) . _id ?. toString ( )
150163 const isLoggedInComment = ! ! comment . readerId
151164
@@ -187,7 +200,9 @@ export class CommentLifecycleService implements OnModuleInit, OnModuleDestroy {
187200 . then ( ( readers ) => readers [ 0 ] ?? null )
188201 }
189202
190- private toOwnerIdentity ( ownerInfo : Awaited < ReturnType < OwnerService [ 'getOwnerInfo' ] > > ) {
203+ private toOwnerIdentity (
204+ ownerInfo : Awaited < ReturnType < OwnerService [ 'getOwnerInfo' ] > > ,
205+ ) {
191206 return {
192207 role : 'owner' as const ,
193208 author : ownerInfo . name || '' ,
@@ -221,7 +236,9 @@ export class CommentLifecycleService implements OnModuleInit, OnModuleDestroy {
221236 author : reader . name || comment . author || '' ,
222237 mail : reader . email || comment . mail || '' ,
223238 avatar :
224- reader . image || comment . avatar || getAvatar ( reader . email || comment . mail ) ,
239+ reader . image ||
240+ comment . avatar ||
241+ getAvatar ( reader . email || comment . mail ) ,
225242 }
226243 }
227244 }
@@ -257,14 +274,20 @@ export class CommentLifecycleService implements OnModuleInit, OnModuleDestroy {
257274 const parentIdentity = await this . resolveCommentIdentity ( parent , ownerInfo )
258275
259276 if ( ! refDoc || ! ownerInfo . mail ) return
260- if ( type === CommentReplyMailType . Guest && commentIdentity . role === 'guest' ) {
277+ if (
278+ type === CommentReplyMailType . Guest &&
279+ commentIdentity . role === 'guest'
280+ ) {
261281 commentIdentity =
262282 ! comment . author && ! comment . mail && ! comment . avatar
263283 ? this . toOwnerIdentity ( ownerInfo )
264284 : commentIdentity
265285 }
266286
267- if ( type === CommentReplyMailType . Owner && commentIdentity . role === 'owner' ) {
287+ if (
288+ type === CommentReplyMailType . Owner &&
289+ commentIdentity . role === 'owner'
290+ ) {
268291 return
269292 }
270293
0 commit comments