defmodule Toolbox.Incident.IdGenerator do
@moduledoc """
Module provides functions to generate incident id.
"""
@doc """
Generates incident id based on incident type, timestamp and serialization_vector.
Serialization vector is list of attributes relevant which together with type and timestamp
identifies given incident.
iex> Toolbox.Incident.IdGenerator.generate("/incident/type", 0123456789, ["/asset/type/1"])
"/incident/type/f4c3877a-d50b-3a16-b6ec-3ebb2b308d40"
"""
def generate(incident_type, timestamp, vector) do
generated = UUID.uuid3(nil, :erlang.term_to_binary([incident_type, timestamp, vector]))
if String.ends_with?(incident_type, "/") do
"#{incident_type}#{generated}"
else
"#{incident_type}/#{generated}"
end
end
end