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.

Commit3b35013

Browse files
authored
refactor(article-reactions): use common module to handle it (#333)
* refactor(article-upvote): wip* refactor(article-upvote): wip* refactor(article-upvote): undo upvotes* refactor(article-upvote): wip* refactor(article-upvote): wip* refactor(article-upvote): wip* refactor(article-upvote): collect done* refactor(article-collect): gq workflow && test && re-org* refactor(user-reaction): wip* refactor(user-reaction): wip* refactor(user-reaction): wip* refactor(user-reaction): wip* refactor(user-reaction): collect-folder wip* refactor(user-reaction): collect-folder wip* refactor(user-reaction): wip* refactor(user-reaction): wip* refactor(user-reaction): wip* refactor(user-reaction): wip* refactor(user-reaction): wip* refactor(user-reaction): wip* refactor(user-reaction): wip* refactor(user-reaction): folder meta wip* refactor(user-reaction): folder meta with fragment wip* refactor(user-reaction): folder meta threads flag wip* refactor(user-reaction): folder meta threads flag wip* refactor(user-reaction): create_collect ifneed* refactor(user-reaction): remove_collect ifneed* refactor(user-reaction): thread_count wip* refactor(user-reaction): update meta wip* refactor(user-reaction): update meta wip* refactor(user-reaction): use macros for folder meta* refactor(user-reaction): wip* refactor(user-reaction): delete empty folder done* refactor(user-reaction): wip* refactor(user-reaction): remove old favorite/star wip* refactor(user-reaction): remove old favorite/star wip* refactor(user-reaction): gq workflow wip* refactor(user-reaction): gq workflow wip* refactor(user-reaction): cache system re-org* refactor(user-reaction): re-org wip* refactor(user-reaction): re-org wip* refactor(user-reaction): re-org wip* refactor(user-reaction): re-org wip* refactor(user-reaction): re-org wip* refactor(user-reaction): function args adjust wip* refactor(user-reaction): mutaion of collect folder wip* refactor(user-reaction): mutaion of collect folder wip* fix(reaction-replate): test errors* fix(reaction): clean up favorite, comment like etc
1 parentd38603f commit3b35013

File tree

104 files changed

+2672
-3424
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+2672
-3424
lines changed

‎config/config.exs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ config :groupher_server, :general,
4343
# membership
4444
senior_amount_threshold:51.2,
4545
# user achievements
46-
user_achieve_star_weight:1,
46+
user_achieve_upvote_weight:1,
4747
user_achieve_watch_weight:1,
48-
user_achieve_favorite_weight:2,
48+
user_achieve_collect_weight:2,
4949
user_achieve_follow_weight:3
5050

5151
config:groupher_server,:customization,

‎lib/groupher_server/accounts/accounts.ex‎

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ defmodule GroupherServer.Accounts do
55
Achievements,
66
Customization,
77
Fans,
8-
FavoriteCategory,
8+
CollectFolder,
99
Publish,
1010
Mails,
1111
Profile,
12-
ReactedContents,
13-
Search
12+
UpvotedArticles,
13+
Search,
14+
Utils
1415
}
1516

1617
# profile
@@ -20,13 +21,17 @@ defmodule GroupherServer.Accounts do
2021
defdelegatedefault_subscribed_communities(filter),to:Profile
2122
defdelegatesubscribed_communities(user,filter),to:Profile
2223

23-
# favorite category
24-
defdelegatelist_favorite_categories(user,opt,filter),to:FavoriteCategory
25-
defdelegatecreate_favorite_category(user,attrs),to:FavoriteCategory
26-
defdelegateupdate_favorite_category(user,attrs),to:FavoriteCategory
27-
defdelegatedelete_favorite_category(user,id),to:FavoriteCategory
28-
defdelegateset_favorites(user,thread,content_id,category_id),to:FavoriteCategory
29-
defdelegateunset_favorites(user,thread,content_id,category_id),to:FavoriteCategory
24+
# collect folder
25+
defdelegatelist_collect_folders(user_id,filter),to:CollectFolder
26+
defdelegatelist_collect_folders(user_id,filter,owner),to:CollectFolder
27+
defdelegatelist_collect_folder_articles(folder_id,filter,user),to:CollectFolder
28+
defdelegatelist_collect_folder_articles(folder_id,filter),to:CollectFolder
29+
30+
defdelegatecreate_collect_folder(attrs,user),to:CollectFolder
31+
defdelegateupdate_collect_folder(id,attrs),to:CollectFolder
32+
defdelegatedelete_collect_folder(id),to:CollectFolder
33+
defdelegateadd_to_collect(thread,article_id,folder_id,user),to:CollectFolder
34+
defdelegateremove_from_collect(thread,article_id,folder_id,user),to:CollectFolder
3035

3136
# achievement
3237
defdelegateachieve(user,operation,key),to:Achievements
@@ -44,9 +49,8 @@ defmodule GroupherServer.Accounts do
4449
defdelegatefetch_followers(user,filter),to:Fans
4550
defdelegatefetch_followings(user,filter),to:Fans
4651

47-
# reacted contents
48-
defdelegatereacted_contents(thread,react,filter,user),to:ReactedContents
49-
defdelegatereacted_contents(thread,react,category_id,filter,user),to:ReactedContents
52+
# upvoted articles
53+
defdelegatelist_upvoted_articles(user_id,filter),to:UpvotedArticles
5054

5155
# mentions
5256
defdelegatefetch_mentions(user,filter),to:Mails
@@ -67,4 +71,6 @@ defmodule GroupherServer.Accounts do
6771
defdelegateupgrade_by_plan(user,plan),to:Customization
6872

6973
defdelegatesearch_users(args),to:Search
74+
75+
defdelegateget_userid_and_cache(login),to:Utils
7076
end

‎lib/groupher_server/accounts/achievement.ex‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ defmodule GroupherServer.Accounts.Achievement do
88
aliasGroupherServer.Accounts.{User,SourceContribute}
99

1010
@required_fields~w(user_id)a
11-
@optional_fields~w(contents_stared_count contents_favorited_count contents_watched_count followers_count reputation donate_member senior_member sponsor_member)a
11+
@optional_fields~w(articles_upvotes_count articles_collects_count contents_watched_count followers_count reputation donate_member senior_member sponsor_member)a
1212

1313
@typet::%Achievement{}
1414
schema"user_achievements"do
1515
belongs_to(:user,User)
1616

17-
field(:contents_stared_count,:integer,default:0)
18-
field(:contents_favorited_count,:integer,default:0)
17+
field(:articles_upvotes_count,:integer,default:0)
18+
field(:articles_collects_count,:integer,default:0)
1919
field(:contents_watched_count,:integer,default:0)
2020
field(:followers_count,:integer,default:0)
2121
field(:reputation,:integer,default:0)
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
defmoduleGroupherServer.Accounts.CollectFolderdo
2+
@moduledocfalse
3+
alias__MODULE__
4+
5+
useEcto.Schema
6+
importEcto.Changeset
7+
8+
aliasGroupherServer.{Accounts,CMS}
9+
aliasAccounts.{User,Embeds}
10+
aliasCMS.ArticleCollect
11+
12+
@required_fields~w(user_id title)a
13+
@optional_fields~w(index total_count private desc last_updated)a
14+
15+
@supported_threads[:post,:job,:repo]
16+
17+
defsupported_threads,do:@supported_threads
18+
19+
@typet::%CollectFolder{}
20+
schema"collect_folders"do
21+
belongs_to(:user,User,foreign_key::user_id)
22+
# has_many(:posts, ...)
23+
24+
field(:title,:string)
25+
field(:desc,:string)
26+
field(:index,:integer)
27+
field(:total_count,:integer,default:0)
28+
field(:private,:boolean,default:false)
29+
# last time when add/delete items in category
30+
field(:last_updated,:utc_datetime)
31+
32+
# 可以参照 fragment 查询语法啊
33+
# 2. article truple [{:post, 1}, [:job, 2]] ... 便于在计算 "成就" 的时候对比
34+
embeds_one(:meta,Embeds.CollectFolderMeta,on_replace::delete)
35+
embeds_many(:collects,ArticleCollect,on_replace::delete)
36+
37+
timestamps(type::utc_datetime)
38+
end
39+
40+
@docfalse
41+
defchangeset(%CollectFolder{}=collect_folder,attrs)do
42+
collect_folder
43+
|>cast(attrs,@optional_fields++@required_fields)
44+
|>validate_required(@required_fields)
45+
|>cast_embed(:meta,required:true,with:&Embeds.CollectFolderMeta.changeset/2)
46+
|>validate_length(:title,min:1)
47+
|>foreign_key_constraint(:user_id)
48+
end
49+
50+
@docfalse
51+
defupdate_changeset(%CollectFolder{}=collect_folder,attrs)do
52+
collect_folder
53+
|>cast(attrs,@optional_fields++@required_fields)
54+
|>cast_embed(:collects,with:&ArticleCollect.changeset/2)
55+
|>cast_embed(:meta,with:&Embeds.CollectFolderMeta.changeset/2)
56+
|>validate_length(:title,min:1)
57+
|>foreign_key_constraint(:user_id)
58+
end
59+
end

‎lib/groupher_server/accounts/delegates/achievements.ex‎

Lines changed: 32 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ defmodule GroupherServer.Accounts.Delegate.Achievements do
22
@moduledoc"""
33
user achievements related
44
acheiveements formula:
5-
1. create content beenstared by other user + 1
5+
1. create content beenupvoteed by other user + 1
66
2. create content been watched by other user + 1
7-
3. create content beenfavorited by other user + 2
7+
3. create content beencolleced by other user + 2
88
4. followed by other user + 3
99
"""
1010
importEcto.Query,warn:false
@@ -14,16 +14,16 @@ defmodule GroupherServer.Accounts.Delegate.Achievements do
1414
aliasHelper.{ORM,SpecType}
1515
aliasGroupherServer.Accounts.{Achievement,User}
1616

17-
@favorite_weightget_config(:general,:user_achieve_favorite_weight)
18-
@star_weightget_config(:general,:user_achieve_star_weight)
17+
@collect_weightget_config(:general,:user_achieve_collect_weight)
18+
@upvote_weightget_config(:general,:user_achieve_upvote_weight)
1919
# @watch_weight get_config(:general, :user_achieve_watch_weight)
2020
@follow_weightget_config(:general,:user_achieve_follow_weight)
2121

2222
@doc"""
23-
add user's achievement byadd followers_count offavorite_weight
23+
inc user's achievement byinc followers_count ofcollect_weight
2424
"""
2525
@specachieve(User.t(),atom,atom)::SpecType.done()
26-
defachieve(%User{id:user_id},:add,:follow)do
26+
defachieve(%User{id:user_id},:inc,:follow)do
2727
with{:ok,achievement}<-ORM.findby_or_insert(Achievement,~m(user_id)a,~m(user_id)a)do
2828
followers_count=achievement.followers_count+1
2929
reputation=achievement.reputation+@follow_weight
@@ -34,9 +34,9 @@ defmodule GroupherServer.Accounts.Delegate.Achievements do
3434
end
3535

3636
@doc"""
37-
minus user's achievement byadd followers_count offavorite_weight
37+
dec user's achievement byinc followers_count ofcollect_weight
3838
"""
39-
defachieve(%User{id:user_id},:minus,:follow)do
39+
defachieve(%User{id:user_id},:dec,:follow)do
4040
with{:ok,achievement}<-ORM.findby_or_insert(Achievement,~m(user_id)a,~m(user_id)a)do
4141
followers_count=max(achievement.followers_count-1,0)
4242
reputation=max(achievement.reputation-@follow_weight,0)
@@ -47,55 +47,55 @@ defmodule GroupherServer.Accounts.Delegate.Achievements do
4747
end
4848

4949
@doc"""
50-
add user's achievement bycontents_stared_count ofstar_weight
50+
inc user's achievement byarticles_upvotes_count ofupvote_weight
5151
"""
52-
defachieve(%User{id:user_id}=_user,:add,:star)do
52+
defachieve(%User{id:user_id}=_user,:inc,:upvote)do
5353
with{:ok,achievement}<-ORM.findby_or_insert(Achievement,~m(user_id)a,~m(user_id)a)do
54-
contents_stared_count=achievement.contents_stared_count+1
55-
reputation=achievement.reputation+@star_weight
54+
articles_upvotes_count=achievement.articles_upvotes_count+1
55+
reputation=achievement.reputation+@upvote_weight
5656

5757
achievement
58-
|>ORM.update(~m(contents_stared_count reputation)a)
58+
|>ORM.update(~m(articles_upvotes_count reputation)a)
5959
end
6060
end
6161

6262
@doc"""
63-
minus user's achievement bycontents_stared_count ofstar_weight
63+
dec user's achievement byarticles_upvotes_count ofupvote_weight
6464
"""
65-
defachieve(%User{id:user_id}=_user,:minus,:star)do
65+
defachieve(%User{id:user_id}=_user,:dec,:upvote)do
6666
with{:ok,achievement}<-ORM.findby_or_insert(Achievement,~m(user_id)a,~m(user_id)a)do
67-
contents_stared_count=max(achievement.contents_stared_count-1,0)
68-
reputation=max(achievement.reputation-@star_weight,0)
67+
articles_upvotes_count=max(achievement.articles_upvotes_count-1,0)
68+
reputation=max(achievement.reputation-@upvote_weight,0)
6969

7070
achievement
71-
|>ORM.update(~m(contents_stared_count reputation)a)
71+
|>ORM.update(~m(articles_upvotes_count reputation)a)
7272
end
7373
end
7474

7575
@doc"""
76-
minus user's achievement bycontents_favorited_count offavorite_weight
76+
dec user's achievement byarticles_collects_count ofcollect_weight
7777
"""
78-
defachieve(%User{id:user_id}=_user,:add,:favorite)do
78+
defachieve(%User{id:user_id}=_user,:inc,:collect)do
7979
with{:ok,achievement}<-ORM.findby_or_insert(Achievement,~m(user_id)a,~m(user_id)a)do
80-
contents_favorited_count=achievement.contents_favorited_count+1
81-
reputation=achievement.reputation+@favorite_weight
80+
articles_collects_count=achievement.articles_collects_count+1
81+
reputation=achievement.reputation+@collect_weight
8282

8383
achievement
84-
|>ORM.update(~m(contents_favorited_count reputation)a)
84+
|>ORM.update(~m(articles_collects_count reputation)a)
8585
end
8686
end
8787

8888
@doc"""
89-
add user's achievement bycontents_favorited_count offavorite_weight
89+
inc user's achievement byarticles_collects_count ofcollect_weight
9090
"""
91-
defachieve(%User{id:user_id}=_user,:minus,:favorite)do
91+
defachieve(%User{id:user_id}=_user,:dec,:collect)do
9292
with{:ok,achievement}<-ORM.findby_or_insert(Achievement,~m(user_id)a,~m(user_id)a)do
93-
contents_favorited_count=max(achievement.contents_favorited_count-1,0)
93+
articles_collects_count=max(achievement.articles_collects_count-1,0)
9494

95-
reputation=max(achievement.reputation-@favorite_weight,0)
95+
reputation=max(achievement.reputation-@collect_weight,0)
9696

9797
achievement
98-
|>ORM.update(~m(contents_favorited_count reputation)a)
98+
|>ORM.update(~m(articles_collects_count reputation)a)
9999
end
100100
end
101101

@@ -113,27 +113,15 @@ defmodule GroupherServer.Accounts.Delegate.Achievements do
113113
@doc"""
114114
only used for user delete the farorited category, other case is auto
115115
"""
116-
defdowngrade_achievement(%User{id:user_id},:favorite,count)do
116+
defdowngrade_achievement(%User{id:user_id},:collect,count)do
117117
with{:ok,achievement}<-ORM.find_by(Achievement,user_id:user_id)do
118-
contents_favorited_count=max(achievement.contents_favorited_count-count,0)
119-
reputation=max(achievement.reputation-count*@favorite_weight,0)
118+
articles_collects_count=max(achievement.articles_collects_count-count,0)
119+
reputation=max(achievement.reputation-count*@collect_weight,0)
120120

121-
achievement
122-
|>ORM.update(~m(contents_favorited_count reputation)a)
121+
achievement|>ORM.update(~m(articles_collects_count reputation)a)
123122
end
124123
end
125124

126-
# @spec safe_minus(non_neg_integer(), non_neg_integer()) :: non_neg_integer()
127-
# defp safe_minus(count, unit) when is_integer(count) and is_integer(unit) and unit > 0 do
128-
# case count <= 0 do
129-
# true ->
130-
# 0
131-
132-
# false ->
133-
# count - unit
134-
# end
135-
# end
136-
137125
@doc"""
138126
list communities which the user is editor in it
139127
"""

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp