feat(reports): allow reports to hold multiple events
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user