diff options
author | rinpatch <rinpatch@sdf.org> | 2019-09-04 11:33:08 +0300 |
---|---|---|
committer | rinpatch <rinpatch@sdf.org> | 2019-09-04 12:38:27 +0300 |
commit | c2b6c1b089a813cf8c7cbd54c0f80bee4985522c (patch) | |
tree | 0d9ee1d4bd3a6279aa3b04eb51d93d07094ebd0f /lib/pleroma/notification.ex | |
parent | 46ffd8b3b6359ec796733a8fff5bdb7d03a728d5 (diff) | |
download | pleroma-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.ex | 21 |
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 |