fix: fetch published collab sql

This commit is contained in:
Zack Fu Zi Xiang 2024-11-10 19:54:10 +08:00
parent 46435090c9
commit b62552f382
No known key found for this signature in database
8 changed files with 24 additions and 23 deletions

View File

@ -1,6 +1,6 @@
{ {
"db_name": "PostgreSQL", "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": { "describe": {
"columns": [ "columns": [
{ {
@ -19,5 +19,5 @@
false false
] ]
}, },
"hash": "30091f1518275d01227ece8988ea4d99aae2891322994ab462908c520b782411" "hash": "51a3a723b1825da7b9abd9cb36db0cf8220abf063098a73e4a6fc3f87352b395"
} }

View File

@ -1,6 +1,6 @@
{ {
"db_name": "PostgreSQL", "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": { "describe": {
"columns": [], "columns": [],
"parameters": { "parameters": {
@ -11,5 +11,5 @@
}, },
"nullable": [] "nullable": []
}, },
"hash": "9848af5453a70e7a3add208f8499698ca10d55da67436bb6c8e34c5818fd7a3a" "hash": "92c4d0e22b1f6f117c9f19589832f5f89cb5b903eee3c12f5e5fc0f70f3236e1"
} }

View File

@ -1,6 +1,6 @@
{ {
"db_name": "PostgreSQL", "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": { "describe": {
"columns": [ "columns": [
{ {
@ -19,5 +19,5 @@
false false
] ]
}, },
"hash": "2571550f7e2dd81103960741fecbf886f52f681c44344a814780b01fc06e4c8f" "hash": "cbe8402053d42529dce158b446d09a00982e1d7cdc33835776bfbefb4b4c1854"
} }

View File

@ -1,6 +1,6 @@
{ {
"db_name": "PostgreSQL", "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": { "describe": {
"columns": [ "columns": [
{ {
@ -19,5 +19,5 @@
false false
] ]
}, },
"hash": "8957cc00ca63bcc4d29c394a7a16f94965ee0d6bee3a4ef482d1f905f9e66b66" "hash": "fd2a37dd917717a9bb5e1db84f03f0e84e32d2fd081955389561c6567896ea9f"
} }

View File

@ -301,6 +301,7 @@ pub async fn select_publish_collab_meta<'a, E: Executor<'a, Database = Postgres>
SELECT metadata SELECT metadata
FROM af_published_collab FROM af_published_collab
WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1) WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1)
AND unpublished_at IS NULL
AND publish_name = $2 AND publish_name = $2
"#, "#,
publish_namespace, publish_namespace,
@ -313,7 +314,7 @@ pub async fn select_publish_collab_meta<'a, E: Executor<'a, Database = Postgres>
} }
#[inline] #[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, executor: E,
workspace_id: &Uuid, workspace_id: &Uuid,
view_ids: &[Uuid], view_ids: &[Uuid],
@ -322,7 +323,7 @@ pub async fn delete_published_collabs<'a, E: Executor<'a, Database = Postgres>>(
r#" r#"
UPDATE af_published_collab UPDATE af_published_collab
SET SET
blob = NULL, blob = E''::bytea,
unpublished_at = NOW() unpublished_at = NOW()
WHERE workspace_id = $1 WHERE workspace_id = $1
AND view_id = ANY($2) AND view_id = ANY($2)
@ -454,7 +455,8 @@ pub async fn select_published_collab_blob<'a, E: Executor<'a, Database = Postgre
SELECT blob SELECT blob
FROM af_published_collab FROM af_published_collab
WHERE workspace_id = (SELECT workspace_id FROM af_workspace_namespace WHERE namespace = $1) 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_namespace,
publish_name, publish_name,

View File

@ -1489,7 +1489,8 @@ pub async fn select_view_id_from_publish_name(
SELECT view_id SELECT view_id
FROM af_published_collab FROM af_published_collab
WHERE workspace_id = $1 WHERE workspace_id = $1
AND publish_name = $2 AND unpublished_at IS NULL
AND publish_name = $2
"#, "#,
workspace_uuid, workspace_uuid,
publish_name publish_name

View File

@ -27,11 +27,11 @@ use uuid::Uuid;
use database::{ use database::{
file::{s3_client_impl::AwsS3BucketClientImpl, BucketClient, ResponseBlob}, file::{s3_client_impl::AwsS3BucketClientImpl, BucketClient, ResponseBlob},
publish::{ publish::{
delete_published_collabs, insert_or_replace_publish_collabs, select_publish_collab_meta, insert_or_replace_publish_collabs, select_publish_collab_meta, select_published_collab_blob,
select_published_collab_blob, select_published_collab_info, select_published_collab_info, select_published_collab_workspace_view_id,
select_published_collab_workspace_view_id, select_published_data_for_view_id, select_published_data_for_view_id, select_published_metadata_for_view_id,
select_published_metadata_for_view_id, select_user_is_collab_publisher_for_all_views, select_user_is_collab_publisher_for_all_views, select_workspace_publish_namespace_exists,
select_workspace_publish_namespace_exists, update_non_orginal_workspace_publish_namespace, set_published_collabs_as_unpublished, update_non_orginal_workspace_publish_namespace,
}, },
workspace::select_user_is_workspace_owner, workspace::select_user_is_workspace_owner,
}; };
@ -408,7 +408,7 @@ impl PublishedCollabStore for PublishedCollabPostgresStore {
user_uuid: &Uuid, user_uuid: &Uuid,
) -> Result<(), AppError> { ) -> Result<(), AppError> {
check_workspace_owner_or_publisher(&self.pg_pool, user_uuid, workspace_id, view_ids).await?; 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(()) Ok(())
} }
@ -598,7 +598,7 @@ impl PublishedCollabStore for PublishedCollabS3StoreWithPostgresFallback {
.map(|view_id| get_collab_s3_key(workspace_id, view_id)) .map(|view_id| get_collab_s3_key(workspace_id, view_id))
.collect::<Vec<String>>(); .collect::<Vec<String>>();
self.bucket_client.delete_blobs(object_keys).await?; 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(()) Ok(())
} }

View File

@ -423,16 +423,14 @@ async fn test_publish_doc() {
let err = guest_client let err = guest_client
.get_published_collab::<MyCustomMetadata>(&my_namespace, publish_name_1) .get_published_collab::<MyCustomMetadata>(&my_namespace, publish_name_1)
.await .await
.err() .unwrap_err();
.unwrap();
assert_eq!(err.code, ErrorCode::RecordNotFound, "{:?}", err); assert_eq!(err.code, ErrorCode::RecordNotFound, "{:?}", err);
let guest_client = localhost_client(); let guest_client = localhost_client();
let err = guest_client let err = guest_client
.get_published_collab_blob(&my_namespace, publish_name_1) .get_published_collab_blob(&my_namespace, publish_name_1)
.await .await
.err() .unwrap_err();
.unwrap();
assert_eq!(err.code, ErrorCode::RecordNotFound, "{:?}", err); assert_eq!(err.code, ErrorCode::RecordNotFound, "{:?}", err);
// default publish view should not be accessible // default publish view should not be accessible