Add TranslationUnitsMap as content type for Translations
This commit is contained in:
@ -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
|
||||||
|
|||||||
33
lib/outlook/translations/translation_units_map.ex
Normal file
33
lib/outlook/translations/translation_units_map.ex
Normal 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
|
||||||
Reference in New Issue
Block a user