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.

Commit57cb7ec

Browse files
authored
feat(meetup): basic workflow (#417)
* chore(meetup): basic setup* chore(meetup): basic setup model, schema* chore(meetup): tests* chore(meetup): fix tests
1 parent944114b commit57cb7ec

File tree

40 files changed

+6379
-2
lines changed

40 files changed

+6379
-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,:guide],
72+
threads:[:post,:job,:repo,:blog,:works,:radar,:guide,:meetup],
7373
# in this period, paged articles will sort front if non-article-author commented
7474
# 在此时间段内,一旦有非文章作者的用户评论,该文章就会排到前面
7575
active_period_days:%{
@@ -79,7 +79,8 @@ config :groupher_server, :article,
7979
blog:10,
8080
works:10,
8181
radar:10,
82-
guide:10
82+
guide:10,
83+
meetup:10
8384
},
8485

8586
# 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.Meetupdo
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::%Meetup{}
21+
schema"cms_meetups"do
22+
article_tags_field(:meetup)
23+
article_communities_field(:meetup)
24+
general_article_fields(:meetup)
25+
end
26+
27+
@docfalse
28+
defchangeset(%Meetup{}=meetup,attrs)do
29+
meetup
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(%Meetup{}=meetup,attrs)do
38+
meetup
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.MeetupDocumentdo
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.Meetup
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 meetup_id)a
22+
@optional_fields[]
23+
24+
@typet::%MeetupDocument{}
25+
schema"meetup_documents"do
26+
belongs_to(:meetup,Meetup,foreign_key::meetup_id)
27+
28+
field(:body,:string)
29+
field(:body_html,:string)
30+
field(:toc,:map)
31+
end
32+
33+
@docfalse
34+
defchangeset(%MeetupDocument{}=meetup,attrs)do
35+
meetup
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(%MeetupDocument{}=meetup,attrs)do
43+
meetup
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
@@ -219,6 +219,13 @@ defmodule GroupherServerWeb.Schema.CMS.Metrics do
219219
field(:sort,:sort_enum)
220220
end
221221

222+
@desc"meetup_filter doc"
223+
input_object:paged_meetups_filterdo
224+
pagination_args()
225+
article_filter_fields()
226+
field(:sort,:sort_enum)
227+
end
228+
222229
@desc"article_filter doc"
223230
input_object:paged_repos_filterdo
224231
@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
@@ -129,6 +129,18 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
129129
timestamp_fields(:article)
130130
end
131131

132+
object:meetupdo
133+
interface(:article)
134+
135+
general_article_fields()
136+
comments_fields()
137+
138+
field(:length,:integer)
139+
field(:link_addr,:string)
140+
141+
timestamp_fields(:article)
142+
end
143+
132144
object:repodo
133145
interface(:article)
134146

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
defmoduleGroupherServerWeb.Schema.CMS.Mutations.Meetupdo
2+
@moduledoc"""
3+
CMS mutations for meetup
4+
"""
5+
useHelper.GqlSchemaSuite
6+
importGroupherServerWeb.Schema.Helper.Mutations
7+
8+
object:cms_meetup_mutationsdo
9+
@desc"create a meetup"
10+
field:create_meetup,:meetupdo
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::meetup)
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/meetup"
25+
field:update_meetup,:meetupdo
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::meetup)
36+
middleware(M.Passport,claim:"owner;cms->c?->meetup.edit")
37+
38+
resolve(&R.CMS.update_article/3)
39+
end
40+
41+
article_react_mutations(:meetup,[
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.CreateMeetupdo
2+
useEcto.Migration
3+
4+
defchangedo
5+
createtable(:cms_meetups)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_meetups,[: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.CreateMeetupDocumentdo
2+
useEcto.Migration
3+
4+
defchangedo
5+
createtable(:meetup_documents)do
6+
add(:meetup_id,references(:cms_meetups,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.CreateCommunitiesJoinMeetupsdo
2+
useEcto.Migration
3+
4+
defchangedo
5+
createtable(:communities_join_meetups)do
6+
add(:community_id,references(:communities,on_delete::delete_all),null:false)
7+
add(:meetup_id,references(:cms_meetups,on_delete::delete_all),null:false)
8+
end
9+
10+
create(unique_index(:communities_join_meetups,[:community_id,:meetup_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.AddMeetupToOthersdo
2+
useEcto.Migration
3+
4+
defchangedo
5+
altertable(:articles_join_tags)do
6+
add(:meetup_id,references(:cms_meetups,on_delete::delete_all))
7+
end
8+
9+
altertable(:abuse_reports)do
10+
add(:meetup_id,references(:cms_meetups,on_delete::delete_all))
11+
end
12+
13+
altertable(:article_collects)do
14+
add(:meetup_id,references(:cms_meetups,on_delete::delete_all))
15+
end
16+
17+
altertable(:article_upvotes)do
18+
add(:meetup_id,references(:cms_meetups,on_delete::delete_all))
19+
end
20+
21+
altertable(:comments)do
22+
add(:meetup_id,references(:cms_meetups,on_delete::delete_all))
23+
end
24+
25+
altertable(:pinned_comments)do
26+
add(:meetup_id,references(:cms_meetups,on_delete::delete_all))
27+
end
28+
29+
altertable(:articles_users_emotions)do
30+
add(:meetup_id,references(:cms_meetups,on_delete::delete_all))
31+
end
32+
33+
altertable(:pinned_articles)do
34+
add(:meetup_id,references(:cms_meetups,on_delete::delete_all))
35+
end
36+
37+
altertable(:cited_artiments)do
38+
add(:meetup_id,references(:cms_meetups,on_delete::delete_all))
39+
end
40+
end
41+
end

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp