Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all 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 deletions lib/groupher_server/accounts/accounts.ex
Original file line number Diff line number Diff 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 deletions lib/groupher_server/accounts/delegates/profile.ex
Original file line number Diff line number Diff 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 deletions lib/groupher_server/accounts/helper/loader.ex
Original file line number Diff line number Diff 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 deletion lib/groupher_server/accounts/user.ex
Original file line number Diff line number Diff 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 Down Expand 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 deletions lib/groupher_server/cms/delegates/community_operation.ex
Original file line number Diff line number Diff 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 Down Expand 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 Down Expand 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 deletions lib/groupher_server_web/resolvers/accounts_resolver.ex
Original file line number Diff line number Diff 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
2 changes: 1 addition & 1 deletion lib/groupher_server_web/schema/account/account_queries.ex
Original file line number Diff line number Diff 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 deletions lib/groupher_server_web/schema/account/account_types.ex
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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 deletion test/groupher_server_web/mutation/cms/cms_test.exs
Original file line number Diff line number Diff 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 Down Expand 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 Down Expand 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 deletions test/groupher_server_web/mutation/delivery/delivery_test.exs
Original file line number Diff line number Diff 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 Down Expand 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 Down Expand 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 Down Expand 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 Down Expand 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 Down Expand 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