First
[anni] / priv / repo / migrations / 20210205145000_move_pinned_activities_into_pinned_objects.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Repo.Migrations.MovePinnedActivitiesIntoPinnedObjects do
6   use Ecto.Migration
7
8   import Ecto.Query
9
10   alias Pleroma.Repo
11   alias Pleroma.User
12
13   def up do
14     from(u in User)
15     |> select([u], {u.id, fragment("?.pinned_activities", u)})
16     |> Repo.stream()
17     |> Stream.each(fn {user_id, pinned_activities_ids} ->
18       pinned_activities = Pleroma.Activity.all_by_ids_with_object(pinned_activities_ids)
19
20       pins =
21         Map.new(pinned_activities, fn %{object: %{data: %{"id" => object_id}}} ->
22           {object_id, NaiveDateTime.utc_now()}
23         end)
24
25       from(u in User, where: u.id == ^user_id)
26       |> Repo.update_all(set: [pinned_objects: pins])
27     end)
28     |> Stream.run()
29   end
30
31   def down, do: :noop
32 end