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(delivery): redesign && rewrite#404

Merged
mydearxym merged 54 commits intodevfrommention-on-backend
Jun 22, 2021
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
Show all changes
54 commits
Select commitHold shift + click to select a range
6f181bb
refactor(delivery): back up mentions and notification
mydearxymJun 16, 2021
52166a7
refactor(delivery): back up mentions and notification
mydearxymJun 16, 2021
49ab9da
refactor(delivery): back up mentions and notification wip
mydearxymJun 16, 2021
149f07d
refactor(delivery): wip
mydearxymJun 17, 2021
f94774e
refactor(delivery): wip
mydearxymJun 17, 2021
e16d5d0
refactor(delivery): wip
mydearxymJun 17, 2021
6db40a3
refactor(delivery): wip
mydearxymJun 17, 2021
9b6d0d6
refactor(delivery): wip
mydearxymJun 17, 2021
88a4215
refactor(delivery): re-org mention & dir, naming
mydearxymJun 17, 2021
e7e18c3
refactor(delivery): move cite ORM opt to delegate & fmt, naming
mydearxymJun 18, 2021
db08ad8
refactor(delivery): fix dup case
mydearxymJun 18, 2021
c0883b6
refactor(delivery): wip
mydearxymJun 18, 2021
05f5e6f
refactor(delivery): mention wip
mydearxymJun 18, 2021
509c717
refactor(delivery): cite fix
mydearxymJun 18, 2021
4dd027d
refactor(delivery): more test on mention
mydearxymJun 18, 2021
3858123
refactor(delivery): better naming
mydearxymJun 18, 2021
e4a2fcb
refactor(delivery): better naming
mydearxymJun 18, 2021
ae217bf
refactor(delivery): mini improve
mydearxymJun 18, 2021
54272ba
refactor(delivery): rename fetch instead of paged_mention
mydearxymJun 19, 2021
5e41de0
refactor(delivery): notification wip
mydearxymJun 19, 2021
79f10f0
refactor(delivery): notification wip
mydearxymJun 19, 2021
a033968
refactor(delivery): notification wip
mydearxymJun 19, 2021
59adb5e
refactor(delivery): notification wip, cool
mydearxymJun 19, 2021
2fb8209
refactor(delivery): use common atom key
mydearxymJun 20, 2021
f253a88
refactor(delivery): upvote hooks
mydearxymJun 20, 2021
28c0ee2
refactor(delivery): upvote hooks for job & blog tests
mydearxymJun 20, 2021
b657180
refactor(delivery): collect hooks & tests
mydearxymJun 20, 2021
60bef5a
refactor(delivery): rename type -> thread in notification
mydearxymJun 20, 2021
52e13bc
refactor(delivery): fix test
mydearxymJun 20, 2021
7f1332b
refactor(delivery): fix test
mydearxymJun 20, 2021
0733508
refactor(delivery): enhence test
mydearxymJun 20, 2021
69f37b6
refactor(cite): naming adjust
mydearxymJun 20, 2021
ac43691
refactor(mention): rename type -> thread
mydearxymJun 20, 2021
076ad21
refactor(mention): clean up
mydearxymJun 20, 2021
6d20bc5
refactor(mention): mention thread clean up
mydearxymJun 20, 2021
fd59e16
refactor(mention): fix test
mydearxymJun 20, 2021
25cb482
refactor(mention): fix test
mydearxymJun 20, 2021
4c874e1
refactor(notify): test for follow
mydearxymJun 20, 2021
7e99c6c
refactor(notify): hooks for follow & test
mydearxymJun 20, 2021
dfba75e
refactor(notify): wip
mydearxymJun 21, 2021
46c27fc
refactor(notify): mark read & re-org ORM functions
mydearxymJun 21, 2021
7165d64
refactor(notify): clean up
mydearxymJun 21, 2021
6fd1118
refactor(notify): remove old delivery system
mydearxymJun 21, 2021
43d3315
refactor(notify): remove mention parse when create article
mydearxymJun 21, 2021
aa80d1a
refactor(notify): refactor account mailbox tests
mydearxymJun 21, 2021
61fcd0e
refactor(notify): fix notify update
mydearxymJun 21, 2021
2cfc57e
refactor(mailbox): mark read test & re-org
mydearxymJun 22, 2021
2136175
refactor(mailbox): remove old account mails tables
mydearxymJun 22, 2021
8803436
refactor(mailbox): read_all test
mydearxymJun 22, 2021
834391f
refactor(mailbox): paged mentions & test
mydearxymJun 22, 2021
28ecfe5
refactor(mailbox): paged notification & test
mydearxymJun 22, 2021
9954878
refactor(mailbox): read in filter
mydearxymJun 22, 2021
c85886f
refactor(mailbox): clean up wip
mydearxymJun 22, 2021
1bf1976
refactor(mailbox): fix tests
mydearxymJun 22, 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
6 changes: 5 additions & 1 deletionconfig/config.exs
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,7 +47,11 @@ config :groupher_server, :general,
user_achieve_upvote_weight: 1,
user_achieve_watch_weight: 1,
user_achieve_collect_weight: 2,
user_achieve_follow_weight: 3
user_achieve_follow_weight: 3,
# others
# 在这个时间段内,多条提醒消息将被合并为一条
notify_group_interval_hour: 1,
nofity_actions: [:upvote, :comment, :reply, :collect, :follow]

config :groupher_server, :customization,
theme: "cyan",
Expand Down
17 changes: 6 additions & 11 deletionslib/groupher_server/accounts/accounts.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@ defmodule GroupherServer.Accounts do
Fans,
CollectFolder,
Publish,
Mails,
Mailbox,
Profile,
UpvotedArticles,
Search,
Expand DownExpand Up@@ -62,17 +62,12 @@ defmodule GroupherServer.Accounts do
# upvoted articles
defdelegate paged_upvoted_articles(user_id, filter), to: UpvotedArticles

# mentions
defdelegate fetch_mentions(user, filter), to: Mails
defdelegate mailbox_status(user), to: Mailbox
defdelegate update_mailbox_status(user_id), to: Mailbox
defdelegate mark_read(type, ids, user_id), to: Mailbox
defdelegate mark_read_all(tyoe, user_id), to: Mailbox

# notifications
defdelegate fetch_notifications(user, filter), to: Mails
defdelegate fetch_sys_notifications(user, filter), to: Mails

# common message
defdelegate mailbox_status(user), to: Mails
defdelegate mark_mail_read_all(user, opt), to: Mails
defdelegate mark_mail_read(mail, user), to: Mails
defdelegate paged_mailbox_messages(type, user, filter), to: Mailbox

# customization
defdelegate get_customization(user), to: Customization
Expand Down
35 changes: 21 additions & 14 deletionslib/groupher_server/accounts/delegates/fans.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,10 +7,11 @@ defmodule GroupherServer.Accounts.Delegate.Fans do
import Helper.ErrorCode
import ShortMaps

alias Helper.{ORM, QueryBuilder, SpecType}
alias Helper.{ORM, QueryBuilder,Later,SpecType}
alias GroupherServer.{Accounts, Repo}

alias GroupherServer.Accounts.Model.{User, Embeds, UserFollower, UserFollowing}
alias Accounts.Model.{User, Embeds, UserFollower, UserFollowing}
alias Accounts.Delegate.Hooks

alias Ecto.Multi

Expand All@@ -20,27 +21,30 @@ defmodule GroupherServer.Accounts.Delegate.Fans do
follow a user
"""
@spec follow(User.t(), User.t()) :: {:ok, User.t()} | SpecType.gq_error()
def follow(%User{id: user_id}, %User{id: follower_id}) do
with true <- to_string(user_id) !== to_string(follower_id),
{:ok, target_user} <- ORM.find(User,follower_id) do
def follow(%User{} = user, %User{} = follower) do
with true <- to_string(user.id) !== to_string(follower.id),
{:ok, target_user} <- ORM.find(User,follower.id) do
Multi.new()
|> Multi.insert(
:create_follower,
UserFollower.changeset(%UserFollower{}, %{user_id: target_user.id, follower_id:user_id})
UserFollower.changeset(%UserFollower{}, %{user_id: target_user.id, follower_id:user.id})
)
|> Multi.insert(
:create_following,
UserFollowing.changeset(%UserFollowing{}, %{
user_id:user_id,
user_id:user.id,
following_id: target_user.id
})
)
|> Multi.run(:update_user_follow_info, fn _, _ ->
update_user_follow_info(target_user,user_id, :add)
update_user_follow_info(target_user,user.id, :add)
end)
|> Multi.run(:add_achievement, fn _, _ ->
Accounts.achieve(%User{id: target_user.id}, :inc, :follow)
end)
|> Multi.run(:after_hooks, fn _, _ ->
Later.run({Hooks.Notify, :handle, [:follow, user, follower]})
end)
|> Repo.transaction()
|> result()
else
Expand All@@ -53,22 +57,25 @@ defmodule GroupherServer.Accounts.Delegate.Fans do
undo a follow action to a user
"""
@spec undo_follow(User.t(), User.t()) :: {:ok, User.t()} | SpecType.gq_error()
def undo_follow(%User{id: user_id}, %User{id: follower_id}) do
with true <- to_string(user_id) !== to_string(follower_id),
{:ok, target_user} <- ORM.find(User,follower_id) do
def undo_follow(%User{} = user, %User{} = follower) do
with true <- to_string(user.id) !== to_string(follower.id),
{:ok, target_user} <- ORM.find(User,follower.id) do
Multi.new()
|> Multi.run(:delete_follower, fn _, _ ->
ORM.findby_delete!(UserFollower, %{user_id: target_user.id, follower_id:user_id})
ORM.findby_delete!(UserFollower, %{user_id: target_user.id, follower_id:user.id})
end)
|> Multi.run(:delete_following, fn _, _ ->
ORM.findby_delete!(UserFollowing, %{user_id:user_id, following_id: target_user.id})
ORM.findby_delete!(UserFollowing, %{user_id:user.id, following_id: target_user.id})
end)
|> Multi.run(:update_user_follow_info, fn _, _ ->
update_user_follow_info(target_user,user_id, :remove)
update_user_follow_info(target_user,user.id, :remove)
end)
|> Multi.run(:minus_achievement, fn _, _ ->
Accounts.achieve(%User{id: target_user.id}, :dec, :follow)
end)
|> Multi.run(:after_hooks, fn _, _ ->
Later.run({Hooks.Notify, :handle, [:undo, :follow, user, follower]})
end)
|> Repo.transaction()
|> result()
else
Expand Down
26 changes: 26 additions & 0 deletionslib/groupher_server/accounts/delegates/hooks/notify.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
defmodule GroupherServer.Accounts.Delegate.Hooks.Notify do
@moduledoc """
notify hooks, for upvote, collect, comment, reply
"""
alias GroupherServer.{Accounts, Delivery}
alias Accounts.Model.User

# 发布评论是特殊情况,单独处理
def handle(:follow, %User{} = user, %User{} = from_user) do
notify_attrs = %{
action: :follow,
user_id: user.id
}

Delivery.send(:notify, notify_attrs, from_user)
end

def handle(:undo, :follow, %User{} = user, %User{} = from_user) do
notify_attrs = %{
action: :follow,
user_id: user.id
}

Delivery.revoke(:notify, notify_attrs, from_user)
end
end
44 changes: 44 additions & 0 deletionslib/groupher_server/accounts/delegates/mailbox.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
defmodule GroupherServer.Accounts.Delegate.Mailbox do
import Ecto.Query, warn: false

import Helper.Utils, only: [done: 1]

alias GroupherServer.{Accounts, Delivery}

alias Accounts.Model.{Embeds, User}
alias Helper.ORM

@default_mailbox_status Embeds.UserMailbox.default_status()

def mailbox_status(%User{mailbox: nil}), do: @default_mailbox_status |> done
def mailbox_status(%User{mailbox: mailbox}), do: mailbox |> done

def mark_read(type, ids, %User{} = user) do
Delivery.mark_read(type, ids, user)
end

def mark_read_all(type, %User{} = user), do: Delivery.mark_read_all(type, user)

def paged_mailbox_messages(type, user, filter) do
Delivery.fetch(type, user, filter)
end

@doc "update messages count in mailbox"
def update_mailbox_status(user_id) do
with {:ok, user} <- ORM.find(User, user_id),
{:ok, unread_mentions_count} <- Delivery.unread_count(:mention, user_id),
{:ok, unread_notifications_count} <- Delivery.unread_count(:notification, user_id) do
unread_total_count = unread_mentions_count + unread_notifications_count
is_empty = unread_total_count < 1

mailbox = %{
unread_mentions_count: unread_mentions_count,
unread_notifications_count: unread_notifications_count,
unread_total_count: unread_total_count,
is_empty: is_empty
}

user |> ORM.update_embed(:mailbox, mailbox)
end
end
end
130 changes: 0 additions & 130 deletionslib/groupher_server/accounts/delegates/mails.ex
View file
Open in desktop

This file was deleted.

3 changes: 1 addition & 2 deletionslib/groupher_server/accounts/delegates/profile.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -72,8 +72,7 @@ defmodule GroupherServer.Accounts.Delegate.Profile do
"""
def update_subscribe_count(user_id) do
with {:ok, user} <- ORM.find(User, user_id) do
count_query = from(s in CommunitySubscriber, where: s.user_id == ^user.id)
count = Repo.aggregate(count_query, :count)
{:ok, count} = from(s in CommunitySubscriber, where: s.user_id == ^user.id) |> ORM.count()

user |> ORM.update(%{subscribed_communities_count: count})
end
Expand Down
31 changes: 31 additions & 0 deletionslib/groupher_server/accounts/models/embeds/user_mailbox.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
defmodule GroupherServer.Accounts.Model.Embeds.UserMailbox do
@moduledoc """
general article meta info for articles
"""
use Ecto.Schema
use Accessible

import Ecto.Changeset

@optional_fields ~w(is_empty unread_total_count unread_mentions_count unread_notifications_count)a

def default_status() do
%{
is_empty: true,
unread_total_count: 0,
unread_mentions_count: 0,
unread_notifications_count: 0
}
end

embedded_schema do
field(:is_empty, :boolean, default: true)
field(:unread_total_count, :integer, default: 0)
field(:unread_mentions_count, :integer, default: 0)
field(:unread_notifications_count, :integer, default: 0)
end

def changeset(struct, params) do
struct |> cast(params, @optional_fields)
end
end
Loading

[8]ページ先頭

©2009-2025 Movatter.jp