diff options
author | Alex Gleason <alex@alexgleason.me> | 2021-12-29 12:13:16 -0600 |
---|---|---|
committer | Alex Gleason <alex@alexgleason.me> | 2021-12-29 12:13:16 -0600 |
commit | a13da48d3dd178024615d20aa41703b6aab4807c (patch) | |
tree | 2355871ea772ad08aa7ff0195a1815e567df081e /lib | |
parent | b6e87ada07107086458206ebf3a0072a039a0969 (diff) | |
download | pleroma-a13da48d3dd178024615d20aa41703b6aab4807c.tar.gz |
Add ObjectId.flake_from_time/1 to generate a FlakeId from a datetime
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/migrators/support/object_id.ex | 23 |
1 files changed, 23 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 |