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.

Commit944114b

Browse files
authored
feat: Guide thread (#416)
* chore(guide): basic migration & model setup* chore(guide): tests* chore(guide): typo* chore(guide): fix migration schema
1 parent188c18a commit944114b

File tree

34 files changed

+4243
-2
lines changed

34 files changed

+4243
-2
lines changed

‎config/config.exs‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ config :groupher_server, :article,
6969
min_length:10,
7070
max_length:20_000,
7171
# NOTE: do not change unless you know what you are doing
72-
threads:[:post,:job,:repo,:blog,:works,:radar],
72+
threads:[:post,:job,:repo,:blog,:works,:radar,:guide],
7373
# in this period, paged articles will sort front if non-article-author commented
7474
# 在此时间段内,一旦有非文章作者的用户评论,该文章就会排到前面
7575
active_period_days:%{
@@ -78,7 +78,8 @@ config :groupher_server, :article,
7878
repo:10,
7979
blog:10,
8080
works:10,
81-
radar:10
81+
radar:10,
82+
guide:10
8283
},
8384

8485
# NOTE: if you want to add/remove emotion, just edit the list below
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
defmoduleGroupherServer.CMS.Model.Guidedo
2+
@moduledocfalse
3+
alias__MODULE__
4+
5+
useEcto.Schema
6+
useAccessible
7+
8+
importEcto.Changeset
9+
importGroupherServer.CMS.Helper.Macros
10+
11+
aliasGroupherServer.CMS
12+
aliasCMS.Model.Embeds
13+
14+
@timestamps_opts[type::utc_datetime_usec]
15+
16+
@required_fields~w(title digest)a
17+
@article_cast_fieldsgeneral_article_cast_fields()
18+
@optional_fields@article_cast_fields
19+
20+
@typet::%Guide{}
21+
schema"cms_guides"do
22+
article_tags_field(:guide)
23+
article_communities_field(:guide)
24+
general_article_fields(:guide)
25+
end
26+
27+
@docfalse
28+
defchangeset(%Guide{}=guide,attrs)do
29+
guide
30+
|>cast(attrs,@optional_fields++@required_fields)
31+
|>validate_required(@required_fields)
32+
|>cast_embed(:meta,required:false,with:&Embeds.ArticleMeta.changeset/2)
33+
|>generl_changeset
34+
end
35+
36+
@docfalse
37+
defupdate_changeset(%Guide{}=guide,attrs)do
38+
guide
39+
|>cast(attrs,@optional_fields++@required_fields)
40+
|>generl_changeset
41+
end
42+
43+
defpgenerl_changeset(changeset)do
44+
changeset
45+
|>validate_length(:title,min:3,max:50)
46+
|>cast_embed(:emotions,with:&Embeds.ArticleEmotion.changeset/2)
47+
end
48+
end
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
defmoduleGroupherServer.CMS.Model.GuideDocumentdo
2+
@moduledoc"""
3+
mainly for full-text search
4+
"""
5+
alias__MODULE__
6+
7+
useEcto.Schema
8+
useAccessible
9+
10+
importEcto.Changeset
11+
importHelper.Utils,only:[get_config:2]
12+
13+
aliasGroupherServer.CMS
14+
aliasCMS.Model.Guide
15+
16+
@timestamps_opts[type::utc_datetime_usec]
17+
18+
@max_body_lengthget_config(:article,:max_length)
19+
@min_body_lengthget_config(:article,:min_length)
20+
21+
@required_fields~w(body body_html guide_id)a
22+
@optional_fields[]
23+
24+
@typet::%GuideDocument{}
25+
schema"guide_documents"do
26+
belongs_to(:guide,Guide,foreign_key::guide_id)
27+
28+
field(:body,:string)
29+
field(:body_html,:string)
30+
field(:toc,:map)
31+
end
32+
33+
@docfalse
34+
defchangeset(%GuideDocument{}=guide,attrs)do
35+
guide
36+
|>cast(attrs,@optional_fields++@required_fields)
37+
|>validate_required(@required_fields)
38+
|>validate_length(:body,min:@min_body_length,max:@max_body_length)
39+
end
40+
41+
@docfalse
42+
defupdate_changeset(%GuideDocument{}=guide,attrs)do
43+
guide
44+
|>cast(attrs,@optional_fields++@required_fields)
45+
|>validate_length(:body,min:@min_body_length,max:@max_body_length)
46+
end
47+
end

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,13 @@ defmodule GroupherServerWeb.Schema.CMS.Metrics do
212212
field(:sort,:sort_enum)
213213
end
214214

215+
@desc"guide_filter doc"
216+
input_object:paged_guides_filterdo
217+
pagination_args()
218+
article_filter_fields()
219+
field(:sort,:sort_enum)
220+
end
221+
215222
@desc"article_filter doc"
216223
input_object:paged_repos_filterdo
217224
@desc"limit of records (default 20), if first > 30, only return 30 at most"

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,18 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
117117
timestamp_fields(:article)
118118
end
119119

120+
object:guidedo
121+
interface(:article)
122+
123+
general_article_fields()
124+
comments_fields()
125+
126+
field(:length,:integer)
127+
field(:link_addr,:string)
128+
129+
timestamp_fields(:article)
130+
end
131+
120132
object:repodo
121133
interface(:article)
122134

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
defmoduleGroupherServerWeb.Schema.CMS.Mutations.Guidedo
2+
@moduledoc"""
3+
CMS mutations for guide
4+
"""
5+
useHelper.GqlSchemaSuite
6+
importGroupherServerWeb.Schema.Helper.Mutations
7+
8+
object:cms_guide_mutationsdo
9+
@desc"create a guide"
10+
field:create_guide,:guidedo
11+
arg(:title,non_null(:string))
12+
arg(:body,non_null(:string))
13+
arg(:digest,non_null(:string))
14+
arg(:community_id,non_null(:id))
15+
arg(:thread,:thread,default_value::guide)
16+
arg(:article_tags,list_of(:id))
17+
18+
middleware(M.Authorize,:login)
19+
middleware(M.PublishThrottle)
20+
resolve(&R.CMS.create_article/3)
21+
middleware(M.Statistics.MakeContribute,for:[:user,:community])
22+
end
23+
24+
@desc"update a cms/guide"
25+
field:update_guide,:guidedo
26+
arg(:id,non_null(:id))
27+
arg(:title,:string)
28+
arg(:body,:string)
29+
arg(:digest,:string)
30+
31+
arg(:article_tags,list_of(:id))
32+
# ...
33+
34+
middleware(M.Authorize,:login)
35+
middleware(M.PassportLoader,source::guide)
36+
middleware(M.Passport,claim:"owner;cms->c?->guide.edit")
37+
38+
resolve(&R.CMS.update_article/3)
39+
end
40+
41+
article_react_mutations(:guide,[
42+
:upvote,
43+
:pin,
44+
:mark_delete,
45+
:delete,
46+
:emotion,
47+
:report,
48+
:sink,
49+
:lock_comment
50+
])
51+
end
52+
end
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
defmoduleGroupherServer.Repo.Migrations.CreateGuidedo
2+
useEcto.Migration
3+
4+
defchangedo
5+
createtable(:cms_guides)do
6+
add(:thread,:string)
7+
add(:title,:string)
8+
add(:digest,:string)
9+
add(:views,:integer,default:0)
10+
add(:mark_delete,:boolean,default:false)
11+
add(:meta,:map)
12+
add(:emotions,:map)
13+
add(:original_community_id,references(:communities,on_delete::delete_all))
14+
add(:author_id,references(:cms_authors,on_delete::delete_all),null:false)
15+
16+
add(:active_at,:utc_datetime)
17+
18+
# reaction
19+
add(:upvotes_count,:integer,default:0)
20+
add(:collects_count,:integer,default:0)
21+
22+
# comments
23+
add(:comments_participants_count,:integer,default:0)
24+
add(:comments_count,:integer,default:0)
25+
add(:comments_participants,:map)
26+
27+
timestamps()
28+
end
29+
30+
create(index(:cms_guides,[:author_id]))
31+
end
32+
end
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
defmoduleGroupherServer.Repo.Migrations.CreateGuideDocumentdo
2+
useEcto.Migration
3+
4+
defchangedo
5+
createtable(:guide_documents)do
6+
add(:guide_id,references(:cms_guides,on_delete::delete_all),null:false)
7+
add(:body,:text)
8+
add(:body_html,:text)
9+
add(:markdown,:text)
10+
add(:toc,:map)
11+
end
12+
end
13+
end
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
defmoduleGroupherServer.Repo.Migrations.CreateCommunitiesJoinGuidesdo
2+
useEcto.Migration
3+
4+
defchangedo
5+
createtable(:communities_join_guides)do
6+
add(:community_id,references(:communities,on_delete::delete_all),null:false)
7+
add(:guide_id,references(:cms_guides,on_delete::delete_all),null:false)
8+
end
9+
10+
create(unique_index(:communities_join_guides,[:community_id,:guide_id]))
11+
end
12+
end
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
defmoduleGroupherServer.Repo.Migrations.AddGuideIdToOthersdo
2+
useEcto.Migration
3+
4+
defchangedo
5+
altertable(:articles_join_tags)do
6+
add(:guide_id,references(:cms_guides,on_delete::delete_all))
7+
end
8+
9+
altertable(:abuse_reports)do
10+
add(:guide_id,references(:cms_guides,on_delete::delete_all))
11+
end
12+
13+
altertable(:article_collects)do
14+
add(:guide_id,references(:cms_guides,on_delete::delete_all))
15+
end
16+
17+
altertable(:article_upvotes)do
18+
add(:guide_id,references(:cms_guides,on_delete::delete_all))
19+
end
20+
21+
altertable(:comments)do
22+
add(:guide_id,references(:cms_guides,on_delete::delete_all))
23+
end
24+
25+
altertable(:pinned_comments)do
26+
add(:guide_id,references(:cms_guides,on_delete::delete_all))
27+
end
28+
29+
altertable(:articles_users_emotions)do
30+
add(:guide_id,references(:cms_guides,on_delete::delete_all))
31+
end
32+
33+
altertable(:pinned_articles)do
34+
add(:guide_id,references(:cms_guides,on_delete::delete_all))
35+
end
36+
37+
altertable(:cited_artiments)do
38+
add(:guide_id,references(:cms_guides,on_delete::delete_all))
39+
end
40+
end
41+
end

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp