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(user): move subscribes communities count to user field#372

Merged
mydearxym merged 4 commits intodevfromsubscribes-communities-to-user-field
May 29, 2021
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
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
1 change: 1 addition & 0 deletionslib/groupher_server/accounts/accounts.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,6 +22,7 @@ defmodule GroupherServer.Accounts do

defdelegate update_profile(user, attrs), to: Profile
defdelegate update_geo(user, remote_ip), to: Profile
defdelegate update_subscribe_count(user), to: Profile
defdelegate github_signin(github_user), to: Profile
defdelegate default_subscribed_communities(filter), to: Profile
defdelegate subscribed_communities(user, filter), to: Profile
Expand Down
12 changes: 12 additions & 0 deletionslib/groupher_server/accounts/delegates/profile.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -65,6 +65,18 @@ defmodule GroupherServer.Accounts.Delegate.Profile do
|> Repo.update()
end

@doc """
update user's subscribed communities count
"""
def update_subscribe_count(user_id) do
with {:ok, user} <- ORM.find(User, user_id) do
count_query = from(s in CMS.CommunitySubscriber, where: s.user_id == ^user.id)
count = Repo.aggregate(count_query, :count)

user |> ORM.update(%{subscribed_communities_count: count})
end
end

@doc """
update geo info for user, include geo_city & remote ip
"""
Expand Down
6 changes: 0 additions & 6 deletionslib/groupher_server/accounts/helper/loader.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,12 +9,6 @@ defmodule GroupherServer.Accounts.Helper.Loader do

def data, do: Dataloader.Ecto.new(Repo, query: &query/2)

def query({"communities_subscribers", CMS.CommunitySubscriber}, %{count: _}) do
CMS.CommunitySubscriber
|> group_by([f], f.user_id)
|> select([f], count(f.id))
end

def query({"communities_subscribers", CMS.CommunitySubscriber}, %{filter: filter}) do
CMS.CommunitySubscriber
|> QueryBuilder.filter_pack(filter)
Expand Down
3 changes: 2 additions & 1 deletionlib/groupher_server/accounts/user.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,7 +25,7 @@ defmodule GroupherServer.Accounts.User do
alias GroupherServer.CMS

@required_fields ~w(nickname avatar)a
@optional_fields ~w(login nickname bio remote_ip sex location email)a
@optional_fields ~w(login nickname bio remote_ip sex location email subscribed_communities_count)a

@type t :: %User{}
schema "users" do
Expand DownExpand Up@@ -55,6 +55,7 @@ defmodule GroupherServer.Accounts.User do
has_many(:followings, {"users_followings", UserFollowing})

has_many(:subscribed_communities, {"communities_subscribers", CMS.CommunitySubscriber})
field(:subscribed_communities_count, :integer, default: 0)

has_many(:collect_folder, {"collect_folders", CollectFolder})

Expand Down
25 changes: 21 additions & 4 deletionslib/groupher_server/cms/delegates/community_operation.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,11 +5,13 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
import ShortMaps

alias Helper.{Certification, RadarSearch, ORM}
alias GroupherServer.Accounts.User
alias GroupherServer.CMS.Delegate.PassportCURD
alias GroupherServer.Repo

alias GroupherServer.CMS.{
alias GroupherServer.{Accounts, CMS, Repo}

alias Accounts.User
alias CMS.Delegate.PassportCURD

alias CMS.{
Delegate,
Category,
Community,
Expand DownExpand Up@@ -116,6 +118,9 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
|> Multi.run(:update_community_count, fn _, %{subscribed_community: community} ->
CommunityCURD.update_community_count_field(community, user_id, :subscribers_count, :inc)
end)
|> Multi.run(:update_user_subscribe_count, fn _, _ ->
Accounts.update_subscribe_count(user_id)
end)
|> Repo.transaction()
|> result()
end
Expand All@@ -133,6 +138,9 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
|> Multi.run(:update_community_count, fn _, %{subscribed_community: community} ->
CommunityCURD.update_community_count_field(community, user_id, :subscribers_count, :inc)
end)
|> Multi.run(:update_user_subscribe_count, fn _, _ ->
Accounts.update_subscribe_count(user_id)
end)
|> Repo.transaction()
|> result()
end
Expand All@@ -151,6 +159,9 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
|> Multi.run(:update_community_count, fn _, _ ->
CommunityCURD.update_community_count_field(community, user_id, :subscribers_count, :dec)
end)
|> Multi.run(:update_user_subscribe_count, fn _, _ ->
Accounts.update_subscribe_count(user_id)
end)
|> Repo.transaction()
|> result()
else
Expand All@@ -176,6 +187,9 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
|> Multi.run(:update_community_count, fn _, _ ->
CommunityCURD.update_community_count_field(community, user_id, :subscribers_count, :dec)
end)
|> Multi.run(:update_user_subscribe_count, fn _, _ ->
Accounts.update_subscribe_count(user_id)
end)
|> Multi.run(:update_community_geo, fn _, _ ->
update_community_geo(community_id, user_id, remote_ip, :dec)
end)
Expand DownExpand Up@@ -204,6 +218,9 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
|> Multi.run(:update_community_count, fn _, _ ->
CommunityCURD.update_community_count_field(community, user_id, :subscribers_count, :dec)
end)
|> Multi.run(:update_user_subscribe_count, fn _, _ ->
Accounts.update_subscribe_count(user_id)
end)
|> Multi.run(:update_community_geo_city, fn _, _ ->
update_community_geo_map(community.id, city, :dec)
end)
Expand Down
23 changes: 7 additions & 16 deletionslib/groupher_server_web/resolvers/accounts_resolver.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -254,25 +254,16 @@ defmodule GroupherServerWeb.Resolvers.Accounts do
Accounts.mark_mail_read(%SysNotificationMail{id: id}, cur_user)
end

def subscribed_communities(%{id: id}, %{filter: filter}, _info) do
Accounts.subscribed_communities(%User{id: id}, filter)
end

# for user self's
def subscribed_communities(_root, %{filter: filter}, %{context: %{cur_user: cur_user}}) do
Accounts.subscribed_communities(%User{id: cur_user.id}, filter)
end

def subscribed_communities(_root, %{user_id: "", filter: filter}, _info) do
Accounts.default_subscribed_communities(filter)
end

# for check other users subscribed_communities
def subscribed_communities(_root, %{user_id: user_id, filter: filter}, _info) do
Accounts.subscribed_communities(%User{id: user_id}, filter)
def subscribed_communities(_root, %{login: login, filter: filter}, _info) do
with {:ok, user_id} <- Accounts.get_userid_and_cache(login) do
Accounts.subscribed_communities(%User{id: user_id}, filter)
else
_ -> raise_error(:not_exsit, "#{login} not found")
end
end

def subscribed_communities(_root, %{filter: filter}, _info) do
def subscribed_communities(_root, %{filter: filter} = args, _info) do
Accounts.default_subscribed_communities(filter)
end

Expand Down
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,7 +27,7 @@ defmodule GroupherServerWeb.Schema.Account.Queries do

@desc "anyone can get anyone's subscribed communities"
field :subscribed_communities, :paged_communities do
arg(:user_id, :id)
arg(:login, :string)
arg(:filter, non_null(:paged_filter))

middleware(M.PageSizeProof)
Expand Down
21 changes: 1 addition & 20 deletionslib/groupher_server_web/schema/account/account_types.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,26 +61,7 @@ defmodule GroupherServerWeb.Schema.Account.Types do
resolve(&R.Accounts.get_passport/3)
end

# field :subscribed_communities, list_of(:community) do
# arg(:filter, :members_filter)

# middleware(M.PageSizeProof)
# resolve(dataloader(Accounts, :subscribed_communities))
# end
@desc "paged communities subscribed by this user"
field :subscribed_communities, :paged_communities do
arg(:filter, :paged_filter)

middleware(M.PageSizeProof)
resolve(&R.Accounts.subscribed_communities/3)
end

field :subscribed_communities_count, :integer do
arg(:count, :count_type, default_value: :count)

resolve(dataloader(Accounts, :subscribed_communities))
middleware(M.ConvertToInt)
end
field(:subscribed_communities_count, :integer)

@desc "paged communities which the user it's the editor"
field :editable_communities, :paged_communities do
Expand Down
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
defmodule GroupherServer.Repo.Migrations.AddSubscribeCountToUsers do
use Ecto.Migration

def change do
alter table(:users) do
add(:subscribed_communities_count, :integer)
end
end
end
30 changes: 29 additions & 1 deletiontest/groupher_server_web/mutation/cms/cms_test.exs
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,9 @@ defmodule GroupherServer.Test.Mutation.CMS.Basic do

use GroupherServer.TestTools

alias GroupherServer.CMS
alias GroupherServer.{Accounts, CMS}

alias Accounts.User
alias CMS.{Category, Community, CommunityEditor, Passport}

alias Helper.ORM
Expand DownExpand Up@@ -495,6 +497,17 @@ defmodule GroupherServer.Test.Mutation.CMS.Basic do
assert created["id"] == to_string(community.id)
end

test "subscribe should update user's subscribed count", ~m(user community)a do
login_conn = simu_conn(:user, user)

variables = %{communityId: community.id}
created = login_conn |> mutation_result(@subscribe_query, variables, "subscribeCommunity")

{:ok, user} = ORM.find(User, user.id)

assert user.subscribed_communities_count == 1
end

test "login user subscribe non-exsit community fails", ~m(user)a do
login_conn = simu_conn(:user, user)
variables = %{communityId: non_exsit_id()}
Expand DownExpand Up@@ -555,6 +568,21 @@ defmodule GroupherServer.Test.Mutation.CMS.Basic do
assert false == cur_subscribers.entries |> Enum.any?(&(&1.id == user.id))
end

test "unsubscribe should update user's subscribed count", ~m(user community)a do
login_conn = simu_conn(:user, user)

variables = %{communityId: community.id}
created = login_conn |> mutation_result(@subscribe_query, variables, "subscribeCommunity")

{:ok, user} = ORM.find(User, user.id)
assert user.subscribed_communities_count == 1

login_conn |> mutation_result(@unsubscribe_query, variables, "unsubscribeCommunity")

{:ok, user} = ORM.find(User, user.id)
assert user.subscribed_communities_count == 0
end

test "other login user unsubscribe community fails", ~m(user_conn community)a do
variables = %{communityId: community.id}

Expand Down
12 changes: 6 additions & 6 deletionstest/groupher_server_web/mutation/delivery/delivery_test.exs
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,7 +53,7 @@ defmodule GroupherServer.Test.Mutation.Delivery do
}
}
"""
@tag :wip2

test "auth user can publish system notifications" do
{:ok, user} = db_insert(:user)

Expand DownExpand Up@@ -100,7 +100,7 @@ defmodule GroupherServer.Test.Mutation.Delivery do
}
}
"""
@tag :wip2

test "auth user can mark a system notification as read" do
{:ok, user} = db_insert(:user)
user_conn = simu_conn(:user, user)
Expand DownExpand Up@@ -200,7 +200,7 @@ defmodule GroupherServer.Test.Mutation.Delivery do
}
}
"""
@tag :wip2

test "user can mark a mention as read" do
{:ok, user} = db_insert(:user)
user_conn = simu_conn(:user, user)
Expand DownExpand Up@@ -237,7 +237,7 @@ defmodule GroupherServer.Test.Mutation.Delivery do
}
}
"""
@tag :wip2

test "user can mark all unread mentions as read" do
{:ok, user} = db_insert(:user)
user_conn = simu_conn(:user, user)
Expand DownExpand Up@@ -265,7 +265,7 @@ defmodule GroupherServer.Test.Mutation.Delivery do
}
}
"""
@tag :wip2

test "user can mark a notification as read" do
{:ok, user} = db_insert(:user)
user_conn = simu_conn(:user, user)
Expand DownExpand Up@@ -303,7 +303,7 @@ defmodule GroupherServer.Test.Mutation.Delivery do
}
}
"""
@tag :wip2

test "user can mark all unread notifications as read" do
{:ok, user} = db_insert(:user)
user_conn = simu_conn(:user, user)
Expand Down
Loading

[8]ページ先頭

©2009-2025 Movatter.jp