From d69a2dce1b165d1f8894d222c708df26ea95e071 Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Mon, 4 Nov 2024 17:22:47 +0800 Subject: [PATCH] fix: update publish namespace --- ...499d6cdd570979d0c3e001fa40e140a64fedf.json | 22 ------- ...4501a276fdac4453399190dc221de89b611f8.json | 34 ++++++++++ ...d09b0dd2e382e9fec3430680192df63876b8.json} | 4 +- ...c84482fa1dd52ee6f2cc7934e7d356b0dee6.json} | 4 +- ...4d99aae2891322994ab462908c520b782411.json} | 4 +- ...4b8cdf56df3cd31b3ed8bc15e51eacace8e04.json | 46 ------------- ...16c3aaa966cac58e1a24148ea1a954e4a544.json} | 4 +- ...db5cac8e25fdebe186ba2cbd65012eb91f5f.json} | 4 +- ...5e3a483d87dc006d4e361e994ce2c5d768cd.json} | 4 +- ...f94965ee0d6bee3a4ef482d1f905f9e66b66.json} | 4 +- ...01b6a8677dbe9100918673b0482a86650dfff.json | 23 ------- ...680e00a16c0d8887e94f008a2764a7a4a6f6.json} | 4 +- ...f62808f971a8262b6e1649d91526ab3a3870d.json | 35 ++++++++++ ...a0bd1343cacf4d04e98481a4787a4b965ce94.json | 16 +++++ ...c3bcdbff61ff15762381d2ceed3f7375b7ea9.json | 15 ----- ...ac71985a8d5b39037f567a3e2ac1c5eea8f64.json | 15 +++++ ...1eac710a463d1052ba10c41b207dbf63efe1.json} | 4 +- ...74847dcfa914ceae602c6554ed93162783ee8.json | 22 +++++++ libs/database/src/publish.rs | 65 ++++++++++++++++--- .../20241101063559_af_workspace_namespace.sql | 10 +-- src/biz/workspace/publish.rs | 25 ++++--- 21 files changed, 217 insertions(+), 147 deletions(-) delete mode 100644 .sqlx/query-0d4b11e74a5a9835c82a2ea8f87499d6cdd570979d0c3e001fa40e140a64fedf.json create mode 100644 .sqlx/query-12c52797d87c0ec56ffe6d8baf24501a276fdac4453399190dc221de89b611f8.json rename .sqlx/{query-e9e22adc5a6f6daf354dc122cadab41b7cc13e0d956b3204d22f26a47ad594e3.json => query-1ae2809504bb6ea7dabcb5b5acfed09b0dd2e382e9fec3430680192df63876b8.json} (52%) rename .sqlx/{query-ff0397184dd291eed259ca8518a5c1541d0971f95e51b859dd0ce02702eacd66.json => query-2167ca10f5c560d8d4121d57d425c84482fa1dd52ee6f2cc7934e7d356b0dee6.json} (64%) rename .sqlx/{query-4d0c77eaabb72b06b3f0809ee3722d932b47bf18222628a22089b6fbd3891ec4.json => query-30091f1518275d01227ece8988ea4d99aae2891322994ab462908c520b782411.json} (73%) delete mode 100644 .sqlx/query-3ab817803745c1dc20eef819d944b8cdf56df3cd31b3ed8bc15e51eacace8e04.json rename .sqlx/{query-e2ab2c5d0328f2a0900dfbd9080c0d867526bca0afee9aa4af294fbbebf3db0a.json => query-55dec46e9fb30d6236013a207d2016c3aaa966cac58e1a24148ea1a954e4a544.json} (56%) rename .sqlx/{query-d205df7e6a71335bc457f560fa5a941c738cd1f8e7c3369b0b24bb34fbb1c6eb.json => query-59b2a7854bb8f0d7ee34b9dfa4e3db5cac8e25fdebe186ba2cbd65012eb91f5f.json} (76%) rename .sqlx/{query-e4567475b82642745a7a96ec273efe7b549beedbf7e17b5b18d459334c29aa82.json => query-620167841bb2acdd1c9c6aadf8245e3a483d87dc006d4e361e994ce2c5d768cd.json} (68%) rename .sqlx/{query-8f5b50a17db6599da536d50de5c77b22d3be3160638285563e32d4dc2b787916.json => query-8957cc00ca63bcc4d29c394a7a16f94965ee0d6bee3a4ef482d1f905f9e66b66.json} (73%) delete mode 100644 .sqlx/query-8d21739be9b0cb62878aaad1bc901b6a8677dbe9100918673b0482a86650dfff.json rename .sqlx/{query-b2724ac4427c488c23e645c1aaf3c1e9b23e8042abb3ad4e255533dda39f6309.json => query-b450decddb39bd057d850efce1a8680e00a16c0d8887e94f008a2764a7a4a6f6.json} (56%) create mode 100644 .sqlx/query-bf9bff5c65ba051329ed2b694eff62808f971a8262b6e1649d91526ab3a3870d.json create mode 100644 .sqlx/query-c43d414f6fcaed34e059f55abaaa0bd1343cacf4d04e98481a4787a4b965ce94.json delete mode 100644 .sqlx/query-e6d81a899998593cec0395f9c29c3bcdbff61ff15762381d2ceed3f7375b7ea9.json create mode 100644 .sqlx/query-ea239353f73904400915ec89640ac71985a8d5b39037f567a3e2ac1c5eea8f64.json rename .sqlx/{query-785c4c1e9b393a1f04a88136211df0c5daa7ad0c52f3e7e071156595262ca44f.json => query-eb142b33bd6d0d9f3ceb597be9251eac710a463d1052ba10c41b207dbf63efe1.json} (73%) create mode 100644 .sqlx/query-f3e9184f6ebb4df77159031701474847dcfa914ceae602c6554ed93162783ee8.json diff --git a/.sqlx/query-0d4b11e74a5a9835c82a2ea8f87499d6cdd570979d0c3e001fa40e140a64fedf.json b/.sqlx/query-0d4b11e74a5a9835c82a2ea8f87499d6cdd570979d0c3e001fa40e140a64fedf.json deleted file mode 100644 index ed3b47a8..00000000 --- a/.sqlx/query-0d4b11e74a5a9835c82a2ea8f87499d6cdd570979d0c3e001fa40e140a64fedf.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT publish_namespace\n FROM af_workspace\n WHERE workspace_id = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "publish_namespace", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Uuid" - ] - }, - "nullable": [ - false - ] - }, - "hash": "0d4b11e74a5a9835c82a2ea8f87499d6cdd570979d0c3e001fa40e140a64fedf" -} diff --git a/.sqlx/query-12c52797d87c0ec56ffe6d8baf24501a276fdac4453399190dc221de89b611f8.json b/.sqlx/query-12c52797d87c0ec56ffe6d8baf24501a276fdac4453399190dc221de89b611f8.json new file mode 100644 index 00000000..61655c3d --- /dev/null +++ b/.sqlx/query-12c52797d87c0ec56ffe6d8baf24501a276fdac4453399190dc221de89b611f8.json @@ -0,0 +1,34 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT workspace_id, namespace, is_original\n FROM af_workspace_namespace\n WHERE workspace_id = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Uuid" + }, + { + "ordinal": 1, + "name": "namespace", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "is_original", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "12c52797d87c0ec56ffe6d8baf24501a276fdac4453399190dc221de89b611f8" +} diff --git a/.sqlx/query-e9e22adc5a6f6daf354dc122cadab41b7cc13e0d956b3204d22f26a47ad594e3.json b/.sqlx/query-1ae2809504bb6ea7dabcb5b5acfed09b0dd2e382e9fec3430680192df63876b8.json similarity index 52% rename from .sqlx/query-e9e22adc5a6f6daf354dc122cadab41b7cc13e0d956b3204d22f26a47ad594e3.json rename to .sqlx/query-1ae2809504bb6ea7dabcb5b5acfed09b0dd2e382e9fec3430680192df63876b8.json index 0139ec17..7da5ce9d 100644 --- a/.sqlx/query-e9e22adc5a6f6daf354dc122cadab41b7cc13e0d956b3204d22f26a47ad594e3.json +++ b/.sqlx/query-1ae2809504bb6ea7dabcb5b5acfed09b0dd2e382e9fec3430680192df63876b8.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT\n af.uuid\n FROM af_published_collab apc\n JOIN af_user af ON af.uid = apc.published_by\n WHERE view_id = $1\n ", + "query": "\n SELECT af.uuid\n FROM af_published_collab apc\n JOIN af_user af ON af.uid = apc.published_by\n WHERE view_id = $1\n ", "describe": { "columns": [ { @@ -18,5 +18,5 @@ false ] }, - "hash": "e9e22adc5a6f6daf354dc122cadab41b7cc13e0d956b3204d22f26a47ad594e3" + "hash": "1ae2809504bb6ea7dabcb5b5acfed09b0dd2e382e9fec3430680192df63876b8" } diff --git a/.sqlx/query-ff0397184dd291eed259ca8518a5c1541d0971f95e51b859dd0ce02702eacd66.json b/.sqlx/query-2167ca10f5c560d8d4121d57d425c84482fa1dd52ee6f2cc7934e7d356b0dee6.json similarity index 64% rename from .sqlx/query-ff0397184dd291eed259ca8518a5c1541d0971f95e51b859dd0ce02702eacd66.json rename to .sqlx/query-2167ca10f5c560d8d4121d57d425c84482fa1dd52ee6f2cc7934e7d356b0dee6.json index 9339c132..8dfd3946 100644 --- a/.sqlx/query-ff0397184dd291eed259ca8518a5c1541d0971f95e51b859dd0ce02702eacd66.json +++ b/.sqlx/query-2167ca10f5c560d8d4121d57d425c84482fa1dd52ee6f2cc7934e7d356b0dee6.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT default_published_view_id\n FROM af_workspace\n WHERE publish_namespace = $1\n ", + "query": "\n SELECT default_published_view_id\n FROM af_workspace\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1)\n ", "describe": { "columns": [ { @@ -18,5 +18,5 @@ true ] }, - "hash": "ff0397184dd291eed259ca8518a5c1541d0971f95e51b859dd0ce02702eacd66" + "hash": "2167ca10f5c560d8d4121d57d425c84482fa1dd52ee6f2cc7934e7d356b0dee6" } diff --git a/.sqlx/query-4d0c77eaabb72b06b3f0809ee3722d932b47bf18222628a22089b6fbd3891ec4.json b/.sqlx/query-30091f1518275d01227ece8988ea4d99aae2891322994ab462908c520b782411.json similarity index 73% rename from .sqlx/query-4d0c77eaabb72b06b3f0809ee3722d932b47bf18222628a22089b6fbd3891ec4.json rename to .sqlx/query-30091f1518275d01227ece8988ea4d99aae2891322994ab462908c520b782411.json index 07e706d0..e8dcc0de 100644 --- a/.sqlx/query-4d0c77eaabb72b06b3f0809ee3722d932b47bf18222628a22089b6fbd3891ec4.json +++ b/.sqlx/query-30091f1518275d01227ece8988ea4d99aae2891322994ab462908c520b782411.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT metadata\n FROM af_published_collab\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace WHERE publish_namespace = $1)\n AND publish_name = $2\n ", + "query": "\n SELECT metadata\n FROM af_published_collab\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1)\n AND publish_name = $2\n ", "describe": { "columns": [ { @@ -19,5 +19,5 @@ false ] }, - "hash": "4d0c77eaabb72b06b3f0809ee3722d932b47bf18222628a22089b6fbd3891ec4" + "hash": "30091f1518275d01227ece8988ea4d99aae2891322994ab462908c520b782411" } diff --git a/.sqlx/query-3ab817803745c1dc20eef819d944b8cdf56df3cd31b3ed8bc15e51eacace8e04.json b/.sqlx/query-3ab817803745c1dc20eef819d944b8cdf56df3cd31b3ed8bc15e51eacace8e04.json deleted file mode 100644 index 99eed9b7..00000000 --- a/.sqlx/query-3ab817803745c1dc20eef819d944b8cdf56df3cd31b3ed8bc15e51eacace8e04.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n aw.publish_namespace AS namespace,\n apc.publish_name,\n apc.view_id,\n au.email AS publisher_email,\n apc.created_at AS publish_timestamp\n FROM af_published_collab apc\n JOIN af_user au ON apc.published_by = au.uid\n JOIN af_workspace aw ON apc.workspace_id = aw.workspace_id\n WHERE apc.workspace_id = $1;\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "namespace", - "type_info": "Text" - }, - { - "ordinal": 1, - "name": "publish_name", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "view_id", - "type_info": "Uuid" - }, - { - "ordinal": 3, - "name": "publisher_email", - "type_info": "Text" - }, - { - "ordinal": 4, - "name": "publish_timestamp", - "type_info": "Timestamptz" - } - ], - "parameters": { - "Left": [ - "Uuid" - ] - }, - "nullable": [ - false, - false, - false, - false, - false - ] - }, - "hash": "3ab817803745c1dc20eef819d944b8cdf56df3cd31b3ed8bc15e51eacace8e04" -} diff --git a/.sqlx/query-e2ab2c5d0328f2a0900dfbd9080c0d867526bca0afee9aa4af294fbbebf3db0a.json b/.sqlx/query-55dec46e9fb30d6236013a207d2016c3aaa966cac58e1a24148ea1a954e4a544.json similarity index 56% rename from .sqlx/query-e2ab2c5d0328f2a0900dfbd9080c0d867526bca0afee9aa4af294fbbebf3db0a.json rename to .sqlx/query-55dec46e9fb30d6236013a207d2016c3aaa966cac58e1a24148ea1a954e4a544.json index b447b43b..8d6b9b88 100644 --- a/.sqlx/query-e2ab2c5d0328f2a0900dfbd9080c0d867526bca0afee9aa4af294fbbebf3db0a.json +++ b/.sqlx/query-55dec46e9fb30d6236013a207d2016c3aaa966cac58e1a24148ea1a954e4a544.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT\n aw.publish_namespace AS namespace,\n apc.publish_name,\n apc.view_id,\n au.email AS publisher_email,\n apc.created_at AS publish_timestamp\n FROM af_published_collab apc\n JOIN af_user au ON apc.published_by = au.uid\n JOIN af_workspace aw ON apc.workspace_id = aw.workspace_id\n WHERE apc.view_id = ANY($1);\n ", + "query": "\n SELECT\n awn.namespace,\n apc.publish_name,\n apc.view_id,\n au.email AS publisher_email,\n apc.created_at AS publish_timestamp\n FROM af_published_collab apc\n JOIN af_user au ON apc.published_by = au.uid\n JOIN af_workspace aw ON apc.workspace_id = aw.workspace_id\n JOIN af_workspace_namespace awn ON aw.workspace_id = awn.workspace_id AND awn.is_original = TRUE\n WHERE apc.view_id = ANY($1);\n ", "describe": { "columns": [ { @@ -42,5 +42,5 @@ false ] }, - "hash": "e2ab2c5d0328f2a0900dfbd9080c0d867526bca0afee9aa4af294fbbebf3db0a" + "hash": "55dec46e9fb30d6236013a207d2016c3aaa966cac58e1a24148ea1a954e4a544" } diff --git a/.sqlx/query-d205df7e6a71335bc457f560fa5a941c738cd1f8e7c3369b0b24bb34fbb1c6eb.json b/.sqlx/query-59b2a7854bb8f0d7ee34b9dfa4e3db5cac8e25fdebe186ba2cbd65012eb91f5f.json similarity index 76% rename from .sqlx/query-d205df7e6a71335bc457f560fa5a941c738cd1f8e7c3369b0b24bb34fbb1c6eb.json rename to .sqlx/query-59b2a7854bb8f0d7ee34b9dfa4e3db5cac8e25fdebe186ba2cbd65012eb91f5f.json index c5a3f5a1..7857be29 100644 --- a/.sqlx/query-d205df7e6a71335bc457f560fa5a941c738cd1f8e7c3369b0b24bb34fbb1c6eb.json +++ b/.sqlx/query-59b2a7854bb8f0d7ee34b9dfa4e3db5cac8e25fdebe186ba2cbd65012eb91f5f.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT workspace_id, view_id\n FROM af_published_collab\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace WHERE publish_namespace = $1)\n AND publish_name = $2\n ", + "query": "\n SELECT workspace_id, view_id\n FROM af_published_collab\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1)\n AND publish_name = $2\n ", "describe": { "columns": [ { @@ -25,5 +25,5 @@ false ] }, - "hash": "d205df7e6a71335bc457f560fa5a941c738cd1f8e7c3369b0b24bb34fbb1c6eb" + "hash": "59b2a7854bb8f0d7ee34b9dfa4e3db5cac8e25fdebe186ba2cbd65012eb91f5f" } diff --git a/.sqlx/query-e4567475b82642745a7a96ec273efe7b549beedbf7e17b5b18d459334c29aa82.json b/.sqlx/query-620167841bb2acdd1c9c6aadf8245e3a483d87dc006d4e361e994ce2c5d768cd.json similarity index 68% rename from .sqlx/query-e4567475b82642745a7a96ec273efe7b549beedbf7e17b5b18d459334c29aa82.json rename to .sqlx/query-620167841bb2acdd1c9c6aadf8245e3a483d87dc006d4e361e994ce2c5d768cd.json index 7a31ad12..2795179f 100644 --- a/.sqlx/query-e4567475b82642745a7a96ec273efe7b549beedbf7e17b5b18d459334c29aa82.json +++ b/.sqlx/query-620167841bb2acdd1c9c6aadf8245e3a483d87dc006d4e361e994ce2c5d768cd.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT EXISTS(\n SELECT 1\n FROM af_workspace\n WHERE publish_namespace = $1\n )\n ", + "query": "\n SELECT EXISTS(\n SELECT 1\n FROM af_workspace_namespace\n WHERE namespace = $1\n )\n ", "describe": { "columns": [ { @@ -18,5 +18,5 @@ null ] }, - "hash": "e4567475b82642745a7a96ec273efe7b549beedbf7e17b5b18d459334c29aa82" + "hash": "620167841bb2acdd1c9c6aadf8245e3a483d87dc006d4e361e994ce2c5d768cd" } diff --git a/.sqlx/query-8f5b50a17db6599da536d50de5c77b22d3be3160638285563e32d4dc2b787916.json b/.sqlx/query-8957cc00ca63bcc4d29c394a7a16f94965ee0d6bee3a4ef482d1f905f9e66b66.json similarity index 73% rename from .sqlx/query-8f5b50a17db6599da536d50de5c77b22d3be3160638285563e32d4dc2b787916.json rename to .sqlx/query-8957cc00ca63bcc4d29c394a7a16f94965ee0d6bee3a4ef482d1f905f9e66b66.json index 830875a2..f6b25e2a 100644 --- a/.sqlx/query-8f5b50a17db6599da536d50de5c77b22d3be3160638285563e32d4dc2b787916.json +++ b/.sqlx/query-8957cc00ca63bcc4d29c394a7a16f94965ee0d6bee3a4ef482d1f905f9e66b66.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT blob\n FROM af_published_collab\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace WHERE publish_namespace = $1)\n AND publish_name = $2\n ", + "query": "\n SELECT blob\n FROM af_published_collab\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1)\n AND publish_name = $2\n ", "describe": { "columns": [ { @@ -19,5 +19,5 @@ false ] }, - "hash": "8f5b50a17db6599da536d50de5c77b22d3be3160638285563e32d4dc2b787916" + "hash": "8957cc00ca63bcc4d29c394a7a16f94965ee0d6bee3a4ef482d1f905f9e66b66" } diff --git a/.sqlx/query-8d21739be9b0cb62878aaad1bc901b6a8677dbe9100918673b0482a86650dfff.json b/.sqlx/query-8d21739be9b0cb62878aaad1bc901b6a8677dbe9100918673b0482a86650dfff.json deleted file mode 100644 index 7dcec9e0..00000000 --- a/.sqlx/query-8d21739be9b0cb62878aaad1bc901b6a8677dbe9100918673b0482a86650dfff.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT EXISTS(\n SELECT 1\n FROM af_workspace\n WHERE workspace_id = $1\n AND publish_namespace = $2\n )\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "exists", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Uuid", - "Text" - ] - }, - "nullable": [ - null - ] - }, - "hash": "8d21739be9b0cb62878aaad1bc901b6a8677dbe9100918673b0482a86650dfff" -} diff --git a/.sqlx/query-b2724ac4427c488c23e645c1aaf3c1e9b23e8042abb3ad4e255533dda39f6309.json b/.sqlx/query-b450decddb39bd057d850efce1a8680e00a16c0d8887e94f008a2764a7a4a6f6.json similarity index 56% rename from .sqlx/query-b2724ac4427c488c23e645c1aaf3c1e9b23e8042abb3ad4e255533dda39f6309.json rename to .sqlx/query-b450decddb39bd057d850efce1a8680e00a16c0d8887e94f008a2764a7a4a6f6.json index 5979b4b9..286c7329 100644 --- a/.sqlx/query-b2724ac4427c488c23e645c1aaf3c1e9b23e8042abb3ad4e255533dda39f6309.json +++ b/.sqlx/query-b450decddb39bd057d850efce1a8680e00a16c0d8887e94f008a2764a7a4a6f6.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT\n aw.publish_namespace AS namespace,\n apc.publish_name,\n apc.view_id,\n au.email AS publisher_email,\n apc.created_at AS publish_timestamp\n FROM af_published_collab apc\n JOIN af_user au ON apc.published_by = au.uid\n JOIN af_workspace aw ON apc.workspace_id = aw.workspace_id\n WHERE apc.view_id = $1;\n ", + "query": "\n SELECT\n awn.namespace,\n apc.publish_name,\n apc.view_id,\n au.email AS publisher_email,\n apc.created_at AS publish_timestamp\n FROM af_published_collab apc\n JOIN af_user au ON apc.published_by = au.uid\n JOIN af_workspace aw ON apc.workspace_id = aw.workspace_id\n JOIN af_workspace_namespace awn ON aw.workspace_id = awn.workspace_id AND awn.is_original = TRUE\n WHERE apc.workspace_id = $1;\n ", "describe": { "columns": [ { @@ -42,5 +42,5 @@ false ] }, - "hash": "b2724ac4427c488c23e645c1aaf3c1e9b23e8042abb3ad4e255533dda39f6309" + "hash": "b450decddb39bd057d850efce1a8680e00a16c0d8887e94f008a2764a7a4a6f6" } diff --git a/.sqlx/query-bf9bff5c65ba051329ed2b694eff62808f971a8262b6e1649d91526ab3a3870d.json b/.sqlx/query-bf9bff5c65ba051329ed2b694eff62808f971a8262b6e1649d91526ab3a3870d.json new file mode 100644 index 00000000..1d933580 --- /dev/null +++ b/.sqlx/query-bf9bff5c65ba051329ed2b694eff62808f971a8262b6e1649d91526ab3a3870d.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT workspace_id, namespace, is_original\n FROM af_workspace_namespace\n WHERE workspace_id = $1\n AND namespace = $2\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Uuid" + }, + { + "ordinal": 1, + "name": "namespace", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "is_original", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "bf9bff5c65ba051329ed2b694eff62808f971a8262b6e1649d91526ab3a3870d" +} diff --git a/.sqlx/query-c43d414f6fcaed34e059f55abaaa0bd1343cacf4d04e98481a4787a4b965ce94.json b/.sqlx/query-c43d414f6fcaed34e059f55abaaa0bd1343cacf4d04e98481a4787a4b965ce94.json new file mode 100644 index 00000000..4dadadcd --- /dev/null +++ b/.sqlx/query-c43d414f6fcaed34e059f55abaaa0bd1343cacf4d04e98481a4787a4b965ce94.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE af_workspace_namespace\n SET namespace = $1\n WHERE workspace_id = $2\n AND namespace = $3\n AND is_original = FALSE\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Text" + ] + }, + "nullable": [] + }, + "hash": "c43d414f6fcaed34e059f55abaaa0bd1343cacf4d04e98481a4787a4b965ce94" +} diff --git a/.sqlx/query-e6d81a899998593cec0395f9c29c3bcdbff61ff15762381d2ceed3f7375b7ea9.json b/.sqlx/query-e6d81a899998593cec0395f9c29c3bcdbff61ff15762381d2ceed3f7375b7ea9.json deleted file mode 100644 index effc8cb3..00000000 --- a/.sqlx/query-e6d81a899998593cec0395f9c29c3bcdbff61ff15762381d2ceed3f7375b7ea9.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE af_workspace\n SET publish_namespace = $1\n WHERE workspace_id = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Uuid" - ] - }, - "nullable": [] - }, - "hash": "e6d81a899998593cec0395f9c29c3bcdbff61ff15762381d2ceed3f7375b7ea9" -} diff --git a/.sqlx/query-ea239353f73904400915ec89640ac71985a8d5b39037f567a3e2ac1c5eea8f64.json b/.sqlx/query-ea239353f73904400915ec89640ac71985a8d5b39037f567a3e2ac1c5eea8f64.json new file mode 100644 index 00000000..82e11bf5 --- /dev/null +++ b/.sqlx/query-ea239353f73904400915ec89640ac71985a8d5b39037f567a3e2ac1c5eea8f64.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO af_workspace_namespace\n VALUES ($1, $2, FALSE)\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "ea239353f73904400915ec89640ac71985a8d5b39037f567a3e2ac1c5eea8f64" +} diff --git a/.sqlx/query-785c4c1e9b393a1f04a88136211df0c5daa7ad0c52f3e7e071156595262ca44f.json b/.sqlx/query-eb142b33bd6d0d9f3ceb597be9251eac710a463d1052ba10c41b207dbf63efe1.json similarity index 73% rename from .sqlx/query-785c4c1e9b393a1f04a88136211df0c5daa7ad0c52f3e7e071156595262ca44f.json rename to .sqlx/query-eb142b33bd6d0d9f3ceb597be9251eac710a463d1052ba10c41b207dbf63efe1.json index efcbc9ab..0177ecc5 100644 --- a/.sqlx/query-785c4c1e9b393a1f04a88136211df0c5daa7ad0c52f3e7e071156595262ca44f.json +++ b/.sqlx/query-eb142b33bd6d0d9f3ceb597be9251eac710a463d1052ba10c41b207dbf63efe1.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT workspace_id\n FROM af_workspace\n WHERE publish_namespace = $1\n ", + "query": "\n SELECT workspace_id\n FROM af_workspace_namespace\n WHERE namespace = $1\n ", "describe": { "columns": [ { @@ -18,5 +18,5 @@ false ] }, - "hash": "785c4c1e9b393a1f04a88136211df0c5daa7ad0c52f3e7e071156595262ca44f" + "hash": "eb142b33bd6d0d9f3ceb597be9251eac710a463d1052ba10c41b207dbf63efe1" } diff --git a/.sqlx/query-f3e9184f6ebb4df77159031701474847dcfa914ceae602c6554ed93162783ee8.json b/.sqlx/query-f3e9184f6ebb4df77159031701474847dcfa914ceae602c6554ed93162783ee8.json new file mode 100644 index 00000000..f52a9669 --- /dev/null +++ b/.sqlx/query-f3e9184f6ebb4df77159031701474847dcfa914ceae602c6554ed93162783ee8.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT namespace\n FROM af_workspace_namespace\n WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1)\n AND is_original = FALSE\n ORDER BY created_at ASC\n LIMIT 1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "namespace", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "f3e9184f6ebb4df77159031701474847dcfa914ceae602c6554ed93162783ee8" +} diff --git a/libs/database/src/publish.rs b/libs/database/src/publish.rs index f3adcba3..0747d5a2 100644 --- a/libs/database/src/publish.rs +++ b/libs/database/src/publish.rs @@ -54,11 +54,35 @@ pub async fn select_workspace_publish_namespace_exists<'a, E: Executor<'a, Datab } #[inline] -pub async fn update_non_orginal_workspace_publish_namespace< - 'a, - E: Executor<'a, Database = Postgres>, ->( - executor: E, +pub async fn insert_non_orginal_workspace_publish_namespace( + pg_pool: &PgPool, + workspace_id: &Uuid, + new_namespace: &str, +) -> Result<(), AppError> { + let res = sqlx::query!( + r#" + INSERT INTO af_workspace_namespace + VALUES ($1, $2, FALSE) + "#, + new_namespace, + workspace_id, + ) + .execute(pg_pool) + .await?; + + if res.rows_affected() != 1 { + tracing::error!( + "Failed to insert workspace publish namespace, workspace_id: {}, new_namespace: {}, rows_affected: {}", + workspace_id, new_namespace, res.rows_affected() + ); + } + + Ok(()) +} + +#[inline] +pub async fn update_non_orginal_workspace_publish_namespace( + pg_pool: &PgPool, workspace_id: &Uuid, old_namespace: &str, new_namespace: &str, @@ -75,7 +99,7 @@ pub async fn update_non_orginal_workspace_publish_namespace< workspace_id, old_namespace, ) - .execute(executor) + .execute(pg_pool) .await?; if res.rows_affected() != 1 { @@ -147,8 +171,8 @@ pub async fn update_workspace_default_publish_view_set_null< } #[inline] -pub async fn select_workspace_publish_namespaces<'a, E: Executor<'a, Database = Postgres>>( - executor: E, +pub async fn select_workspace_publish_namespaces( + pg_pool: &PgPool, workspace_id: &Uuid, ) -> Result, AppError> { let res = sqlx::query_as!( @@ -160,7 +184,30 @@ pub async fn select_workspace_publish_namespaces<'a, E: Executor<'a, Database = "#, workspace_id, ) - .fetch_all(executor) + .fetch_all(pg_pool) + .await?; + + Ok(res) +} + +#[inline] +pub async fn select_workspace_publish_namespace( + pg_pool: &PgPool, + workspace_id: &Uuid, + namespace: &str, +) -> Result { + let res = sqlx::query_as!( + WorkspaceNamespace, + r#" + SELECT workspace_id, namespace, is_original + FROM af_workspace_namespace + WHERE workspace_id = $1 + AND namespace = $2 + "#, + workspace_id, + namespace, + ) + .fetch_one(pg_pool) .await?; Ok(res) diff --git a/migrations/20241101063559_af_workspace_namespace.sql b/migrations/20241101063559_af_workspace_namespace.sql index 7b9bfdc1..342d3272 100644 --- a/migrations/20241101063559_af_workspace_namespace.sql +++ b/migrations/20241101063559_af_workspace_namespace.sql @@ -7,11 +7,11 @@ ALTER TABLE af_workspace DROP CONSTRAINT af_workspace_publish_namespace_key; -- Table to store user defined namespace for workspace CREATE TABLE IF NOT EXISTS af_workspace_namespace ( - namespace TEXT NOT NULL PRIMARY KEY, - workspace_id UUID NOT NULL, - default_view_id UUID, - created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + namespace TEXT NOT NULL PRIMARY KEY, + workspace_id UUID NOT NULL, + is_original BOOLEAN NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (workspace_id) REFERENCES af_workspace (workspace_id) ON DELETE CASCADE ); diff --git a/src/biz/workspace/publish.rs b/src/biz/workspace/publish.rs index c2cd35eb..1a189f2d 100644 --- a/src/biz/workspace/publish.rs +++ b/src/biz/workspace/publish.rs @@ -2,8 +2,9 @@ use appflowy_collaborate::collab::storage::CollabAccessControlStorage; use database::{ collab::GetCollabOrigin, publish::{ - select_all_published_collab_info, select_default_published_view_id, - select_default_published_view_id_for_namespace, select_workspace_publish_namespaces, + insert_non_orginal_workspace_publish_namespace, select_all_published_collab_info, + select_default_published_view_id, select_default_published_view_id_for_namespace, + select_workspace_publish_namespace, select_workspace_publish_namespaces, update_published_collabs, update_workspace_default_publish_view, update_workspace_default_publish_view_set_null, }, @@ -97,13 +98,19 @@ pub async fn set_workspace_namespace( "publish namespace is already taken".to_string(), )); }; - update_non_orginal_workspace_publish_namespace( - pg_pool, - workspace_id, - old_namespace, - new_namespace, - ) - .await?; + let ws_namespace = + select_workspace_publish_namespace(pg_pool, workspace_id, old_namespace).await?; + if ws_namespace.is_original { + insert_non_orginal_workspace_publish_namespace(pg_pool, workspace_id, new_namespace).await?; + } else { + update_non_orginal_workspace_publish_namespace( + pg_pool, + workspace_id, + old_namespace, + new_namespace, + ) + .await?; + } Ok(()) }