Chats: Change id to flake id.
authorlain <lain@soykaf.club>
Sun, 7 Jun 2020 12:25:30 +0000 (14:25 +0200)
committerlain <lain@soykaf.club>
Sun, 7 Jun 2020 12:25:30 +0000 (14:25 +0200)
lib/pleroma/chat.ex
lib/pleroma/chat/message_reference.ex
priv/repo/migrations/20200607112923_change_chat_id_to_flake.exs [new file with mode: 0644]

index 4fe31de9408d23663a09adf8ef35b8b609a02992..24a86371e7801594caa18acc33b7b9eb999f73b6 100644 (file)
@@ -16,6 +16,8 @@ defmodule Pleroma.Chat do
   It is a helper only, to make it easy to display a list of chats with other people, ordered by last bump. The actual messages are retrieved by querying the recipients of the ChatMessages.
   """
 
+  @primary_key {:id, FlakeId.Ecto.CompatType, autogenerate: true}
+
   schema "chats" do
     belongs_to(:user, User, type: FlakeId.Ecto.CompatType)
     field(:recipient, :string)
@@ -63,6 +65,7 @@ defmodule Pleroma.Chat do
     |> changeset(%{user_id: user_id, recipient: recipient})
     |> Repo.insert(
       on_conflict: [set: [updated_at: NaiveDateTime.utc_now()]],
+      returning: true,
       conflict_target: [:user_id, :recipient]
     )
   end
index 4b201db2e5f42012e08600caf6495477d62ce563..7ee7508ca8c24f2adf06523114efe3b57462ee82 100644 (file)
@@ -21,7 +21,7 @@ defmodule Pleroma.Chat.MessageReference do
 
   schema "chat_message_references" do
     belongs_to(:object, Object)
-    belongs_to(:chat, Chat)
+    belongs_to(:chat, Chat, type: FlakeId.Ecto.CompatType)
 
     field(:unread, :boolean, default: true)
 
diff --git a/priv/repo/migrations/20200607112923_change_chat_id_to_flake.exs b/priv/repo/migrations/20200607112923_change_chat_id_to_flake.exs
new file mode 100644 (file)
index 0000000..f14e269
--- /dev/null
@@ -0,0 +1,23 @@
+defmodule Pleroma.Repo.Migrations.ChangeChatIdToFlake do
+  use Ecto.Migration
+
+  def up do
+    execute("""
+    alter table chats
+    drop constraint chats_pkey cascade,
+    alter column id drop default,
+    alter column id set data type uuid using cast( lpad( to_hex(id), 32, '0') as uuid),
+    add primary key (id)
+    """)
+
+    execute("""
+    alter table chat_message_references
+    alter column chat_id set data type uuid using cast( lpad( to_hex(chat_id), 32, '0') as uuid),
+    add constraint chat_message_references_chat_id_fkey foreign key (chat_id) references chats(id) on delete cascade
+    """)
+  end
+
+  def down do
+    :ok
+  end
+end