Let pins federate
[akkoma] / priv / repo / migrations / 20210205145000_move_pinned_activities_into_pinned_objects.exs
1 defmodule Pleroma.Repo.Migrations.MovePinnedActivitiesIntoPinnedObjects do
2 use Ecto.Migration
3
4 import Ecto.Query
5
6 alias Pleroma.Repo
7 alias Pleroma.User
8
9 def up do
10 from(u in User)
11 |> select([u], {u.id, fragment("?.pinned_activities", u)})
12 |> Repo.stream()
13 |> Stream.each(fn {user_id, pinned_activities_ids} ->
14 pinned_activities = Pleroma.Activity.all_by_ids_with_object(pinned_activities_ids)
15
16 pins =
17 Map.new(pinned_activities, fn %{object: %{data: %{"id" => object_id}}} ->
18 {object_id, NaiveDateTime.utc_now()}
19 end)
20
21 from(u in User, where: u.id == ^user_id)
22 |> Repo.update_all(set: [pinned_objects: pins])
23 end)
24 |> Stream.run()
25 end
26
27 def down, do: :noop
28 end