doc_sql.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. use crate::{
  2. errors::DocError,
  3. module::DocumentDatabase,
  4. sql_tables::doc::{DocTable, DocTableChangeset},
  5. };
  6. use flowy_database::{
  7. prelude::*,
  8. schema::{doc_table, doc_table::dsl},
  9. };
  10. use std::sync::Arc;
  11. pub struct DocTableSql {
  12. pub database: Arc<dyn DocumentDatabase>,
  13. }
  14. impl DocTableSql {
  15. pub(crate) fn create_doc_table(&self, doc_table: DocTable) -> Result<(), DocError> {
  16. let conn = self.database.db_connection()?;
  17. let _ = diesel::insert_into(doc_table::table).values(doc_table).execute(&*conn)?;
  18. Ok(())
  19. }
  20. pub(crate) fn update_doc_table(&self, changeset: DocTableChangeset) -> Result<(), DocError> {
  21. let conn = self.database.db_connection()?;
  22. diesel_update_table!(doc_table, changeset, &*conn);
  23. Ok(())
  24. }
  25. pub(crate) fn read_doc_table(&self, doc_id: &str) -> Result<DocTable, DocError> {
  26. let doc_table = dsl::doc_table
  27. .filter(doc_table::id.eq(doc_id))
  28. .first::<DocTable>(&*(self.database.db_connection()?))?;
  29. Ok(doc_table)
  30. }
  31. #[allow(dead_code)]
  32. pub(crate) fn delete_doc(&self, _view_id: &str) -> Result<(), DocError> { unimplemented!() }
  33. }