aboutsummaryrefslogtreecommitdiff
path: root/priv
diff options
context:
space:
mode:
authorMaksim Pechnikov <parallel588@gmail.com>2020-10-22 10:44:00 +0300
committerAlexander Strizhakov <alex.strizhakov@gmail.com>2021-03-20 08:36:28 +0300
commitf0eb5cf5b2a849bd4971eaec633557b82c6fc27a (patch)
tree8a88599bb4b2ce076239c8a3b3d37fd445975859 /priv
parentc5e0821a12cd26cafa0101be43dc4d0df8cd7e15 (diff)
downloadpleroma-f0eb5cf5b2a849bd4971eaec633557b82c6fc27a.tar.gz
updated user tags
Diffstat (limited to 'priv')
-rw-r--r--priv/repo/migrations/20201014064744_create_user_tag.exs62
-rw-r--r--priv/repo/migrations/20201021180413_import_legacy_tags_to_users_tags.exs55
2 files changed, 56 insertions, 61 deletions
diff --git a/priv/repo/migrations/20201014064744_create_user_tag.exs b/priv/repo/migrations/20201014064744_create_user_tag.exs
index d68b3a1cd..af8fa0952 100644
--- a/priv/repo/migrations/20201014064744_create_user_tag.exs
+++ b/priv/repo/migrations/20201014064744_create_user_tag.exs
@@ -1,7 +1,7 @@
defmodule Pleroma.Repo.Migrations.CreateUserTag do
use Ecto.Migration
- def up do
+ def change do
create_if_not_exists table(:users_tags, primary_key: false) do
add(:tag_id, references(:tags, on_delete: :delete_all))
add(:user_id, references(:users, type: :uuid, on_delete: :delete_all))
@@ -10,65 +10,5 @@ defmodule Pleroma.Repo.Migrations.CreateUserTag do
create_if_not_exists(index(:users_tags, [:tag_id]))
create_if_not_exists(index(:users_tags, [:user_id]))
create_if_not_exists(unique_index(:users_tags, [:user_id, :tag_id]))
-
- flush()
-
- execute(import_user_tags())
-
- alter table(:users) do
- remove_if_exists(:tags, {:array, :string})
- end
-
- drop_if_exists(index(:users, [:tags]))
- end
-
- def down do
- alter table(:users) do
- add_if_not_exists(:tags, {:array, :string}, default: [], null: false)
- end
-
- create_if_not_exists(index(:users, [:tags], using: :gin))
-
- flush()
-
- execute(restore_tags_column())
-
- drop_if_exists(table(:users_tags))
- drop_if_exists(index(:users_tags, [:tag_id]))
- drop_if_exists(index(:users_tags, [:user_id]))
-
- drop_if_exists(
- unique_index(:users_tags, [:user_id, :tag_id], name: :user_id_tag_id_unique_index)
- )
- end
-
- defp import_user_tags do
- """
- INSERT INTO users_tags(user_id, tag_id)
- SELECT user_tags.user_id, tags.id
- FROM (
- SELECT DISTINCT TRIM(unnest(tags)) as "tag", id as "user_id"
- FROM users ) as "user_tags"
- INNER JOIN tags as tags on tags.name = user_tags."tag"
- ON CONFLICT DO NOTHING
- """
- end
-
- defp restore_tags_column do
- """
- UPDATE
- users
- SET
- tags = tags_query.tags_array,
- updated_at = now()
- FROM (
- SELECT user_id, array_agg(tags.name) as tags_array
- FROM users_tags
- INNER JOIN users ON users.id = user_id
- INNER JOIN tags ON tags.id = tag_id
- GROUP BY user_id
- ) as tags_query
- WHERE tags_query.user_id = users.id
- """
end
end
diff --git a/priv/repo/migrations/20201021180413_import_legacy_tags_to_users_tags.exs b/priv/repo/migrations/20201021180413_import_legacy_tags_to_users_tags.exs
new file mode 100644
index 000000000..0cdcc5c19
--- /dev/null
+++ b/priv/repo/migrations/20201021180413_import_legacy_tags_to_users_tags.exs
@@ -0,0 +1,55 @@
+defmodule Pleroma.Repo.Migrations.ImportLegacyTagsToUsersTags do
+ use Ecto.Migration
+
+ def up do
+ execute(import_user_tags())
+
+ alter table(:users) do
+ remove_if_exists(:tags, {:array, :string})
+ end
+
+ drop_if_exists(index(:users, [:tags]))
+ end
+
+ def down do
+ alter table(:users) do
+ add_if_not_exists(:tags, {:array, :string}, default: [], null: false)
+ end
+
+ create_if_not_exists(index(:users, [:tags], using: :gin))
+
+ flush()
+
+ execute(restore_tags_column())
+ end
+
+ defp import_user_tags do
+ """
+ INSERT INTO users_tags(user_id, tag_id)
+ SELECT user_tags.user_id, tags.id
+ FROM (
+ SELECT DISTINCT TRIM(unnest(tags)) as "tag", id as "user_id"
+ FROM users ) as "user_tags"
+ INNER JOIN tags as tags on tags.name = user_tags."tag"
+ ON CONFLICT DO NOTHING
+ """
+ end
+
+ defp restore_tags_column do
+ """
+ UPDATE
+ users
+ SET
+ tags = tags_query.tags_array,
+ updated_at = now()
+ FROM (
+ SELECT user_id, array_agg(tags.name) as tags_array
+ FROM users_tags
+ INNER JOIN users ON users.id = user_id
+ INNER JOIN tags ON tags.id = tag_id
+ GROUP BY user_id
+ ) as tags_query
+ WHERE tags_query.user_id = users.id
+ """
+ end
+end