Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commit 8a8c7e1

Browse files
authored
refactor: user/works page debug (#438)
* refactor(user-model): add/remove social fields * refactor(user): user profile & works cover staff * fix(account): unused embeds dir * chore: workss -> works * fix: import error * fix(community-meta): plural errror
1 parent e700c36 commit 8a8c7e1

35 files changed

+166
-243
lines changed

lib/groupher_server/accounts/delegates/profile.ex

+12-2
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,20 @@ defmodule GroupherServer.Accounts.Delegate.Profile do
88

99
alias GroupherServer.{Accounts, CMS, Email, Repo, Statistics}
1010

11-
alias Accounts.Model.{Achievement, GithubUser, User, Social}
11+
alias Accounts.Model.{Achievement, GithubUser, User, Social, Embeds}
1212
alias CMS.Model.{Community, CommunitySubscriber}
1313

1414
alias GroupherServer.Accounts.Delegate.Fans
1515

1616
alias Helper.{Guardian, ORM, QueryBuilder, RadarSearch}
1717
alias Ecto.Multi
1818

19+
@default_user_meta Embeds.UserMeta.default_meta()
1920
@default_subscribed_communities get_config(:general, :default_subscribed_communities)
2021

2122
def read_user(login) when is_binary(login) do
22-
with {:ok, user} <- ORM.read_by(User, %{login: login}, inc: :views) do
23+
with {:ok, user} <- ORM.read_by(User, %{login: login}, inc: :views),
24+
{:ok, user} <- assign_meta_ifneed(user) do
2325
case user.contributes do
2426
nil -> assign_default_contributes(user)
2527
_ -> {:ok, user}
@@ -46,6 +48,14 @@ defmodule GroupherServer.Accounts.Delegate.Profile do
4648
end
4749
end
4850

51+
defp assign_meta_ifneed(%User{meta: nil} = user) do
52+
{:ok, Map.merge(user, %{meta: @default_user_meta})}
53+
end
54+
55+
defp assign_meta_ifneed(user) do
56+
{:ok, user}
57+
end
58+
4959
def paged_users(filter, %User{} = user) do
5060
ORM.find_all(User, filter) |> Fans.mark_viewer_follow_status(user) |> done
5161
end

lib/groupher_server/accounts/delegates/publish.ex

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule GroupherServer.Accounts.Delegate.Publish do
33
user followers / following related
44
"""
55
import Ecto.Query, warn: false
6-
import Helper.Utils, only: [ensure: 2]
6+
import Helper.Utils, only: [ensure: 2, plural: 1]
77

88
alias GroupherServer.{Accounts, CMS}
99
alias Accounts.Model.{Embeds, User}
@@ -29,7 +29,7 @@ defmodule GroupherServer.Accounts.Delegate.Publish do
2929
{:ok, paged_articles} <- CMS.paged_published_articles(thread, filter, user_id) do
3030
#
3131
user_meta = ensure(user.meta, @default_meta)
32-
meta = Map.put(user_meta, :"published_#{thread}s_count", paged_articles.total_count)
32+
meta = Map.put(user_meta, :"published_#{plural(thread)}_count", paged_articles.total_count)
3333

3434
ORM.update_meta(user, meta)
3535
end

lib/groupher_server/accounts/embeds/collect_folder_meta.ex

-55
This file was deleted.

lib/groupher_server/accounts/embeds/user_contribute.ex

-25
This file was deleted.

lib/groupher_server/accounts/embeds/user_contribute_record.ex

-19
This file was deleted.

lib/groupher_server/accounts/embeds/user_meta.ex

-64
This file was deleted.

lib/groupher_server/accounts/models/embeds/user_contribute.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defmodule GroupherServer.Accounts.Model.Embeds.UserContribute do
66
use Accessible
77
import Ecto.Changeset
88

9-
alias GroupherServer.Accounts.Embeds
9+
alias GroupherServer.Accounts.Model.Embeds
1010

1111
@optional_fields ~w(reported_count)a
1212

lib/groupher_server/accounts/models/embeds/user_meta.ex

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
defmodule GroupherServer.Accounts.Model.Embeds.UserMeta.Macro do
22
@moduledoc false
33

4-
import Helper.Utils, only: [get_config: 2]
4+
import Helper.Utils, only: [get_config: 2, plural: 1]
55

66
@article_threads get_config(:article, :threads)
77

88
defmacro published_article_count_fields() do
99
@article_threads
1010
|> Enum.map(fn thread ->
1111
quote do
12-
field(unquote(:"published_#{thread}s_count"), :integer, default: 0)
12+
field(unquote(:"published_#{plural(thread)}_count"), :integer, default: 0)
1313
end
1414
end)
1515
end
@@ -23,8 +23,8 @@ defmodule GroupherServer.Accounts.Model.Embeds.UserMeta do
2323
use Accessible
2424

2525
import Ecto.Changeset
26-
import GroupherServer.Accounts.Embeds.UserMeta.Macro
27-
import Helper.Utils, only: [get_config: 2]
26+
import GroupherServer.Accounts.Model.Embeds.UserMeta.Macro
27+
import Helper.Utils, only: [get_config: 2, plural: 1]
2828

2929
@article_threads get_config(:article, :threads)
3030

@@ -36,12 +36,12 @@ defmodule GroupherServer.Accounts.Model.Embeds.UserMeta do
3636
}
3737

3838
@optional_fields Map.keys(@general_options) ++
39-
Enum.map(@article_threads, &:"published_#{&1}s_count")
39+
Enum.map(@article_threads, &:"published_#{plural(&1)}_count")
4040

4141
def default_meta() do
4242
published_article_counts =
4343
@article_threads
44-
|> Enum.reduce([], &(&2 ++ ["published_#{&1}s_count": 0]))
44+
|> Enum.reduce([], &(&2 ++ ["published_#{plural(&1)}_count": 0]))
4545
|> Enum.into(%{})
4646

4747
@general_options |> Map.merge(published_article_counts)

lib/groupher_server/accounts/models/social.ex

+3-8
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,22 @@ defmodule GroupherServer.Accounts.Model.Social do
88
alias GroupherServer.Accounts.Model.User
99

1010
@required_fields ~w(user_id)a
11-
@optional_fields ~w(github twitter facebook zhihu dribble huaban douban pinterest instagram qq weichat weibo)a
11+
@optional_fields ~w(github twitter blog company zhihu dribble huaban douban pinterest)a
1212

1313
@type t :: %Social{}
1414
schema "user_socials" do
1515
belongs_to(:user, User)
1616

1717
field(:github, :string)
1818
field(:twitter, :string)
19-
field(:facebook, :string)
19+
field(:blog, :string)
20+
field(:company, :string)
2021
field(:zhihu, :string)
2122
field(:dribble, :string)
2223
field(:huaban, :string)
2324
field(:douban, :string)
2425

2526
field(:pinterest, :string)
26-
field(:instagram, :string)
27-
28-
field(:qq, :string)
29-
field(:weichat, :string)
30-
field(:weibo, :string)
31-
3227
# timestamps(type: :utc_datetime)
3328
end
3429

lib/groupher_server/accounts/models/user.ex

+2-5
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ defmodule GroupherServer.Accounts.Model.User do
2525
alias GroupherServer.CMS.Model.{Passport, CommunitySubscriber}
2626

2727
@required_fields ~w(nickname avatar)a
28-
@optional_fields ~w(login nickname bio remote_ip sex location email subscribed_communities_count)a
28+
@optional_fields ~w(login nickname bio shortbio remote_ip sex location email subscribed_communities_count)a
2929

3030
@type t :: %User{}
3131
schema "users" do
@@ -34,6 +34,7 @@ defmodule GroupherServer.Accounts.Model.User do
3434
field(:avatar, :string)
3535
field(:sex, :string)
3636
field(:bio, :string)
37+
field(:shortbio, :string)
3738
field(:email, :string)
3839
field(:location, :string)
3940
field(:from_github, :boolean)
@@ -104,9 +105,5 @@ defmodule GroupherServer.Accounts.Model.User do
104105
|> validate_inclusion(:sex, ["dude", "girl"])
105106
|> validate_format(:email, ~r/@/)
106107
|> validate_length(:location, min: 2, max: 30)
107-
108-
# |> validate_length(:qq, min: 8, max: 15)
109-
# |> validate_length(:weichat, min: 3, max: 30)
110-
# |> validate_length(:weibo, min: 3, max: 30)
111108
end
112109
end

lib/groupher_server/cms/delegates/community_curd.ex

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule GroupherServer.CMS.Delegate.CommunityCURD do
33
community curd
44
"""
55
import Ecto.Query, warn: false
6-
import Helper.Utils, only: [done: 1, strip_struct: 1, get_config: 2]
6+
import Helper.Utils, only: [done: 1, strip_struct: 1, get_config: 2, plural: 1]
77
import GroupherServer.CMS.Delegate.ArticleCURD, only: [ensure_author_exists: 1]
88
import GroupherServer.CMS.Helper.Matcher
99
import ShortMaps
@@ -130,15 +130,15 @@ defmodule GroupherServer.CMS.Delegate.CommunityCURD do
130130
|> ORM.count()
131131

132132
community_meta = if is_nil(community.meta), do: @default_meta, else: community.meta
133-
meta = Map.put(community_meta, :"#{thread}s_count", thread_article_count)
133+
meta = Map.put(community_meta, :"#{plural(thread)}_count", thread_article_count)
134134

135135
community
136136
|> ORM.update_meta(meta, changes: %{articles_count: recount_articles_count(meta)})
137137
end
138138
end
139139

140140
defp recount_articles_count(meta) do
141-
@article_threads |> Enum.reduce(0, &(&2 + Map.get(meta, :"#{&1}s_count")))
141+
@article_threads |> Enum.reduce(0, &(&2 + Map.get(meta, :"#{plural(&1)}_count")))
142142
end
143143

144144
@doc """

lib/groupher_server/cms/delegates/works_curd.ex

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ defmodule GroupherServer.CMS.Delegate.WorksCURD do
5050
defp update_works_fields(%Works{} = works, attrs) do
5151
works = Repo.preload(works, [:techstacks, :cities])
5252

53+
cover = Map.get(attrs, :cover, works.cover)
5354
desc = Map.get(attrs, :desc, works.desc)
5455
home_link = Map.get(attrs, :home_link, works.home_link)
5556
techstacks = Map.get(attrs, :techstacks, works.techstacks)
@@ -60,7 +61,7 @@ defmodule GroupherServer.CMS.Delegate.WorksCURD do
6061
with {:ok, techstacks} <- get_or_create_techstacks(techstacks),
6162
{:ok, cities} <- get_or_create_cities(cities) do
6263
works
63-
|> Ecto.Changeset.change(%{desc: desc, home_link: home_link})
64+
|> Ecto.Changeset.change(%{cover: cover, desc: desc, home_link: home_link})
6465
|> Ecto.Changeset.put_assoc(:techstacks, uniq_by_raw(techstacks))
6566
|> Ecto.Changeset.put_assoc(:cities, uniq_by_raw(cities))
6667
|> Ecto.Changeset.put_embed(:social_info, social_info)

lib/groupher_server/cms/helper/matcher.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ defmodule GroupherServer.CMS.Helper.Matcher do
1717
model: User,
1818
foreign_key: :account_id,
1919
preload: :account,
20-
default_meta: Accounts.Embeds.UserMeta.default_meta()
20+
default_meta: Accounts.Model.Embeds.UserMeta.default_meta()
2121
}}
2222
end
2323

0 commit comments

Comments
 (0)