aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/notification.ex
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2019-09-04 11:33:08 +0300
committerrinpatch <rinpatch@sdf.org>2019-09-04 12:38:27 +0300
commitc2b6c1b089a813cf8c7cbd54c0f80bee4985522c (patch)
tree0d9ee1d4bd3a6279aa3b04eb51d93d07094ebd0f /lib/pleroma/notification.ex
parent46ffd8b3b6359ec796733a8fff5bdb7d03a728d5 (diff)
downloadpleroma-c2b6c1b089a813cf8c7cbd54c0f80bee4985522c.tar.gz
Extend `/api/pleroma/notifications/read` to mark multiple notifications
as read and make it respond with Mastoapi entities
Diffstat (limited to 'lib/pleroma/notification.ex')
-rw-r--r--lib/pleroma/notification.ex21
1 files changed, 19 insertions, 2 deletions
diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex
index 5d29af853..d7e232992 100644
--- a/lib/pleroma/notification.ex
+++ b/lib/pleroma/notification.ex
@@ -102,15 +102,32 @@ defmodule Pleroma.Notification do
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
)
- Repo.update_all(query, [])
+ {_, notification_ids} = Repo.update_all(query, [])
+
+ from(n in Notification, where: n.id in ^notification_ids)
+ |> join(:inner, [n], activity in assoc(n, :activity))
+ |> join(:left, [n, a], object in Object,
+ on:
+ fragment(
+ "(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)",
+ object.data,
+ a.data
+ )
+ )
+ |> preload([n, a, o], activity: {a, object: o})
+ |> Repo.all()
end
def read_one(%User{} = user, notification_id) do