+ |> Enum.reject(fn %{activity: activity} ->
+ Activity.pinned_by_actor?(activity)
+ end)
+ end
+
+ def validate_scheduled_at(changeset, false), do: changeset
+
+ def validate_scheduled_at(changeset, true) do
+ validate_change(changeset, :scheduled_at, fn _, scheduled_at ->
+ if not expires_late_enough?(scheduled_at) do
+ [scheduled_at: "an ephemeral activity must live for at least one hour"]
+ else
+ []
+ end
+ end)
+ end
+
+ def expires_late_enough?(scheduled_at) do
+ now = NaiveDateTime.utc_now()
+ diff = NaiveDateTime.diff(scheduled_at, now, :millisecond)
+ diff > @min_activity_lifetime