defmodule Mobilizon.Storage.Repo.Migrations.AddPublishedAtToEntities do use Ecto.Migration alias Mobilizon.Storage.Repo import Ecto.Query def up do alter table(:comments) do add(:published_at, :utc_datetime) end flush() copy_published_at_from_inserted_at("comments") alter table(:resource) do add(:published_at, :utc_datetime) end flush() copy_published_at_from_inserted_at("resource") alter table(:todo_lists) do add(:published_at, :utc_datetime) end flush() copy_published_at_from_inserted_at("todo_lists") alter table(:todos) do add(:published_at, :utc_datetime) end flush() copy_published_at_from_inserted_at("todos") end def down do alter table(:comments) do remove(:published_at) end alter table(:resource) do remove(:published_at) end alter table(:todo_lists) do remove(:published_at) end alter table(:todos) do remove(:published_at) end end @spec copy_published_at_from_inserted_at(String.t()) :: any() defp copy_published_at_from_inserted_at(table_name) do from(c in table_name, update: [set: [published_at: c.inserted_at]] ) |> Repo.update_all([]) end end