diff --git a/.sqlx/query-30091f1518275d01227ece8988ea4d99aae2891322994ab462908c520b782411.json b/.sqlx/query-51a3a723b1825da7b9abd9cb36db0cf8220abf063098a73e4a6fc3f87352b395.json similarity index 69% rename from .sqlx/query-30091f1518275d01227ece8988ea4d99aae2891322994ab462908c520b782411.json rename to .sqlx/query-51a3a723b1825da7b9abd9cb36db0cf8220abf063098a73e4a6fc3f87352b395.json index e8dcc0de..bbee6a80 100644 --- a/.sqlx/query-30091f1518275d01227ece8988ea4d99aae2891322994ab462908c520b782411.json +++ b/.sqlx/query-51a3a723b1825da7b9abd9cb36db0cf8220abf063098a73e4a6fc3f87352b395.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_namespace WHERE 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 unpublished_at IS NULL\n AND publish_name = $2\n ", "describe": { "columns": [ { @@ -19,5 +19,5 @@ false ] }, - "hash": "30091f1518275d01227ece8988ea4d99aae2891322994ab462908c520b782411" + "hash": "51a3a723b1825da7b9abd9cb36db0cf8220abf063098a73e4a6fc3f87352b395" } diff --git a/.sqlx/query-9848af5453a70e7a3add208f8499698ca10d55da67436bb6c8e34c5818fd7a3a.json b/.sqlx/query-92c4d0e22b1f6f117c9f19589832f5f89cb5b903eee3c12f5e5fc0f70f3236e1.json similarity index 54% rename from .sqlx/query-9848af5453a70e7a3add208f8499698ca10d55da67436bb6c8e34c5818fd7a3a.json rename to .sqlx/query-92c4d0e22b1f6f117c9f19589832f5f89cb5b903eee3c12f5e5fc0f70f3236e1.json index 5c92c0b3..d006987f 100644 --- a/.sqlx/query-9848af5453a70e7a3add208f8499698ca10d55da67436bb6c8e34c5818fd7a3a.json +++ b/.sqlx/query-92c4d0e22b1f6f117c9f19589832f5f89cb5b903eee3c12f5e5fc0f70f3236e1.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE af_published_collab\n SET\n blob = NULL,\n unpublished_at = NOW()\n WHERE workspace_id = $1\n AND view_id = ANY($2)\n ", + "query": "\n UPDATE af_published_collab\n SET\n blob = E''::bytea,\n unpublished_at = NOW()\n WHERE workspace_id = $1\n AND view_id = ANY($2)\n ", "describe": { "columns": [], "parameters": { @@ -11,5 +11,5 @@ }, "nullable": [] }, - "hash": "9848af5453a70e7a3add208f8499698ca10d55da67436bb6c8e34c5818fd7a3a" + "hash": "92c4d0e22b1f6f117c9f19589832f5f89cb5b903eee3c12f5e5fc0f70f3236e1" } diff --git a/.sqlx/query-2571550f7e2dd81103960741fecbf886f52f681c44344a814780b01fc06e4c8f.json b/.sqlx/query-cbe8402053d42529dce158b446d09a00982e1d7cdc33835776bfbefb4b4c1854.json similarity index 65% rename from .sqlx/query-2571550f7e2dd81103960741fecbf886f52f681c44344a814780b01fc06e4c8f.json rename to .sqlx/query-cbe8402053d42529dce158b446d09a00982e1d7cdc33835776bfbefb4b4c1854.json index 199355ca..2886f4bf 100644 --- a/.sqlx/query-2571550f7e2dd81103960741fecbf886f52f681c44344a814780b01fc06e4c8f.json +++ b/.sqlx/query-cbe8402053d42529dce158b446d09a00982e1d7cdc33835776bfbefb4b4c1854.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT view_id\n FROM af_published_collab\n WHERE workspace_id = $1\n AND publish_name = $2\n ", + "query": "\n SELECT view_id\n FROM af_published_collab\n WHERE workspace_id = $1\n AND unpublished_at IS NULL\n AND publish_name = $2\n ", "describe": { "columns": [ { @@ -19,5 +19,5 @@ false ] }, - "hash": "2571550f7e2dd81103960741fecbf886f52f681c44344a814780b01fc06e4c8f" + "hash": "cbe8402053d42529dce158b446d09a00982e1d7cdc33835776bfbefb4b4c1854" } diff --git a/.sqlx/query-8957cc00ca63bcc4d29c394a7a16f94965ee0d6bee3a4ef482d1f905f9e66b66.json b/.sqlx/query-fd2a37dd917717a9bb5e1db84f03f0e84e32d2fd081955389561c6567896ea9f.json similarity index 68% rename from .sqlx/query-8957cc00ca63bcc4d29c394a7a16f94965ee0d6bee3a4ef482d1f905f9e66b66.json rename to .sqlx/query-fd2a37dd917717a9bb5e1db84f03f0e84e32d2fd081955389561c6567896ea9f.json index f6b25e2a..951206a9 100644 --- a/.sqlx/query-8957cc00ca63bcc4d29c394a7a16f94965ee0d6bee3a4ef482d1f905f9e66b66.json +++ b/.sqlx/query-fd2a37dd917717a9bb5e1db84f03f0e84e32d2fd081955389561c6567896ea9f.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_namespace WHERE 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 unpublished_at IS NULL\n AND publish_name = $2\n ", "describe": { "columns": [ { @@ -19,5 +19,5 @@ false ] }, - "hash": "8957cc00ca63bcc4d29c394a7a16f94965ee0d6bee3a4ef482d1f905f9e66b66" + "hash": "fd2a37dd917717a9bb5e1db84f03f0e84e32d2fd081955389561c6567896ea9f" } diff --git a/libs/database/src/publish.rs b/libs/database/src/publish.rs index 4e0f4c13..a3252c25 100644 --- a/libs/database/src/publish.rs +++ b/libs/database/src/publish.rs @@ -301,6 +301,7 @@ pub async fn select_publish_collab_meta<'a, E: Executor<'a, Database = Postgres> SELECT metadata FROM af_published_collab WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1) + AND unpublished_at IS NULL AND publish_name = $2 "#, publish_namespace, @@ -313,7 +314,7 @@ pub async fn select_publish_collab_meta<'a, E: Executor<'a, Database = Postgres> } #[inline] -pub async fn delete_published_collabs<'a, E: Executor<'a, Database = Postgres>>( +pub async fn set_published_collabs_as_unpublished<'a, E: Executor<'a, Database = Postgres>>( executor: E, workspace_id: &Uuid, view_ids: &[Uuid], @@ -322,7 +323,7 @@ pub async fn delete_published_collabs<'a, E: Executor<'a, Database = Postgres>>( r#" UPDATE af_published_collab SET - blob = NULL, + blob = E''::bytea, unpublished_at = NOW() WHERE workspace_id = $1 AND view_id = ANY($2) @@ -454,7 +455,8 @@ pub async fn select_published_collab_blob<'a, E: Executor<'a, Database = Postgre SELECT blob FROM af_published_collab WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1) - AND publish_name = $2 + AND unpublished_at IS NULL + AND publish_name = $2 "#, publish_namespace, publish_name, diff --git a/libs/database/src/workspace.rs b/libs/database/src/workspace.rs index ca50c218..fb1bfd74 100644 --- a/libs/database/src/workspace.rs +++ b/libs/database/src/workspace.rs @@ -1489,7 +1489,8 @@ pub async fn select_view_id_from_publish_name( SELECT view_id FROM af_published_collab WHERE workspace_id = $1 - AND publish_name = $2 + AND unpublished_at IS NULL + AND publish_name = $2 "#, workspace_uuid, publish_name diff --git a/src/biz/workspace/publish.rs b/src/biz/workspace/publish.rs index 260e2fb5..e2c2d26f 100644 --- a/src/biz/workspace/publish.rs +++ b/src/biz/workspace/publish.rs @@ -27,11 +27,11 @@ use uuid::Uuid; use database::{ file::{s3_client_impl::AwsS3BucketClientImpl, BucketClient, ResponseBlob}, publish::{ - delete_published_collabs, insert_or_replace_publish_collabs, select_publish_collab_meta, - select_published_collab_blob, select_published_collab_info, - select_published_collab_workspace_view_id, select_published_data_for_view_id, - select_published_metadata_for_view_id, select_user_is_collab_publisher_for_all_views, - select_workspace_publish_namespace_exists, update_non_orginal_workspace_publish_namespace, + insert_or_replace_publish_collabs, select_publish_collab_meta, select_published_collab_blob, + select_published_collab_info, select_published_collab_workspace_view_id, + select_published_data_for_view_id, select_published_metadata_for_view_id, + select_user_is_collab_publisher_for_all_views, select_workspace_publish_namespace_exists, + set_published_collabs_as_unpublished, update_non_orginal_workspace_publish_namespace, }, workspace::select_user_is_workspace_owner, }; @@ -408,7 +408,7 @@ impl PublishedCollabStore for PublishedCollabPostgresStore { user_uuid: &Uuid, ) -> Result<(), AppError> { check_workspace_owner_or_publisher(&self.pg_pool, user_uuid, workspace_id, view_ids).await?; - delete_published_collabs(&self.pg_pool, workspace_id, view_ids).await?; + set_published_collabs_as_unpublished(&self.pg_pool, workspace_id, view_ids).await?; Ok(()) } @@ -598,7 +598,7 @@ impl PublishedCollabStore for PublishedCollabS3StoreWithPostgresFallback { .map(|view_id| get_collab_s3_key(workspace_id, view_id)) .collect::>(); self.bucket_client.delete_blobs(object_keys).await?; - delete_published_collabs(&self.pg_pool, workspace_id, view_ids).await?; + set_published_collabs_as_unpublished(&self.pg_pool, workspace_id, view_ids).await?; Ok(()) } diff --git a/tests/workspace/publish.rs b/tests/workspace/publish.rs index 8ce0a0e2..246ed557 100644 --- a/tests/workspace/publish.rs +++ b/tests/workspace/publish.rs @@ -423,16 +423,14 @@ async fn test_publish_doc() { let err = guest_client .get_published_collab::(&my_namespace, publish_name_1) .await - .err() - .unwrap(); + .unwrap_err(); assert_eq!(err.code, ErrorCode::RecordNotFound, "{:?}", err); let guest_client = localhost_client(); let err = guest_client .get_published_collab_blob(&my_namespace, publish_name_1) .await - .err() - .unwrap(); + .unwrap_err(); assert_eq!(err.code, ErrorCode::RecordNotFound, "{:?}", err); // default publish view should not be accessible