feat(reports): allow reports to hold multiple events

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2023-06-05 18:32:29 +02:00
parent 538139eefa
commit f2ac3e2e5d
21 changed files with 185 additions and 104 deletions

View File

@@ -0,0 +1,14 @@
defmodule Mobilizon.Storage.Repo.Migrations.AllowMultipleEventsToBeReported do
use Ecto.Migration
def up do
create table(:reports_events, primary_key: false) do
add(:report_id, references(:reports, on_delete: :delete_all), null: false)
add(:event_id, references(:events, on_delete: :delete_all), null: false)
end
end
def down do
drop table(:reports_events)
end
end

View File

@@ -0,0 +1,31 @@
defmodule Mobilizon.Storage.Repo.Migrations.BackfillReportEventsWithOldEvents do
use Ecto.Migration
def up do
process_reports_with_events()
end
def down do
IO.puts("Doing nothing, migration can't be reverted")
end
defp process_reports_with_events do
%Postgrex.Result{rows: rows} =
Ecto.Adapters.SQL.query!(
Mobilizon.Storage.Repo,
"SELECT id, event_id FROM reports WHERE event_id IS NOT NULL"
)
Enum.map(rows, &migrate_event_row/1)
end
defp migrate_event_row([report_id, event_id]) when not is_nil(event_id) do
Ecto.Adapters.SQL.query!(
Mobilizon.Storage.Repo,
"INSERT INTO reports_events VALUES ($1, $2)",
[report_id, event_id]
)
end
defp migrate_event_row(_), do: :ok
end

View File

@@ -0,0 +1,15 @@
defmodule Mobilizon.Storage.Repo.Migrations.RemoveObsoleteEventIdOnReports do
use Ecto.Migration
def up do
alter table(:reports) do
remove_if_exists :event_id, :integer
end
end
def down do
alter table(:reports) do
add(:event_id, references(:events, on_delete: :delete_all), null: true)
end
end
end