router.rs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. use crate::{
  2. entities::logged_user::LoggedUser,
  3. services::core::app::{
  4. controller::{create_app, delete_app, read_app, update_app},
  5. persistence::check_app_id,
  6. },
  7. util::serde_ext::parse_from_payload,
  8. };
  9. use actix_web::{
  10. web::{Data, Payload},
  11. HttpResponse,
  12. };
  13. use anyhow::Context;
  14. use backend_service::{
  15. errors::{invalid_params, ServerError},
  16. response::FlowyResponse,
  17. };
  18. use flowy_core_data_model::{
  19. parser::app::{AppDesc, AppName},
  20. protobuf::{AppId as AppIdPB, CreateAppParams as CreateAppParamsPB, UpdateAppParams as UpdateAppParamsPB},
  21. };
  22. use protobuf::Message;
  23. use sqlx::PgPool;
  24. pub async fn create_handler(
  25. payload: Payload,
  26. pool: Data<PgPool>,
  27. logged_user: LoggedUser,
  28. ) -> Result<HttpResponse, ServerError> {
  29. let params: CreateAppParamsPB = parse_from_payload(payload).await?;
  30. let mut transaction = pool
  31. .begin()
  32. .await
  33. .context("Failed to acquire a Postgres connection to create app")?;
  34. let app = create_app(&mut transaction, params, logged_user).await?;
  35. transaction
  36. .commit()
  37. .await
  38. .context("Failed to commit SQL transaction to create app.")?;
  39. Ok(FlowyResponse::success().pb(app)?.into())
  40. }
  41. pub async fn read_handler(payload: Payload, pool: Data<PgPool>, user: LoggedUser) -> Result<HttpResponse, ServerError> {
  42. let params: AppIdPB = parse_from_payload(payload).await?;
  43. let app_id = check_app_id(params.app_id)?;
  44. let mut transaction = pool
  45. .begin()
  46. .await
  47. .context("Failed to acquire a Postgres connection to read app")?;
  48. let app = read_app(&mut transaction, app_id, &user).await?;
  49. transaction
  50. .commit()
  51. .await
  52. .context("Failed to commit SQL transaction to read app.")?;
  53. Ok(FlowyResponse::success().pb(app)?.into())
  54. }
  55. pub async fn update_handler(payload: Payload, pool: Data<PgPool>) -> Result<HttpResponse, ServerError> {
  56. let params: UpdateAppParamsPB = parse_from_payload(payload).await?;
  57. let app_id = check_app_id(params.get_app_id().to_string())?;
  58. let name = match params.has_name() {
  59. false => None,
  60. true => Some(AppName::parse(params.get_name().to_owned()).map_err(invalid_params)?.0),
  61. };
  62. let color_style = match params.has_color_style() {
  63. false => None,
  64. true => {
  65. let color_bytes = params.get_color_style().write_to_bytes()?;
  66. Some(color_bytes)
  67. }
  68. };
  69. let desc = match params.has_desc() {
  70. false => None,
  71. true => Some(AppDesc::parse(params.get_desc().to_owned()).map_err(invalid_params)?.0),
  72. };
  73. let mut transaction = pool
  74. .begin()
  75. .await
  76. .context("Failed to acquire a Postgres connection to update app")?;
  77. let _ = update_app(&mut transaction, app_id, name, desc, color_style).await?;
  78. transaction
  79. .commit()
  80. .await
  81. .context("Failed to commit SQL transaction to update app.")?;
  82. Ok(FlowyResponse::success().into())
  83. }
  84. pub async fn delete_handler(payload: Payload, pool: Data<PgPool>) -> Result<HttpResponse, ServerError> {
  85. let params: AppIdPB = parse_from_payload(payload).await?;
  86. let app_id = check_app_id(params.app_id.to_owned())?;
  87. let mut transaction = pool
  88. .begin()
  89. .await
  90. .context("Failed to acquire a Postgres connection to delete app")?;
  91. let _ = delete_app(&mut transaction, app_id).await?;
  92. transaction
  93. .commit()
  94. .await
  95. .context("Failed to commit SQL transaction to delete app.")?;
  96. Ok(FlowyResponse::success().into())
  97. }