aboutsummaryrefslogtreecommitdiff
path: root/priv
diff options
context:
space:
mode:
authorMaksim Pechnikov <parallel588@gmail.com>2019-10-22 13:42:59 +0300
committerMaksim Pechnikov <parallel588@gmail.com>2019-10-22 14:51:46 +0300
commitd4270397dcb2aebde8ed14fd89998ab57aaae545 (patch)
tree7819e2d95c75964f592ecc5a502078663e6bee50 /priv
parent6281e4795a51034f026aeb833093e47b47255799 (diff)
downloadpleroma-d4270397dcb2aebde8ed14fd89998ab57aaae545.tar.gz
Marker: added unread_count field
Diffstat (limited to 'priv')
-rw-r--r--priv/repo/migrations/20191021113356_add_unread_to_marker.exs49
1 files changed, 49 insertions, 0 deletions
diff --git a/priv/repo/migrations/20191021113356_add_unread_to_marker.exs b/priv/repo/migrations/20191021113356_add_unread_to_marker.exs
new file mode 100644
index 000000000..32789b7f9
--- /dev/null
+++ b/priv/repo/migrations/20191021113356_add_unread_to_marker.exs
@@ -0,0 +1,49 @@
+defmodule Pleroma.Repo.Migrations.AddUnreadToMarker do
+ use Ecto.Migration
+ import Ecto.Query
+ alias Pleroma.Repo
+ alias Pleroma.Notification
+
+ def up do
+ alter table(:markers) do
+ add_if_not_exists(:unread_count, :integer, default: 0)
+ end
+
+ flush()
+
+ update_markers()
+ end
+
+ def down do
+ alter table(:markers) do
+ remove_if_exists(:unread_count, :integer)
+ end
+ end
+
+ def update_markers do
+ from(q in Notification,
+ select: %{
+ timeline: "notifications",
+ user_id: q.user_id,
+ unread_count: fragment("COUNT(*) FILTER (WHERE seen = false) as unread_count"),
+ last_read_id: fragment("(MAX(id) FILTER (WHERE seen = true)::text) as last_read_id ")
+ },
+ group_by: [q.user_id]
+ )
+ |> Repo.all()
+ |> Enum.reduce(Ecto.Multi.new(), fn attrs, multi ->
+ marker =
+ Pleroma.Marker
+ |> struct(attrs)
+ |> Ecto.Changeset.change()
+
+ multi
+ |> Ecto.Multi.insert(attrs[:user_id], marker,
+ returning: true,
+ on_conflict: {:replace, [:last_read_id, :unread_count]},
+ conflict_target: [:user_id, :timeline]
+ )
+ end)
+ |> Pleroma.Repo.transaction()
+ end
+end