Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commitc57eb91

Browse files
authored
feat: archived flag for articles & comments (#424)
* feat: add archive flag for articles* feat: add archive flag for comments
1 parent1f13097 commitc57eb91

File tree

32 files changed

+735
-69
lines changed

32 files changed

+735
-69
lines changed

‎config/config.exs‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,15 @@ config :groupher_server, :article,
109109
:pill,
110110
:popcorn
111111
],
112-
digest_length:120
112+
digest_length:120,
113+
archive_threshold:%{
114+
# for post, blog, job, works, radar, job
115+
default:[weeks:-1],
116+
meetups:[months:-1],
117+
drink:[years:-99],
118+
repo:[years:-99],
119+
guide:[years:-99]
120+
}
113121

114122
config:groupher_server,GroupherServerWeb.Gettext,default_locale:"zh_CN",locales:~w(en zh_CN)
115123

@@ -137,7 +145,8 @@ config :rihanna,
137145
config:groupher_server,Helper.Scheduler,
138146
jobs:[
139147
# Every midnight
140-
{"@daily",{Helper.Scheduler,:clear_all_cache,[]}}
148+
{"@daily",{Helper.Scheduler,:clear_all_cache,[]}},
149+
{"@daily",{Helper.Scheduler,:archive_artiments,[]}}
141150
]
142151

143152
import_config"#{Mix.env()}.exs"

‎lib/groupher_server/cms/cms.ex‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ defmodule GroupherServer.CMS do
100100
defdelegatesink_article(thread,id),to:ArticleCURD
101101
defdelegateundo_sink_article(thread,id),to:ArticleCURD
102102

103+
defdelegatearchive_articles(thread),to:ArticleCURD
104+
103105
defdelegatepaged_citing_contents(type,id,filter),to:CitedArtiment
104106

105107
defdelegateupvote_article(thread,article_id,user),to:ArticleUpvote
@@ -151,6 +153,8 @@ defmodule GroupherServer.CMS do
151153
defdelegatemark_comment_solution(comment,user),to:CommentCurd
152154
defdelegateundo_mark_comment_solution(comment,user),to:CommentCurd
153155

156+
defdelegatearchive_comments(),to:CommentCurd
157+
154158
defdelegateupvote_comment(comment_id,user),to:CommentAction
155159
defdelegateundo_upvote_comment(comment_id,user),to:CommentAction
156160
defdelegatereply_comment(comment_id,args,user),to:CommentAction

‎lib/groupher_server/cms/delegates/article_curd.ex‎

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
3939
aliasEcto.Multi
4040

4141
@active_periodget_config(:article,:active_period_days)
42+
@archive_thresholdget_config(:article,:archive_threshold)
43+
4244
@default_emotionsEmbeds.ArticleEmotion.default_emotions()
4345
@default_article_metaEmbeds.ArticleMeta.default_meta()
4446
@remove_article_hint"The content does not comply with the community norms"
@@ -68,26 +70,24 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
6870
read articles for logined user
6971
"""
7072
defread_article(thread,id,%User{id:user_id})do
71-
with{:ok,info}<-match(thread)do
72-
Multi.new()
73-
|>Multi.run(:normal_read,fn_,_->read_article(thread,id)end)
74-
|>Multi.run(:add_viewed_user,fn_,%{normal_read:article}->
75-
update_viewed_user_list(article,user_id)
76-
end)
77-
|>Multi.run(:set_viewer_has_states,fn_,%{normal_read:article}->
78-
article_meta=ifis_nil(article.meta),do:@default_article_meta,else:article.meta
73+
Multi.new()
74+
|>Multi.run(:normal_read,fn_,_->read_article(thread,id)end)
75+
|>Multi.run(:add_viewed_user,fn_,%{normal_read:article}->
76+
update_viewed_user_list(article,user_id)
77+
end)
78+
|>Multi.run(:set_viewer_has_states,fn_,%{normal_read:article}->
79+
article_meta=ifis_nil(article.meta),do:@default_article_meta,else:article.meta
7980

80-
viewer_has_states=%{
81-
viewer_has_collected:user_idinarticle_meta.collected_user_ids,
82-
viewer_has_upvoted:user_idinarticle_meta.upvoted_user_ids,
83-
viewer_has_reported:user_idinarticle_meta.reported_user_ids
84-
}
81+
viewer_has_states=%{
82+
viewer_has_collected:user_idinarticle_meta.collected_user_ids,
83+
viewer_has_upvoted:user_idinarticle_meta.upvoted_user_ids,
84+
viewer_has_reported:user_idinarticle_meta.reported_user_ids
85+
}
8586

86-
article|>Map.merge(viewer_has_states)|>done
87-
end)
88-
|>Repo.transaction()
89-
|>result()
90-
end
87+
article|>Map.merge(viewer_has_states)|>done
88+
end)
89+
|>Repo.transaction()
90+
|>result()
9191
end
9292

9393
@doc"""
@@ -134,6 +134,23 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
134134
end
135135
end
136136

137+
@doc"""
138+
archive articles based on thread
139+
called every day by scheuler job
140+
"""
141+
defarchive_articles(thread)do
142+
with{:ok,info}<-match(thread)do
143+
now=Timex.now()
144+
threshold=@archive_threshold[thread]||@archive_threshold[:default]
145+
archive_threshold=Timex.shift(now,threshold)
146+
147+
info.model
148+
|>where([article],article.inserted_at<^archive_threshold)
149+
|>Repo.update_all(set:[is_archived:true,archived_at:now])
150+
|>done()
151+
end
152+
end
153+
137154
defpmark_viewer_has_states(%{entries:[]}=articles,_),do:articles
138155

139156
defpmark_viewer_has_states(%{entries:entries}=articles,user)do
@@ -237,6 +254,9 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
237254
@doc"""
238255
update a article(post/job ...)
239256
"""
257+
defupdate_article(%{is_archived:true},_attrs),
258+
do:raise_error(:archived,"article is archived, can not be edit or delete")
259+
240260
defupdate_article(article,attrs)do
241261
Multi.new()
242262
|>Multi.run(:update_article,fn_,_->
@@ -317,7 +337,8 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
317337
"""
318338
defmark_delete_article(thread,id)do
319339
with{:ok,info}<-match(thread),
320-
{:ok,article}<-ORM.find(info.model,id,preload::communities)do
340+
{:ok,article}<-ORM.find(info.model,id,preload::communities),
341+
false<-article.is_archiveddo
321342
Multi.new()
322343
|>Multi.run(:update_article,fn_,_->
323344
ORM.update(article,%{mark_delete:true})
@@ -327,6 +348,8 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
327348
end)
328349
|>Repo.transaction()
329350
|>result()
351+
else
352+
true->raise_error(:archived,"article is archived, can not be edit or delete")
330353
end
331354
end
332355

‎lib/groupher_server/cms/delegates/comment_curd.ex‎

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule GroupherServer.CMS.Delegate.CommentCurd do
33
CURD and operations for article comments
44
"""
55
importEcto.Query,warn:false
6-
importHelper.Utils,only:[done:1,ensure:2]
6+
importHelper.Utils,only:[done:1,ensure:2,get_config:2]
77
importHelper.ErrorCode
88

99
importGroupherServer.CMS.Delegate.Helper,
@@ -31,6 +31,8 @@ defmodule GroupherServer.CMS.Delegate.CommentCurd do
3131
@default_comment_metaEmbeds.CommentMeta.default_meta()
3232
@pinned_comment_limitComment.pinned_comment_limit()
3333

34+
@archive_thresholdget_config(:article,:archive_threshold)
35+
3436
@doc"""
3537
[timeline-mode] list paged article comments
3638
"""
@@ -171,6 +173,9 @@ defmodule GroupherServer.CMS.Delegate.CommentCurd do
171173
notarticle_meta.is_comment_locked
172174
end
173175

176+
defupdate_comment(%{is_archived:true},_body),
177+
do:raise_error(:archived,"comment is archived, can not be edit or delete")
178+
174179
@doc"""
175180
update a comment for article like psot, job ...
176181
"""
@@ -247,6 +252,9 @@ defmodule GroupherServer.CMS.Delegate.CommentCurd do
247252

248253
defbatch_update_question_flag(_),do:{:ok,:pass}
249254

255+
defdelete_comment(%{is_archived:true}),
256+
do:raise_error(:archived,"article is archived, can not be edit or delete")
257+
250258
@doc"delete article comment"
251259
defdelete_comment(%Comment{}=comment)do
252260
Multi.new()
@@ -322,6 +330,21 @@ defmodule GroupherServer.CMS.Delegate.CommentCurd do
322330
end
323331
end
324332

333+
@doc"""
334+
archive comments
335+
called every day by scheuler job
336+
"""
337+
defarchive_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+
325348
defpdo_paged_comment(thread,article_id,filters,where_query,user)do
326349
%{page:page,size:size}=filters
327350
sort=Map.get(filters,:sort,:asc_inserted)

‎lib/groupher_server/cms/helper/macros.ex‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,10 @@ defmodule GroupherServer.CMS.Helper.Macros do
200200
comment_fields()
201201

202202
field(:active_at,:utc_datetime_usec)
203+
204+
field(:is_archived,:boolean)
205+
field(:archived_at,:utc_datetime_usec)
206+
203207
# TODO:
204208
# related_articles
205209
timestamps()

‎lib/groupher_server/cms/models/comment.ex‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ defmodule GroupherServer.CMS.Model.Comment do
8383

8484
has_many(:upvotes,{"comments_upvotes",CommentUpvote})
8585

86+
field(:is_archived,:boolean,default:false)
87+
field(:archived_at,:utc_datetime)
88+
8689
article_belongs_to_fields()
8790
timestamps(type::utc_datetime)
8891
end

‎lib/groupher_server/cms/models/embeds/article_meta.ex‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ defmodule GroupherServer.CMS.Model.Embeds.ArticleMeta do
3232
field(:is_edited,:boolean,default:false)
3333
field(:is_comment_locked,:boolean,default:false)
3434
field(:folded_comment_count,:integer,default:0)
35+
3536
# reaction history
3637
field(:upvoted_user_ids,{:array,:integer},default:[])
3738
field(:collected_user_ids,{:array,:integer},default:[])

‎lib/groupher_server_web/schema/Helper/fields.ex‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ defmodule GroupherServerWeb.Schema.Helper.Fields do
3838
field(:viewer_has_upvoted,:boolean)
3939
field(:viewer_has_viewed,:boolean)
4040
field(:viewer_has_reported,:boolean)
41+
42+
field(:is_archived,:boolean)
43+
field(:archived_at,:datetime)
4144
end
4245
end
4346

‎lib/groupher_server_web/schema/cms/cms_types.ex‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,9 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
342342
field(:is_for_question,:boolean)
343343
field(:is_solution,:boolean)
344344

345+
field(:is_archived,:boolean)
346+
field(:archived_at,:datetime)
347+
345348
timestamp_fields()
346349
end
347350

‎lib/helper/error_code.ex‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ defmodule Helper.ErrorCode do
5252
defecode(:article_comments_locked),do:@article_base+8
5353
defecode(:require_questioner),do:@article_base+9
5454
defecode(:cite_artilce),do:@article_base+10
55+
defecode(:archived),do:@article_base+11
5556
# def ecode(:already_solved), do: @article_base + 10
5657

5758
defecode,do:@default_base

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp