Add TranslationUnitsMap as content type for Translations

This commit is contained in:
Thelonius Kort
2022-12-26 19:04:21 +01:00
parent 9e9c7b5519
commit afb25a328c
2 changed files with 35 additions and 1 deletions

View File

@ -4,9 +4,10 @@ defmodule Outlook.Translations.Translation do
alias Outlook.Accounts.User alias Outlook.Accounts.User
alias Outlook.Articles.Article alias Outlook.Articles.Article
alias Outlook.Translations.TranslationUnitsMap
schema "translations" do schema "translations" do
field :content, :map field :content, TranslationUnitsMap
field :date, :utc_datetime field :date, :utc_datetime
field :lang, :string field :lang, :string
field :public, :boolean, default: false field :public, :boolean, default: false

View File

@ -0,0 +1,33 @@
defmodule Outlook.Translations.TranslationUnitsMap do
use Ecto.Type
alias Outlook.InternalTree.TranslationUnit
def type, do: :map
def cast(tumap) when is_map(tumap) do
{:ok, tumap}
end
def cast(_), do: :error
def load(serialized_map) when is_map(serialized_map) do
tumap = for {key, val_str} <- serialized_map do
val_map = Jason.decode!(val_str, keys: :atoms!)
val_tu = struct(TranslationUnit, %{val_map | status: String.to_atom(val_map.status)})
{key, val_tu}
end
|> Enum.into(%{})
{:ok, tumap}
end
def dump(tumap) when is_map(tumap) do
serialized_map = for {key, val} <- tumap do
{key, Jason.encode!(val)}
end
|> Enum.into(%{})
{:ok, serialized_map}
end
def dump(_), do: :error
end