diff options
author | Maksim Pechnikov <parallel588@gmail.com> | 2019-10-30 23:22:38 +0300 |
---|---|---|
committer | Maksim Pechnikov <parallel588@gmail.com> | 2019-10-30 23:22:38 +0300 |
commit | 1b82eb6d4102bc2d7acec0a905e7714c95eadc94 (patch) | |
tree | 93dff415e1044076ffa58543a6a667b9e1d59236 /lib | |
parent | d71907869908cbddf5b383bb93a00d27bdc7e58d (diff) | |
download | pleroma-1b82eb6d4102bc2d7acec0a905e7714c95eadc94.tar.gz |
move sql (update_markers) from migrate to mix task
Diffstat (limited to 'lib')
-rw-r--r-- | lib/mix/tasks/pleroma/marker.ex | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/mix/tasks/pleroma/marker.ex b/lib/mix/tasks/pleroma/marker.ex new file mode 100644 index 000000000..1d5be11de --- /dev/null +++ b/lib/mix/tasks/pleroma/marker.ex @@ -0,0 +1,36 @@ +defmodule Mix.Tasks.Pleroma.Marker do + use Mix.Task + import Mix.Pleroma + + import Ecto.Query + alias Pleroma.Repo + alias Pleroma.Notification + + def run(["update_markers"]) do + start_pleroma() + + from(q in Notification, + select: %{ + timeline: "notifications", + user_id: q.user_id, + unread_count: fragment("SUM( CASE WHEN seen = false THEN 1 ELSE 0 END )"), + last_read_id: + type(fragment("MAX( CASE WHEN seen = true THEN id ELSE null END )"), :string) + }, + group_by: [q.user_id] + ) + |> Repo.all() + |> Enum.each(fn attrs -> + Pleroma.Marker + |> struct(attrs) + |> Ecto.Changeset.change() + |> Pleroma.Repo.insert( + returning: true, + on_conflict: {:replace, [:last_read_id, :unread_count]}, + conflict_target: [:user_id, :timeline] + ) + end) + + shell_info("Done") + end +end |