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.

refactor(article-upvote): use common upvote module#333

Merged
mydearxym merged 49 commits intodevfromcommon-upvote
May 5, 2021
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
Show all changes
49 commits
Select commitHold shift + click to select a range
ea514e2
refactor(article-upvote): wip
mydearxymApr 30, 2021
0e355df
refactor(article-upvote): wip
mydearxymApr 30, 2021
be959fe
refactor(article-upvote): undo upvotes
mydearxymApr 30, 2021
ec7edc3
refactor(article-upvote): wip
mydearxymApr 30, 2021
9c06b93
refactor(article-upvote): wip
mydearxymApr 30, 2021
5892d2b
refactor(article-upvote): wip
mydearxymApr 30, 2021
d8c8439
refactor(article-upvote): collect done
mydearxymApr 30, 2021
9e8bdad
refactor(article-collect): gq workflow && test && re-org
mydearxymApr 30, 2021
75f1f26
refactor(user-reaction): wip
mydearxymMay 1, 2021
7cde7b7
refactor(user-reaction): wip
mydearxymMay 1, 2021
ce7747c
refactor(user-reaction): wip
mydearxymMay 1, 2021
8fe7dac
refactor(user-reaction): wip
mydearxymMay 1, 2021
748a0b0
refactor(user-reaction): collect-folder wip
mydearxymMay 2, 2021
cea738c
refactor(user-reaction): collect-folder wip
mydearxymMay 2, 2021
557d6dd
refactor(user-reaction): wip
mydearxymMay 2, 2021
bfa6a1f
refactor(user-reaction): wip
mydearxymMay 2, 2021
8e9700c
refactor(user-reaction): wip
mydearxymMay 2, 2021
ebfdcc1
refactor(user-reaction): wip
mydearxymMay 2, 2021
7a80396
refactor(user-reaction): wip
mydearxymMay 2, 2021
d9f7b8a
refactor(user-reaction): wip
mydearxymMay 2, 2021
92f220f
refactor(user-reaction): wip
mydearxymMay 2, 2021
046c2ed
refactor(user-reaction): folder meta wip
mydearxymMay 2, 2021
173c332
refactor(user-reaction): folder meta with fragment wip
mydearxymMay 2, 2021
ab124ec
refactor(user-reaction): folder meta threads flag wip
mydearxymMay 3, 2021
117cf58
refactor(user-reaction): folder meta threads flag wip
mydearxymMay 3, 2021
f396046
refactor(user-reaction): create_collect ifneed
mydearxymMay 3, 2021
5a0d8e5
refactor(user-reaction): remove_collect ifneed
mydearxymMay 3, 2021
49f385a
refactor(user-reaction): thread_count wip
mydearxymMay 3, 2021
9853be2
refactor(user-reaction): update meta wip
mydearxymMay 3, 2021
aa56d39
refactor(user-reaction): update meta wip
mydearxymMay 3, 2021
8425d87
refactor(user-reaction): use macros for folder meta
mydearxymMay 4, 2021
1101308
refactor(user-reaction): wip
mydearxymMay 4, 2021
706d563
refactor(user-reaction): delete empty folder done
mydearxymMay 4, 2021
2a4323b
refactor(user-reaction): wip
mydearxymMay 4, 2021
71bb444
refactor(user-reaction): remove old favorite/star wip
mydearxymMay 4, 2021
6456fa0
refactor(user-reaction): remove old favorite/star wip
mydearxymMay 4, 2021
281db13
refactor(user-reaction): gq workflow wip
mydearxymMay 4, 2021
3f4d90c
refactor(user-reaction): gq workflow wip
mydearxymMay 4, 2021
c2c5922
refactor(user-reaction): cache system re-org
mydearxymMay 4, 2021
dcded4c
refactor(user-reaction): re-org wip
mydearxymMay 4, 2021
bc85919
refactor(user-reaction): re-org wip
mydearxymMay 4, 2021
9b8e03a
refactor(user-reaction): re-org wip
mydearxymMay 4, 2021
0cbdb8e
refactor(user-reaction): re-org wip
mydearxymMay 4, 2021
1fa3004
refactor(user-reaction): re-org wip
mydearxymMay 4, 2021
6710cae
refactor(user-reaction): function args adjust wip
mydearxymMay 4, 2021
1bde043
refactor(user-reaction): mutaion of collect folder wip
mydearxymMay 5, 2021
abe5a30
refactor(user-reaction): mutaion of collect folder wip
mydearxymMay 5, 2021
6818e50
fix(reaction-replate): test errors
mydearxymMay 5, 2021
38e8480
fix(reaction): clean up favorite, comment like etc
mydearxymMay 5, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletionsconfig/config.exs
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -43,9 +43,9 @@ config :groupher_server, :general,
# membership
senior_amount_threshold: 51.2,
# user achievements
user_achieve_star_weight: 1,
user_achieve_upvote_weight: 1,
user_achieve_watch_weight: 1,
user_achieve_favorite_weight: 2,
user_achieve_collect_weight: 2,
user_achieve_follow_weight: 3

config :groupher_server, :customization,
Expand Down
32 changes: 19 additions & 13 deletionslib/groupher_server/accounts/accounts.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,12 +5,13 @@ defmodule GroupherServer.Accounts do
Achievements,
Customization,
Fans,
FavoriteCategory,
CollectFolder,
Publish,
Mails,
Profile,
ReactedContents,
Search
UpvotedArticles,
Search,
Utils
}

# profile
Expand All@@ -20,13 +21,17 @@ defmodule GroupherServer.Accounts do
defdelegate default_subscribed_communities(filter), to: Profile
defdelegate subscribed_communities(user, filter), to: Profile

# favorite category
defdelegate list_favorite_categories(user, opt, filter), to: FavoriteCategory
defdelegate create_favorite_category(user, attrs), to: FavoriteCategory
defdelegate update_favorite_category(user, attrs), to: FavoriteCategory
defdelegate delete_favorite_category(user, id), to: FavoriteCategory
defdelegate set_favorites(user, thread, content_id, category_id), to: FavoriteCategory
defdelegate unset_favorites(user, thread, content_id, category_id), to: FavoriteCategory
# collect folder
defdelegate list_collect_folders(user_id, filter), to: CollectFolder
defdelegate list_collect_folders(user_id, filter, owner), to: CollectFolder
defdelegate list_collect_folder_articles(folder_id, filter, user), to: CollectFolder
defdelegate list_collect_folder_articles(folder_id, filter), to: CollectFolder

defdelegate create_collect_folder(attrs, user), to: CollectFolder
defdelegate update_collect_folder(id, attrs), to: CollectFolder
defdelegate delete_collect_folder(id), to: CollectFolder
defdelegate add_to_collect(thread, article_id, folder_id, user), to: CollectFolder
defdelegate remove_from_collect(thread, article_id, folder_id, user), to: CollectFolder

# achievement
defdelegate achieve(user, operation, key), to: Achievements
Expand All@@ -44,9 +49,8 @@ defmodule GroupherServer.Accounts do
defdelegate fetch_followers(user, filter), to: Fans
defdelegate fetch_followings(user, filter), to: Fans

# reacted contents
defdelegate reacted_contents(thread, react, filter, user), to: ReactedContents
defdelegate reacted_contents(thread, react, category_id, filter, user), to: ReactedContents
# upvoted articles
defdelegate list_upvoted_articles(user_id, filter), to: UpvotedArticles

# mentions
defdelegate fetch_mentions(user, filter), to: Mails
Expand All@@ -67,4 +71,6 @@ defmodule GroupherServer.Accounts do
defdelegate upgrade_by_plan(user, plan), to: Customization

defdelegate search_users(args), to: Search

defdelegate get_userid_and_cache(login), to: Utils
end
6 changes: 3 additions & 3 deletionslib/groupher_server/accounts/achievement.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,14 +8,14 @@ defmodule GroupherServer.Accounts.Achievement do
alias GroupherServer.Accounts.{User, SourceContribute}

@required_fields ~w(user_id)a
@optional_fields ~w(contents_stared_count contents_favorited_count contents_watched_count followers_count reputation donate_member senior_member sponsor_member)a
@optional_fields ~w(articles_upvotes_count articles_collects_count contents_watched_count followers_count reputation donate_member senior_member sponsor_member)a

@type t :: %Achievement{}
schema "user_achievements" do
belongs_to(:user, User)

field(:contents_stared_count, :integer, default: 0)
field(:contents_favorited_count, :integer, default: 0)
field(:articles_upvotes_count, :integer, default: 0)
field(:articles_collects_count, :integer, default: 0)
field(:contents_watched_count, :integer, default: 0)
field(:followers_count, :integer, default: 0)
field(:reputation, :integer, default: 0)
Expand Down
59 changes: 59 additions & 0 deletionslib/groupher_server/accounts/collect_folder.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
defmodule GroupherServer.Accounts.CollectFolder do
@moduledoc false
alias __MODULE__

use Ecto.Schema
import Ecto.Changeset

alias GroupherServer.{Accounts, CMS}
alias Accounts.{User, Embeds}
alias CMS.ArticleCollect

@required_fields ~w(user_id title)a
@optional_fields ~w(index total_count private desc last_updated)a

@supported_threads [:post, :job, :repo]

def supported_threads, do: @supported_threads

@type t :: %CollectFolder{}
schema "collect_folders" do
belongs_to(:user, User, foreign_key: :user_id)
# has_many(:posts, ...)

field(:title, :string)
field(:desc, :string)
field(:index, :integer)
field(:total_count, :integer, default: 0)
field(:private, :boolean, default: false)
# last time when add/delete items in category
field(:last_updated, :utc_datetime)

# 可以参照 fragment 查询语法啊
# 2. article truple [{:post, 1}, [:job, 2]] ... 便于在计算 "成就" 的时候对比
embeds_one(:meta, Embeds.CollectFolderMeta, on_replace: :delete)
embeds_many(:collects, ArticleCollect, on_replace: :delete)

timestamps(type: :utc_datetime)
end

@doc false
def changeset(%CollectFolder{} = collect_folder, attrs) do
collect_folder
|> cast(attrs, @optional_fields ++ @required_fields)
|> validate_required(@required_fields)
|> cast_embed(:meta, required: true, with: &Embeds.CollectFolderMeta.changeset/2)
|> validate_length(:title, min: 1)
|> foreign_key_constraint(:user_id)
end

@doc false
def update_changeset(%CollectFolder{} = collect_folder, attrs) do
collect_folder
|> cast(attrs, @optional_fields ++ @required_fields)
|> cast_embed(:collects, with: &ArticleCollect.changeset/2)
|> cast_embed(:meta, with: &Embeds.CollectFolderMeta.changeset/2)
|> validate_length(:title, min: 1)
|> foreign_key_constraint(:user_id)
end
end
76 changes: 32 additions & 44 deletionslib/groupher_server/accounts/delegates/achievements.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,9 @@ defmodule GroupherServer.Accounts.Delegate.Achievements do
@moduledoc """
user achievements related
acheiveements formula:
1. create content beenstared by other user + 1
1. create content beenupvoteed by other user + 1
2. create content been watched by other user + 1
3. create content beenfavorited by other user + 2
3. create content beencolleced by other user + 2
4. followed by other user + 3
"""
import Ecto.Query, warn: false
Expand All@@ -14,16 +14,16 @@ defmodule GroupherServer.Accounts.Delegate.Achievements do
alias Helper.{ORM, SpecType}
alias GroupherServer.Accounts.{Achievement, User}

@favorite_weight get_config(:general, :user_achieve_favorite_weight)
@star_weight get_config(:general, :user_achieve_star_weight)
@collect_weight get_config(:general, :user_achieve_collect_weight)
@upvote_weight get_config(:general, :user_achieve_upvote_weight)
# @watch_weight get_config(:general, :user_achieve_watch_weight)
@follow_weight get_config(:general, :user_achieve_follow_weight)

@doc """
add user's achievement byadd followers_count offavorite_weight
inc user's achievement byinc followers_count ofcollect_weight
"""
@spec achieve(User.t(), atom, atom) :: SpecType.done()
def achieve(%User{id: user_id}, :add, :follow) do
def achieve(%User{id: user_id}, :inc, :follow) do
with {:ok, achievement} <- ORM.findby_or_insert(Achievement, ~m(user_id)a, ~m(user_id)a) do
followers_count = achievement.followers_count + 1
reputation = achievement.reputation + @follow_weight
Expand All@@ -34,9 +34,9 @@ defmodule GroupherServer.Accounts.Delegate.Achievements do
end

@doc """
minus user's achievement byadd followers_count offavorite_weight
dec user's achievement byinc followers_count ofcollect_weight
"""
def achieve(%User{id: user_id}, :minus, :follow) do
def achieve(%User{id: user_id}, :dec, :follow) do
with {:ok, achievement} <- ORM.findby_or_insert(Achievement, ~m(user_id)a, ~m(user_id)a) do
followers_count = max(achievement.followers_count - 1, 0)
reputation = max(achievement.reputation - @follow_weight, 0)
Expand All@@ -47,55 +47,55 @@ defmodule GroupherServer.Accounts.Delegate.Achievements do
end

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

achievement
|> ORM.update(~m(contents_stared_count reputation)a)
|> ORM.update(~m(articles_upvotes_count reputation)a)
end
end

@doc """
minus user's achievement bycontents_stared_count ofstar_weight
dec user's achievement byarticles_upvotes_count ofupvote_weight
"""
def achieve(%User{id: user_id} = _user, :minus, :star) do
def achieve(%User{id: user_id} = _user, :dec, :upvote) do
with {:ok, achievement} <- ORM.findby_or_insert(Achievement, ~m(user_id)a, ~m(user_id)a) do
contents_stared_count = max(achievement.contents_stared_count - 1, 0)
reputation = max(achievement.reputation - @star_weight, 0)
articles_upvotes_count = max(achievement.articles_upvotes_count - 1, 0)
reputation = max(achievement.reputation - @upvote_weight, 0)

achievement
|> ORM.update(~m(contents_stared_count reputation)a)
|> ORM.update(~m(articles_upvotes_count reputation)a)
end
end

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

achievement
|> ORM.update(~m(contents_favorited_count reputation)a)
|> ORM.update(~m(articles_collects_count reputation)a)
end
end

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

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

achievement
|> ORM.update(~m(contents_favorited_count reputation)a)
|> ORM.update(~m(articles_collects_count reputation)a)
end
end

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

achievement
|> ORM.update(~m(contents_favorited_count reputation)a)
achievement |> ORM.update(~m(articles_collects_count reputation)a)
end
end

# @spec safe_minus(non_neg_integer(), non_neg_integer()) :: non_neg_integer()
# defp safe_minus(count, unit) when is_integer(count) and is_integer(unit) and unit > 0 do
# case count <= 0 do
# true ->
# 0

# false ->
# count - unit
# end
# end

@doc """
list communities which the user is editor in it
"""
Expand Down
Loading

[8]ページ先頭

©2009-2025 Movatter.jp