feat(reports): allow reports to hold multiple events
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -22,13 +22,13 @@ defmodule Mobilizon.Reports.Report do
|
||||
reported: Actor.t(),
|
||||
reporter: Actor.t(),
|
||||
manager: Actor.t(),
|
||||
event: Event.t(),
|
||||
events: [Event.t()],
|
||||
comments: [Comment.t()],
|
||||
notes: [Note.t()]
|
||||
}
|
||||
|
||||
@required_attrs [:url, :reported_id, :reporter_id]
|
||||
@optional_attrs [:content, :status, :manager_id, :event_id, :local]
|
||||
@optional_attrs [:content, :status, :manager_id, :local]
|
||||
@attrs @required_attrs ++ @optional_attrs
|
||||
|
||||
@timestamps_opts [type: :utc_datetime]
|
||||
@@ -46,8 +46,8 @@ defmodule Mobilizon.Reports.Report do
|
||||
belongs_to(:reporter, Actor)
|
||||
# The actor who last acted on this report
|
||||
belongs_to(:manager, Actor)
|
||||
# The eventual Event inside the report
|
||||
belongs_to(:event, Event)
|
||||
# The eventual Events inside the report
|
||||
many_to_many(:events, Event, join_through: "reports_events", on_replace: :delete)
|
||||
# The eventual Comments inside the report
|
||||
many_to_many(:comments, Comment, join_through: "reports_comments", on_replace: :delete)
|
||||
# The notes associated to the report
|
||||
@@ -62,6 +62,7 @@ defmodule Mobilizon.Reports.Report do
|
||||
report
|
||||
|> cast(attrs, @attrs)
|
||||
|> maybe_generate_url()
|
||||
|> maybe_put_events(attrs)
|
||||
|> maybe_put_comments(attrs)
|
||||
|> validate_required(@required_attrs)
|
||||
end
|
||||
@@ -72,6 +73,12 @@ defmodule Mobilizon.Reports.Report do
|
||||
|
||||
defp maybe_put_comments(%Ecto.Changeset{} = changeset, _), do: changeset
|
||||
|
||||
defp maybe_put_events(%Ecto.Changeset{} = changeset, %{events: events}) do
|
||||
put_assoc(changeset, :events, events)
|
||||
end
|
||||
|
||||
defp maybe_put_events(%Ecto.Changeset{} = changeset, _), do: changeset
|
||||
|
||||
@spec maybe_generate_url(Ecto.Changeset.t()) :: Ecto.Changeset.t()
|
||||
defp maybe_generate_url(%Ecto.Changeset{} = changeset) do
|
||||
with res when res in [:error, {:data, nil}] <- fetch_field(changeset, :url),
|
||||
|
||||
@@ -21,7 +21,7 @@ defmodule Mobilizon.Reports do
|
||||
def get_report(id) do
|
||||
Report
|
||||
|> Repo.get(id)
|
||||
|> Repo.preload([:reported, :reporter, :manager, :event, :comments, :notes])
|
||||
|> Repo.preload([:reported, :reporter, :manager, :events, :comments, :notes])
|
||||
end
|
||||
|
||||
@doc """
|
||||
@@ -33,7 +33,7 @@ defmodule Mobilizon.Reports do
|
||||
%Report{}
|
||||
|> Report.changeset(attrs)
|
||||
|> Repo.insert() do
|
||||
{:ok, Repo.preload(report, [:event, :reported, :reporter, :comments])}
|
||||
{:ok, Repo.preload(report, [:events, :reported, :reporter, :comments])}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -102,7 +102,7 @@ defmodule Mobilizon.Reports do
|
||||
@spec list_reports_query(atom()) :: Ecto.Query.t()
|
||||
defp list_reports_query(status) do
|
||||
Report
|
||||
|> preload([:reported, :reporter, :manager, :event, :comments, :notes])
|
||||
|> preload([:reported, :reporter, :manager, :events, :comments, :notes])
|
||||
|> where([r], r.status == ^status)
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user