@@ -3,7 +3,7 @@ defmodule GroupherServer.CMS.Delegate.CommentCurd do
3
3
CURD and operations for article comments
4
4
"""
5
5
import Ecto.Query , warn: false
6
- import Helper.Utils , only: [ done: 1 , ensure: 2 ]
6
+ import Helper.Utils , only: [ done: 1 , ensure: 2 , get_config: 2 ]
7
7
import Helper.ErrorCode
8
8
9
9
import GroupherServer.CMS.Delegate.Helper ,
@@ -31,6 +31,8 @@ defmodule GroupherServer.CMS.Delegate.CommentCurd do
31
31
@ default_comment_meta Embeds.CommentMeta . default_meta ( )
32
32
@ pinned_comment_limit Comment . pinned_comment_limit ( )
33
33
34
+ @ archive_threshold get_config ( :article , :archive_threshold )
35
+
34
36
@ doc """
35
37
[timeline-mode] list paged article comments
36
38
"""
@@ -171,6 +173,9 @@ defmodule GroupherServer.CMS.Delegate.CommentCurd do
171
173
not article_meta . is_comment_locked
172
174
end
173
175
176
+ def update_comment ( % { is_archived: true } , _body ) ,
177
+ do: raise_error ( :archived , "comment is archived, can not be edit or delete" )
178
+
174
179
@ doc """
175
180
update a comment for article like psot, job ...
176
181
"""
@@ -247,6 +252,9 @@ defmodule GroupherServer.CMS.Delegate.CommentCurd do
247
252
248
253
def batch_update_question_flag ( _ ) , do: { :ok , :pass }
249
254
255
+ def delete_comment ( % { is_archived: true } ) ,
256
+ do: raise_error ( :archived , "article is archived, can not be edit or delete" )
257
+
250
258
@ doc "delete article comment"
251
259
def delete_comment ( % Comment { } = comment ) do
252
260
Multi . new ( )
@@ -322,6 +330,21 @@ defmodule GroupherServer.CMS.Delegate.CommentCurd do
322
330
end
323
331
end
324
332
333
+ @ doc """
334
+ archive comments
335
+ called every day by scheuler job
336
+ """
337
+ def archive_comments ( ) do
338
+ now = Timex . now ( ) |> DateTime . truncate ( :second )
339
+ threshold = @ archive_threshold [ :default ]
340
+ archive_threshold = Timex . shift ( now , threshold )
341
+
342
+ Comment
343
+ |> where ( [ c ] , c . inserted_at < ^ archive_threshold )
344
+ |> Repo . update_all ( set: [ is_archived: true , archived_at: now ] )
345
+ |> done ( )
346
+ end
347
+
325
348
defp do_paged_comment ( thread , article_id , filters , where_query , user ) do
326
349
% { page: page , size: size } = filters
327
350
sort = Map . get ( filters , :sort , :asc_inserted )