aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAlex Gleason <alex@alexgleason.me>2021-12-29 12:13:16 -0600
committerAlex Gleason <alex@alexgleason.me>2021-12-29 12:13:16 -0600
commita13da48d3dd178024615d20aa41703b6aab4807c (patch)
tree2355871ea772ad08aa7ff0195a1815e567df081e /lib
parentb6e87ada07107086458206ebf3a0072a039a0969 (diff)
downloadpleroma-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.ex23
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