metis_core/application/
mod.rs1pub mod services;
2
3use crate::dal::Database;
4use crate::Result;
5use std::path::Path;
6
7pub struct Application {
10 database: Database,
11}
12
13impl Application {
14 pub fn new(database: Database) -> Self {
16 Self { database }
17 }
18
19 pub fn with_database<F, R>(&mut self, f: F) -> R
21 where
22 F: FnOnce(&mut services::DatabaseService) -> R,
23 {
24 let repository = self
25 .database
26 .repository()
27 .expect("Failed to get database repository");
28 let mut service = services::DatabaseService::new(repository);
29 f(&mut service)
30 }
31
32 pub fn with_sync<F, R>(&mut self, f: F) -> R
34 where
35 F: FnOnce(&mut services::SyncService) -> R,
36 {
37 let repository = self
38 .database
39 .repository()
40 .expect("Failed to get database repository");
41 let mut db_service = services::DatabaseService::new(repository);
42 let mut sync_service = services::SyncService::new(&mut db_service);
43 f(&mut sync_service)
44 }
45
46 pub async fn sync_directory<P: AsRef<Path>>(
48 self,
49 dir_path: P,
50 ) -> Result<Vec<services::synchronization::SyncResult>> {
51 let mut db_service = services::DatabaseService::new(self.database.into_repository());
52 let mut sync_service = services::SyncService::new(&mut db_service);
53 sync_service.sync_directory(dir_path).await
54 }
55
56 pub fn database(&mut self) -> &mut Database {
58 &mut self.database
59 }
60}