forked from AkkomaGang/akkoma
50 lines
1.5 KiB
Elixir
50 lines
1.5 KiB
Elixir
defmodule Pleroma.Repo.Migrations.DropChatTables do
|
|
use Ecto.Migration
|
|
|
|
def up do
|
|
# Automatically drops associated indices and constraints
|
|
drop table(:chat_message_references)
|
|
drop table(:chats)
|
|
end
|
|
|
|
def down do
|
|
# Ecto's default primary key is bigserial, thus configure manually
|
|
create table(:chats, primary_key: false) do
|
|
add(:id, :uuid, primary_key: true, autogenerated: true)
|
|
|
|
add(
|
|
:user_id,
|
|
references(:users, type: :uuid, on_delete: :delete_all)
|
|
# yes, this was nullable
|
|
)
|
|
|
|
add(
|
|
:recipient,
|
|
references(:users, column: :ap_id, type: :string, on_delete: :delete_all)
|
|
# yes, this was nullable
|
|
)
|
|
|
|
timestamps()
|
|
end
|
|
|
|
create(index(:chats, [:user_id, :recipient], unique: true))
|
|
|
|
create table(:chat_message_references, primary_key: false) do
|
|
add(:id, :uuid, primary_key: true, autogenerated: true)
|
|
add(:chat_id, references(:chats, type: :uuid, on_delete: :delete_all), null: false)
|
|
add(:object_id, references(:objects, on_delete: :delete_all), null: false)
|
|
add(:unread, :boolean, default: true, null: false)
|
|
timestamps()
|
|
end
|
|
|
|
create(index(:chat_message_references, [:chat_id, "id desc"]))
|
|
create(unique_index(:chat_message_references, [:object_id, :chat_id]))
|
|
|
|
create(
|
|
index(:chat_message_references, [:chat_id],
|
|
where: "unread = true",
|
|
name: "unread_messages_count_index"
|
|
)
|
|
)
|
|
end
|
|
end
|