router.rs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. use crate::service::{
  2. doc::manager::DocBiz,
  3. user::LoggedUser,
  4. util::parse_from_payload,
  5. view::{create_view, delete_view, read_view, sql_builder::check_view_ids, update_view},
  6. };
  7. use actix_web::{
  8. web::{Data, Payload},
  9. HttpResponse,
  10. };
  11. use anyhow::Context;
  12. use backend_service::{
  13. errors::{invalid_params, ServerError},
  14. response::FlowyResponse,
  15. };
  16. use flowy_workspace_infra::{
  17. parser::view::{ViewDesc, ViewName, ViewThumbnail},
  18. protobuf::{CreateViewParams, QueryViewRequest, UpdateViewParams, ViewIdentifier},
  19. };
  20. use sqlx::PgPool;
  21. use std::sync::Arc;
  22. pub async fn create_handler(
  23. payload: Payload,
  24. pool: Data<PgPool>,
  25. _doc_biz: Data<Arc<DocBiz>>,
  26. ) -> Result<HttpResponse, ServerError> {
  27. let params: CreateViewParams = parse_from_payload(payload).await?;
  28. let mut transaction = pool
  29. .begin()
  30. .await
  31. .context("Failed to acquire a Postgres connection to create view")?;
  32. let view = create_view(&mut transaction, params).await?;
  33. transaction
  34. .commit()
  35. .await
  36. .context("Failed to commit SQL transaction to create view.")?;
  37. let resp = FlowyResponse::success().pb(view)?;
  38. Ok(resp.into())
  39. }
  40. pub async fn read_handler(payload: Payload, pool: Data<PgPool>, user: LoggedUser) -> Result<HttpResponse, ServerError> {
  41. let params: ViewIdentifier = parse_from_payload(payload).await?;
  42. let view_id = check_view_ids(vec![params.view_id])?.pop().unwrap();
  43. let mut transaction = pool
  44. .begin()
  45. .await
  46. .context("Failed to acquire a Postgres connection to read view")?;
  47. let view = read_view(&user, view_id, &mut transaction).await?;
  48. transaction
  49. .commit()
  50. .await
  51. .context("Failed to commit SQL transaction to read view.")?;
  52. Ok(FlowyResponse::success().pb(view)?.into())
  53. }
  54. pub async fn update_handler(payload: Payload, pool: Data<PgPool>) -> Result<HttpResponse, ServerError> {
  55. let params: UpdateViewParams = parse_from_payload(payload).await?;
  56. let view_id = check_view_ids(vec![params.view_id.clone()])?.pop().unwrap();
  57. let name = match params.has_name() {
  58. false => None,
  59. true => Some(ViewName::parse(params.get_name().to_owned()).map_err(invalid_params)?.0),
  60. };
  61. let desc = match params.has_desc() {
  62. false => None,
  63. true => Some(ViewDesc::parse(params.get_desc().to_owned()).map_err(invalid_params)?.0),
  64. };
  65. let thumbnail = match params.has_thumbnail() {
  66. false => None,
  67. true => Some(
  68. ViewThumbnail::parse(params.get_thumbnail().to_owned())
  69. .map_err(invalid_params)?
  70. .0,
  71. ),
  72. };
  73. let mut transaction = pool
  74. .begin()
  75. .await
  76. .context("Failed to acquire a Postgres connection to update app")?;
  77. let _ = update_view(&mut transaction, view_id, name, desc, thumbnail).await?;
  78. transaction
  79. .commit()
  80. .await
  81. .context("Failed to commit SQL transaction to update view.")?;
  82. Ok(FlowyResponse::success().into())
  83. }
  84. pub async fn delete_handler(payload: Payload, pool: Data<PgPool>) -> Result<HttpResponse, ServerError> {
  85. let params: QueryViewRequest = parse_from_payload(payload).await?;
  86. let view_ids = check_view_ids(params.view_ids.to_vec())?;
  87. let mut transaction = pool
  88. .begin()
  89. .await
  90. .context("Failed to acquire a Postgres connection to delete view")?;
  91. let _ = delete_view(&mut transaction, view_ids).await?;
  92. transaction
  93. .commit()
  94. .await
  95. .context("Failed to commit SQL transaction to delete view.")?;
  96. Ok(FlowyResponse::success().into())
  97. }