doc_controller.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use crate::{
  2. entities::doc::{CreateDocParams, DocInfo, UpdateDocParams},
  3. errors::EditorError,
  4. module::EditorDatabase,
  5. sql_tables::doc::{DocTable, DocTableChangeset, DocTableSql},
  6. };
  7. use std::sync::Arc;
  8. pub struct DocController {
  9. sql: Arc<DocTableSql>,
  10. }
  11. impl DocController {
  12. pub(crate) fn new(database: Arc<dyn EditorDatabase>) -> Self {
  13. let sql = Arc::new(DocTableSql { database });
  14. Self { sql }
  15. }
  16. pub(crate) async fn create_doc(
  17. &self,
  18. params: CreateDocParams,
  19. path: &str,
  20. ) -> Result<DocInfo, EditorError> {
  21. let doc_table = DocTable::new(params, path);
  22. let doc: DocInfo = doc_table.clone().into();
  23. let _ = self.sql.create_doc_table(doc_table)?;
  24. Ok(doc)
  25. }
  26. pub(crate) async fn update_doc(&self, params: UpdateDocParams) -> Result<(), EditorError> {
  27. let changeset = DocTableChangeset::new(params);
  28. let _ = self.sql.update_doc_table(changeset)?;
  29. Ok(())
  30. }
  31. pub(crate) async fn read_doc(&self, doc_id: &str) -> Result<DocInfo, EditorError> {
  32. let doc_table = self.sql.read_doc_table(doc_id)?;
  33. let doc_desc: DocInfo = doc_table.into();
  34. Ok(doc_desc)
  35. }
  36. }