aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/notification.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pleroma/notification.ex')
-rw-r--r--lib/pleroma/notification.ex46
1 files changed, 13 insertions, 33 deletions
diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex
index ca492c1ad..f517282f7 100644
--- a/lib/pleroma/notification.ex
+++ b/lib/pleroma/notification.ex
@@ -5,7 +5,6 @@
defmodule Pleroma.Notification do
use Ecto.Schema
- alias Ecto.Multi
alias Pleroma.Activity
alias Pleroma.FollowingRelationship
alias Pleroma.Marker
@@ -41,17 +40,6 @@ defmodule Pleroma.Notification do
|> cast(attrs, [:seen])
end
- @spec last_read_query(User.t()) :: Ecto.Queryable.t()
- def last_read_query(user) do
- from(q in Pleroma.Notification,
- where: q.user_id == ^user.id,
- where: q.seen == true,
- select: type(q.id, :string),
- limit: 1,
- order_by: [desc: :id]
- )
- end
-
defp for_user_query_ap_id_opts(user, opts) do
ap_id_relationships =
[:block] ++
@@ -198,23 +186,25 @@ defmodule Pleroma.Notification do
|> Repo.all()
end
- def set_read_up_to(%{id: user_id} = user, id) do
+ def set_read_up_to(%{id: user_id} = _user, id) do
query =
from(
n in Notification,
where: n.user_id == ^user_id,
where: n.id <= ^id,
where: n.seen == false,
+ update: [
+ set: [
+ seen: true,
+ updated_at: ^NaiveDateTime.utc_now()
+ ]
+ ],
# Ideally we would preload object and activities here
# but Ecto does not support preloads in update_all
select: n.id
)
- {:ok, %{ids: {_, notification_ids}}} =
- Multi.new()
- |> Multi.update_all(:ids, query, set: [seen: true, updated_at: NaiveDateTime.utc_now()])
- |> Marker.multi_set_last_read_id(user, "notifications")
- |> Repo.transaction()
+ {_, notification_ids} = Repo.update_all(query, [])
Notification
|> where([n], n.id in ^notification_ids)
@@ -231,18 +221,11 @@ defmodule Pleroma.Notification do
|> Repo.all()
end
- @spec read_one(User.t(), String.t()) ::
- {:ok, Notification.t()} | {:error, Ecto.Changeset.t()} | nil
def read_one(%User{} = user, notification_id) do
with {:ok, %Notification{} = notification} <- get(user, notification_id) do
- Multi.new()
- |> Multi.update(:update, changeset(notification, %{seen: true}))
- |> Marker.multi_set_last_read_id(user, "notifications")
- |> Repo.transaction()
- |> case do
- {:ok, %{update: notification}} -> {:ok, notification}
- {:error, :update, changeset, _} -> {:error, changeset}
- end
+ notification
+ |> changeset(%{seen: true})
+ |> Repo.update()
end
end
@@ -324,11 +307,8 @@ defmodule Pleroma.Notification do
# TODO move to sql, too.
def create_notification(%Activity{} = activity, %User{} = user, do_send \\ true) do
unless skip?(activity, user) do
- {:ok, %{notification: notification}} =
- Multi.new()
- |> Multi.insert(:notification, %Notification{user_id: user.id, activity: activity})
- |> Marker.multi_set_last_read_id(user, "notifications")
- |> Repo.transaction()
+ notification = %Notification{user_id: user.id, activity: activity}
+ {:ok, notification} = Repo.insert(notification)
if do_send do
Streamer.stream(["user", "user:notification"], notification)