delete multiple view in one request

This commit is contained in:
appflowy
2021-10-15 13:42:52 +08:00
parent bcaa942dfc
commit dfd6046214
17 changed files with 138 additions and 143 deletions

View File

@ -10,7 +10,7 @@ use flowy_workspace::protobuf::{CreateViewParams, DeleteViewParams, QueryViewPar
use crate::service::{
doc::doc::DocBiz,
util::parse_from_payload,
view::{create_view, delete_view, read_view, update_view},
view::{create_view, delete_views, read_view, update_view},
};
use std::sync::Arc;
@ -42,6 +42,6 @@ pub async fn update_handler(payload: Payload, pool: Data<PgPool>) -> Result<Http
pub async fn delete_handler(payload: Payload, pool: Data<PgPool>) -> Result<HttpResponse, ServerError> {
let params: DeleteViewParams = parse_from_payload(payload).await?;
let resp = delete_view(pool.get_ref(), &params.view_id).await?;
let resp = delete_views(pool.get_ref(), params.view_ids.into_vec()).await?;
Ok(resp.into())
}

View File

@ -74,8 +74,12 @@ impl NewViewSqlBuilder {
}
}
pub(crate) fn check_view_id(id: String) -> Result<Uuid, ServerError> {
let view_id = ViewId::parse(id).map_err(invalid_params)?;
let view_id = Uuid::parse_str(view_id.as_ref())?;
Ok(view_id)
pub(crate) fn check_view_ids(ids: Vec<String>) -> Result<Vec<Uuid>, ServerError> {
let mut view_ids = vec![];
for id in ids {
let view_id = ViewId::parse(id).map_err(invalid_params)?;
let view_id = Uuid::parse_str(view_id.as_ref())?;
view_ids.push(view_id);
}
Ok(view_ids)
}

View File

@ -74,7 +74,7 @@ pub(crate) async fn read_view(
params: QueryViewParams,
_doc_biz: Data<Arc<DocBiz>>,
) -> Result<FlowyResponse, ServerError> {
let view_id = check_view_id(params.view_id)?;
let view_id = check_view_ids(vec![params.view_id])?.pop().unwrap();
let mut transaction = pool
.begin()
.await
@ -111,7 +111,7 @@ pub(crate) async fn read_view(
}
pub(crate) async fn update_view(pool: &PgPool, params: UpdateViewParams) -> Result<FlowyResponse, ServerError> {
let view_id = check_view_id(params.view_id.clone())?;
let view_id = check_view_ids(vec![params.view_id.clone()])?.pop().unwrap();
let name = match params.has_name() {
false => None,
@ -159,21 +159,22 @@ pub(crate) async fn update_view(pool: &PgPool, params: UpdateViewParams) -> Resu
Ok(FlowyResponse::success())
}
pub(crate) async fn delete_view(pool: &PgPool, view_id: &str) -> Result<FlowyResponse, ServerError> {
let view_id = check_view_id(view_id.to_owned())?;
pub(crate) async fn delete_views(pool: &PgPool, view_ids: Vec<String>) -> Result<FlowyResponse, ServerError> {
let view_ids = check_view_ids(view_ids)?;
let mut transaction = pool
.begin()
.await
.context("Failed to acquire a Postgres connection to delete view")?;
let (sql, args) = SqlBuilder::delete(VIEW_TABLE).and_where_eq("id", &view_id).build()?;
for view_id in view_ids {
let (sql, args) = SqlBuilder::delete(VIEW_TABLE).and_where_eq("id", &view_id).build()?;
let _ = sqlx::query_with(&sql, args)
.execute(&mut transaction)
.await
.map_err(map_sqlx_error)?;
let _ = sqlx::query_with(&sql, args)
.execute(&mut transaction)
.await
.map_err(map_sqlx_error)?;
let _ = delete_doc(&mut transaction, view_id).await?;
let _ = delete_doc(&mut transaction, view_id).await?;
}
transaction
.commit()

View File

@ -18,7 +18,7 @@ async fn doc_read() {
async fn doc_delete() {
let test = ViewTest::new().await;
let delete_params = DeleteViewParams {
view_id: test.view.id.clone(),
view_ids: vec![test.view.id.clone()],
};
test.server.delete_view(delete_params).await;

View File

@ -157,7 +157,7 @@ async fn view_delete() {
let test = ViewTest::new().await;
// delete
let delete_params = DeleteViewParams {
view_id: test.view.id.clone(),
view_ids: vec![test.view.id.clone()],
};
test.server.delete_view(delete_params).await;