diff options
3 files changed, 34 insertions, 0 deletions
diff --git a/lib/pleroma/migrators/support/object_id.ex b/lib/pleroma/migrators/support/object_id.ex index dc300116a..e4425492e 100644 --- a/lib/pleroma/migrators/support/object_id.ex +++ b/lib/pleroma/migrators/support/object_id.ex @@ -46,4 +46,27 @@ defmodule Pleroma.Migrators.Support.ObjectId do |> FlakeId.from_integer() |> FlakeId.to_string() end + + @doc "Generate a FlakeId from a datetime." + @spec flake_from_time(NaiveDateTime.t()) :: flake_id :: String.t() + def flake_from_time(%NaiveDateTime{} = dt) do + dt + |> build_worker() + |> FlakeId.Worker.gen_flake() + |> FlakeId.to_string() + end + + # Build a one-off FlakeId worker. + defp build_worker(%NaiveDateTime{} = dt) do + %FlakeId.Worker{ + node: FlakeId.Worker.worker_id(), + time: get_timestamp(dt, :millisecond) + } + end + + # Convert a NaiveDateTime into a Unix timestamp. + @epoch ~N[1970-01-01 00:00:00] + defp get_timestamp(%NaiveDateTime{} = dt, unit) do + NaiveDateTime.diff(dt, @epoch, unit) + end end diff --git a/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs b/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs index 229d6fa28..6ed5fab2a 100644 --- a/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs +++ b/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs @@ -1,6 +1,7 @@ defmodule Pleroma.Repo.Migrations.ResolveActivityObjectConflicts do @moduledoc """ Find objects with a conflicting activity ID, and update them. + This should only happen on servers that existed before "20181218172826_users_and_activities_flake_id". """ use Ecto.Migration @@ -8,12 +9,15 @@ defmodule Pleroma.Repo.Migrations.ResolveActivityObjectConflicts do alias Pleroma.Migrators.Support.ObjectId alias Pleroma.Repo + import Ecto.Query + def up do Object |> join(:inner, [o], a in "activities", on: a.id == o.id) |> Repo.stream() |> Stream.each(fn object -> # TODO + :error end) end diff --git a/test/pleroma/migrators/support/object_id_test.exs b/test/pleroma/migrators/support/object_id_test.exs index 9359d8ecf..f0cdefc32 100644 --- a/test/pleroma/migrators/support/object_id_test.exs +++ b/test/pleroma/migrators/support/object_id_test.exs @@ -11,4 +11,11 @@ defmodule Pleroma.Migrators.Support.ObjectIdTest do assert ObjectId.shift_id(id, 1) == "AEma8DXGjGtUDO6Qev" assert ObjectId.shift_id(id, -1) == "AEma8DXGjGtUDO6Qet" end + + test "flake_from_time/1" do + now = NaiveDateTime.utc_now() + id = ObjectId.flake_from_time(now) + + assert FlakeId.flake_id?(id) + end end |