router.rs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. use crate::services::{
  2. doc::{create_doc, read_doc, update_doc},
  3. util::parse_from_payload,
  4. };
  5. use actix_web::{
  6. web::{Data, Payload},
  7. HttpResponse,
  8. };
  9. use anyhow::Context;
  10. use backend_service::{errors::ServerError, response::FlowyResponse};
  11. use flowy_collaboration::protobuf::{CreateDocParams, DocIdentifier, UpdateDocParams};
  12. use sqlx::PgPool;
  13. pub async fn create_handler(payload: Payload, pool: Data<PgPool>) -> Result<HttpResponse, ServerError> {
  14. let params: CreateDocParams = parse_from_payload(payload).await?;
  15. let mut transaction = pool
  16. .begin()
  17. .await
  18. .context("Failed to acquire a Postgres connection to create doc")?;
  19. let _ = create_doc(&mut transaction, params).await?;
  20. transaction
  21. .commit()
  22. .await
  23. .context("Failed to commit SQL transaction to create doc.")?;
  24. Ok(FlowyResponse::success().into())
  25. }
  26. #[tracing::instrument(level = "debug", skip(payload, pool), err)]
  27. pub async fn read_handler(payload: Payload, pool: Data<PgPool>) -> Result<HttpResponse, ServerError> {
  28. let params: DocIdentifier = parse_from_payload(payload).await?;
  29. let doc = read_doc(pool.get_ref(), params).await?;
  30. let response = FlowyResponse::success().pb(doc)?;
  31. Ok(response.into())
  32. }
  33. pub async fn update_handler(payload: Payload, pool: Data<PgPool>) -> Result<HttpResponse, ServerError> {
  34. let params: UpdateDocParams = parse_from_payload(payload).await?;
  35. let _ = update_doc(pool.get_ref(), params).await?;
  36. Ok(FlowyResponse::success().into())
  37. }