feat: add impl for get collab info
This commit is contained in:
parent
18e9d0abae
commit
09828c5eea
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT\n (SELECT publish_namespace FROM af_workspace aw WHERE aw.workspace_id = apc.workspace_id) AS namespace,\n doc_name,\n view_id\n FROM af_published_collab apc\n WHERE view_id = $1\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"ordinal": 0,
|
||||
"name": "namespace",
|
||||
"type_info": "Text"
|
||||
},
|
||||
{
|
||||
"ordinal": 1,
|
||||
"name": "doc_name",
|
||||
"type_info": "Text"
|
||||
},
|
||||
{
|
||||
"ordinal": 2,
|
||||
"name": "view_id",
|
||||
"type_info": "Uuid"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Uuid"
|
||||
]
|
||||
},
|
||||
"nullable": [
|
||||
null,
|
||||
false,
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "1b3c3fee0db2369b3626b34c241c995e623bf280a1b31ea1b935c69937e7d799"
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n INSERT INTO af_published_collab (doc_name, published_by, workspace_id, metadata)\n VALUES ($1, (SELECT uid FROM af_user WHERE uuid = $2), $3, $4)\n ON CONFLICT (workspace_id, doc_name) DO UPDATE\n SET metadata = $4\n ",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Text",
|
||||
"Uuid",
|
||||
"Uuid",
|
||||
"Jsonb"
|
||||
]
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "4de4b2afb405bcd89ee015c79775b94fdbec9caa964819ed3de593e39c0db337"
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n INSERT INTO af_published_collab (workspace_id, view_id, doc_name, published_by, metadata)\n VALUES ($1, $2, $3, (SELECT uid FROM af_user WHERE uuid = $4), $5)\n ON CONFLICT (workspace_id, view_id) DO UPDATE\n SET metadata = $5\n ",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Uuid",
|
||||
"Uuid",
|
||||
"Text",
|
||||
"Uuid",
|
||||
"Jsonb"
|
||||
]
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "b60f92862ea3d80ae01a66c981768be142a55007438c053dd8ef2cb239c90088"
|
||||
}
|
||||
|
|
@ -1,16 +1,16 @@
|
|||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n UPDATE af_published_collab\n SET blob = $1\n WHERE workspace_id = $2 AND doc_name = $3\n ",
|
||||
"query": "\n UPDATE af_published_collab\n SET blob = $1\n WHERE workspace_id = $2\n AND view_id = $3\n ",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Bytea",
|
||||
"Uuid",
|
||||
"Text"
|
||||
"Uuid"
|
||||
]
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "ed57079337ff4aa8ed85bdf3ff73bf7c7cc07112f59fa8aabee9c3290bcdc158"
|
||||
"hash": "c51b2030045bd58b1b3ac2ed12c24fedd32b19b456f2a865860cad597903fa5b"
|
||||
}
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n DELETE FROM af_published_collab\n WHERE workspace_id = $1 AND doc_name = $2\n ",
|
||||
"query": "\n DELETE FROM af_published_collab\n WHERE workspace_id = $1 AND view_id = $2\n ",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Uuid",
|
||||
"Text"
|
||||
"Uuid"
|
||||
]
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "4682b9460fe6087fe6c41cf55c6f4002f6a4344d5c2d4aad30c37134251e4007"
|
||||
"hash": "cb7c6555f1c837748cf0c7706000b28026c3dcdb7305f8c3a49082e1067f1fd8"
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "\n SELECT EXISTS(\n SELECT 1\n FROM af_published_collab\n WHERE workspace_id = $1\n AND doc_name = $2\n AND published_by = (SELECT uid FROM af_user WHERE uuid = $3)\n );\n ",
|
||||
"query": "\n SELECT EXISTS(\n SELECT 1\n FROM af_published_collab\n WHERE workspace_id = $1\n AND view_id = $2\n AND published_by = (SELECT uid FROM af_user WHERE uuid = $3)\n );\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
"parameters": {
|
||||
"Left": [
|
||||
"Uuid",
|
||||
"Text",
|
||||
"Uuid",
|
||||
"Uuid"
|
||||
]
|
||||
},
|
||||
|
|
@ -20,5 +20,5 @@
|
|||
null
|
||||
]
|
||||
},
|
||||
"hash": "aa6d8779c9c4a29b80fc1bd212869af207e9865852869adcdb5bef18f05d145d"
|
||||
"hash": "dd6ff315461ec898e43bc4624b51b10ef73fd1f87f94ce4f2e9f32136a1b4f67"
|
||||
}
|
||||
|
|
@ -1,10 +1,7 @@
|
|||
use bytes::Bytes;
|
||||
use database_entity::dto::UpdatePublishNamespace;
|
||||
use database_entity::dto::{PublishInfo, UpdatePublishNamespace};
|
||||
use reqwest::{Body, Method};
|
||||
use shared_entity::{
|
||||
dto::workspace_dto::PublishInfo,
|
||||
response::{AppResponse, AppResponseError},
|
||||
};
|
||||
use shared_entity::response::{AppResponse, AppResponseError};
|
||||
|
||||
use crate::Client;
|
||||
|
||||
|
|
@ -117,11 +114,11 @@ impl Client {
|
|||
|
||||
// Guest API (no login required)
|
||||
impl Client {
|
||||
pub async fn get_published_info(
|
||||
pub async fn get_published_collab_info(
|
||||
&self,
|
||||
view_id: &uuid::Uuid,
|
||||
) -> Result<PublishInfo, AppResponseError> {
|
||||
let url = format!("{}/api/workspace/published_info/{}", self.base_url, view_id,);
|
||||
let url = format!("{}/api/workspace/published-info/{}", self.base_url, view_id,);
|
||||
|
||||
let resp = self.cloud_client.get(&url).send().await?;
|
||||
AppResponse::<PublishInfo>::from_response(resp)
|
||||
|
|
|
|||
|
|
@ -306,6 +306,13 @@ pub struct AFCollabMember {
|
|||
pub permission: AFPermission,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct PublishInfo {
|
||||
pub namespace: Option<String>,
|
||||
pub doc_name: String,
|
||||
pub view_id: Uuid,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone, Hash)]
|
||||
#[repr(i32)]
|
||||
pub enum AFRole {
|
||||
|
|
|
|||
|
|
@ -206,6 +206,7 @@ pub struct AFChatRow {
|
|||
pub workspace_id: Uuid,
|
||||
pub meta_data: serde_json::Value,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, FromRow, Serialize, Deserialize)]
|
||||
pub struct AFChatMessageRow {
|
||||
pub message_id: i64,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use database_entity::dto::{
|
||||
AFRole, AFWorkspaceInvitation, AFWorkspaceInvitationStatus, AFWorkspaceSettings,
|
||||
AFRole, AFWorkspaceInvitation, AFWorkspaceInvitationStatus, AFWorkspaceSettings, PublishInfo,
|
||||
};
|
||||
use futures_util::stream::BoxStream;
|
||||
use sqlx::{types::uuid, Executor, PgPool, Postgres, Transaction};
|
||||
|
|
@ -1024,3 +1024,25 @@ pub async fn select_published_collab_blob<'a, E: Executor<'a, Database = Postgre
|
|||
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
pub async fn select_published_collab_info<'a, E: Executor<'a, Database = Postgres>>(
|
||||
executor: E,
|
||||
view_id: &Uuid,
|
||||
) -> Result<PublishInfo, AppError> {
|
||||
let res = sqlx::query_as!(
|
||||
PublishInfo,
|
||||
r#"
|
||||
SELECT
|
||||
(SELECT publish_namespace FROM af_workspace aw WHERE aw.workspace_id = apc.workspace_id) AS namespace,
|
||||
doc_name,
|
||||
view_id
|
||||
FROM af_published_collab apc
|
||||
WHERE view_id = $1
|
||||
"#,
|
||||
view_id,
|
||||
)
|
||||
.fetch_one(executor)
|
||||
.await?;
|
||||
|
||||
Ok(res)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,10 +120,3 @@ pub struct CollabResponse {
|
|||
#[serde(default)]
|
||||
pub object_id: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, serde::Deserialize)]
|
||||
pub struct PublishInfo {
|
||||
pub namespace: String,
|
||||
pub doc_name: String,
|
||||
pub view_id: uuid::Uuid,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,6 +132,10 @@ pub fn workspace_scope() -> Scope {
|
|||
web::resource("/published/{publish_namespace}/{doc_name}/blob")
|
||||
.route(web::get().to(get_published_collab_blob_handler))
|
||||
)
|
||||
.service(
|
||||
web::resource("/published-info/{view_id}")
|
||||
.route(web::get().to(get_published_collab_info_handler))
|
||||
)
|
||||
.service(
|
||||
web::resource("/{workspace_id}/publish-namespace")
|
||||
.route(web::put().to(put_publish_namespace_handler))
|
||||
|
|
@ -988,6 +992,16 @@ async fn get_published_collab_blob_handler(
|
|||
Ok(collab_data)
|
||||
}
|
||||
|
||||
async fn get_published_collab_info_handler(
|
||||
view_id: web::Path<Uuid>,
|
||||
state: Data<AppState>,
|
||||
) -> Result<Json<AppResponse<PublishInfo>>> {
|
||||
let view_id = view_id.into_inner();
|
||||
let collab_data =
|
||||
biz::workspace::ops::get_published_collab_info(&state.pg_pool, &view_id).await?;
|
||||
Ok(Json(AppResponse::Ok().with_data(collab_data)))
|
||||
}
|
||||
|
||||
async fn put_publish_collab_handler(
|
||||
path_param: web::Path<(Uuid, Uuid, String)>,
|
||||
user_uuid: UserUuid,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
use database_entity::dto::PublishInfo;
|
||||
use std::ops::DerefMut;
|
||||
use std::sync::Arc;
|
||||
|
||||
|
|
@ -21,9 +23,9 @@ use database::workspace::{
|
|||
get_invitation_by_id, insert_or_replace_publish_collab_meta,
|
||||
insert_or_replace_published_collab_blob, insert_user_workspace, insert_workspace_invitation,
|
||||
rename_workspace, select_all_user_workspaces, select_publish_collab_meta,
|
||||
select_published_collab_blob, select_user_is_collab_publisher, select_user_is_workspace_owner,
|
||||
select_workspace, select_workspace_invitations_for_user, select_workspace_member,
|
||||
select_workspace_member_list, select_workspace_publish_namespace,
|
||||
select_published_collab_blob, select_published_collab_info, select_user_is_collab_publisher,
|
||||
select_user_is_workspace_owner, select_workspace, select_workspace_invitations_for_user,
|
||||
select_workspace_member, select_workspace_member_list, select_workspace_publish_namespace,
|
||||
select_workspace_publish_namespace_exists, select_workspace_settings,
|
||||
select_workspace_total_collab_bytes, update_updated_at_of_workspace,
|
||||
update_workspace_invitation_set_status_accepted, update_workspace_publish_namespace,
|
||||
|
|
@ -201,6 +203,13 @@ pub async fn get_published_collab_blob(
|
|||
select_published_collab_blob(pg_pool, publish_namespace, doc_name).await
|
||||
}
|
||||
|
||||
pub async fn get_published_collab_info(
|
||||
pg_pool: &PgPool,
|
||||
view_id: &Uuid,
|
||||
) -> Result<PublishInfo, AppError> {
|
||||
select_published_collab_info(pg_pool, view_id).await
|
||||
}
|
||||
|
||||
pub async fn delete_published_workspace_collab(
|
||||
pg_pool: &PgPool,
|
||||
workspace_id: &Uuid,
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ async fn test_publish_doc() {
|
|||
.unwrap();
|
||||
|
||||
{
|
||||
// Non login user should be able to view the published collab metadata
|
||||
// Non login user should be able to view the published collab
|
||||
let guest_client = localhost_client();
|
||||
let published_collab = guest_client
|
||||
.get_published_collab::<Metadata>(&my_namespace, my_doc_name)
|
||||
|
|
@ -94,6 +94,14 @@ async fn test_publish_doc() {
|
|||
.unwrap();
|
||||
assert_eq!(published_collab.title, "my_title");
|
||||
|
||||
let publish_info = guest_client
|
||||
.get_published_collab_info(&view_id)
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(publish_info.namespace, Some(my_namespace.clone()));
|
||||
assert_eq!(publish_info.doc_name, my_doc_name);
|
||||
assert_eq!(publish_info.view_id, view_id);
|
||||
|
||||
let collab_data = guest_client
|
||||
.get_published_collab_blob(&my_namespace, my_doc_name)
|
||||
.await
|
||||
|
|
|
|||
Loading…
Reference in New Issue