Refactor adding tags to an event

Also refactor extracting tags from content, now uses Pleroma's Formatter

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2019-07-26 11:30:28 +02:00
parent 845d6ff857
commit 6d80bf43ea
23 changed files with 1543 additions and 864 deletions

View File

@@ -86,7 +86,6 @@ defmodule Mobilizon.Events.Event do
:uuid,
:picture_id
])
|> cast_assoc(:tags)
|> cast_assoc(:physical_address)
|> validate_required([
:title,

View File

@@ -367,7 +367,7 @@ defmodule Mobilizon.Events do
"""
def create_event(attrs \\ %{}) do
with {:ok, %Event{} = event} <- %Event{} |> Event.changeset(attrs) |> Repo.insert(),
with %Event{} = event <- do_create_event(attrs),
{:ok, %Participant{} = _participant} <-
%Participant{}
|> Participant.changeset(%{
@@ -376,7 +376,24 @@ defmodule Mobilizon.Events do
event_id: event.id
})
|> Repo.insert() do
{:ok, Repo.preload(event, [:organizer_actor])}
{:ok, event}
end
end
defp do_create_event(attrs) do
with {:ok, %Event{} = event} <- %Event{} |> Event.changeset(attrs) |> Repo.insert(),
%Event{} = event <- event |> Repo.preload([:tags, :organizer_actor]),
{:has_tags, true, _} <- {:has_tags, Map.has_key?(attrs, "tags"), event} do
event
|> Ecto.Changeset.change()
|> Ecto.Changeset.put_assoc(:tags, attrs["tags"])
|> Repo.update()
else
{:has_tags, false, event} ->
event
error ->
error
end
end
@@ -491,6 +508,22 @@ defmodule Mobilizon.Events do
"""
def get_tag!(id), do: Repo.get!(Tag, id)
def get_tag(id), do: Repo.get(Tag, id)
@doc """
Get an existing tag or create one
"""
@spec get_or_create_tag(String.t()) :: {:ok, Tag.t()} | {:error, any()}
def get_or_create_tag(title) do
case Repo.get_by(Tag, title: title) do
%Tag{} = tag ->
{:ok, tag}
nil ->
create_tag(%{"title" => title})
end
end
@doc """
Creates a tag.