mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
delete multiple view in one request
This commit is contained in:
@ -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(), ¶ms.view_id).await?;
|
||||
let resp = delete_views(pool.get_ref(), params.view_ids.into_vec()).await?;
|
||||
Ok(resp.into())
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user