From b7fb9515903cdca51f8632f1fb07a000d1bbd317 Mon Sep 17 00:00:00 2001 From: Alexey Velikiy Date: Thu, 6 Jan 2022 16:37:28 +0300 Subject: [PATCH] data_service --- server/src/main.rs | 7 +++--- server/src/services/analytic_unit_service.rs | 15 ++++++------- server/src/services/data_service.rs | 23 ++++++++++++++++++++ server/src/services/mod.rs | 1 + server/src/services/segments_service.rs | 16 +++++++++----- 5 files changed, 45 insertions(+), 17 deletions(-) create mode 100644 server/src/services/data_service.rs diff --git a/server/src/main.rs b/server/src/main.rs index a9ed0cd..adc525f 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,6 +1,6 @@ mod api; -use hastic::services::{analytic_service, analytic_unit_service, metric_service, segments_service}; +use hastic::services::{analytic_service, analytic_unit_service, metric_service, segments_service, data_service}; use anyhow; @@ -9,9 +9,10 @@ async fn main() -> anyhow::Result<()> { let config = hastic::config::Config::new()?; let cfg_clone = config.clone(); - let analytic_unit_service = analytic_unit_service::AnalyticUnitService::new()?; + let data_service = data_service::DataService::new()?; + let analytic_unit_service = analytic_unit_service::AnalyticUnitService::new(&data_service)?; let metric_service = metric_service::MetricService::new(&config.datasource_config); - let segments_service = segments_service::SegmentsService::new()?; + let segments_service = segments_service::SegmentsService::new(&data_service)?; let mut analytic_service = analytic_service::AnalyticService::new( analytic_unit_service.clone(), diff --git a/server/src/services/analytic_unit_service.rs b/server/src/services/analytic_unit_service.rs index cdcd84b..ef41a11 100644 --- a/server/src/services/analytic_unit_service.rs +++ b/server/src/services/analytic_unit_service.rs @@ -1,5 +1,3 @@ -use serde::{Deserialize, Serialize}; -use serde_json::{Result, Value}; use std::sync::{Arc, Mutex}; use rusqlite::{params, Connection}; @@ -11,19 +9,20 @@ use super::analytic_service::analytic_unit::{ types::{self, AnalyticUnitConfig}, }; +use super::data_service::DataService; + #[derive(Clone)] pub struct AnalyticUnitService { connection: Arc>, } +// TODO: get DataService impl AnalyticUnitService { - pub fn new() -> anyhow::Result { - // TODO: remove repetitoin with segment_service - std::fs::create_dir_all("./data").unwrap(); - let conn = Connection::open("./data/analytic_units.db")?; + pub fn new(ds: &DataService) -> anyhow::Result { + let conn = ds.analytic_units_connection.clone(); // TODO: add learning results field - conn.execute( + conn.lock().unwrap().execute( "CREATE TABLE IF NOT EXISTS analytic_unit ( id TEXT PRIMARY KEY, last_detection INTEGER, @@ -35,7 +34,7 @@ impl AnalyticUnitService { )?; Ok(AnalyticUnitService { - connection: Arc::new(Mutex::new(conn)), + connection: conn }) } diff --git a/server/src/services/data_service.rs b/server/src/services/data_service.rs new file mode 100644 index 0000000..3fdc281 --- /dev/null +++ b/server/src/services/data_service.rs @@ -0,0 +1,23 @@ +use std::sync::{Arc, Mutex}; + +use rusqlite::{Connection}; + + +pub struct DataService { + pub analytic_units_connection: Arc>, + pub segments_connection: Arc> +} + +impl DataService { + pub fn new() -> anyhow::Result { + std::fs::create_dir_all("./data").unwrap(); + + let analytic_units_connection = Connection::open("./data/analytic_units.db")?; + let segments_connection = Connection::open("./data/segments.db")?; + + Ok(DataService { + analytic_units_connection: Arc::new(Mutex::new(analytic_units_connection)), + segments_connection: Arc::new(Mutex::new(segments_connection)) + }) + } +} \ No newline at end of file diff --git a/server/src/services/mod.rs b/server/src/services/mod.rs index 2f122bf..1ead71a 100644 --- a/server/src/services/mod.rs +++ b/server/src/services/mod.rs @@ -1,4 +1,5 @@ pub mod analytic_service; +pub mod data_service; pub mod analytic_unit_service; pub mod metric_service; pub mod segments_service; diff --git a/server/src/services/segments_service.rs b/server/src/services/segments_service.rs index 9b2b711..ae2dc60 100644 --- a/server/src/services/segments_service.rs +++ b/server/src/services/segments_service.rs @@ -6,9 +6,13 @@ use serde::{Deserialize, Serialize}; use std::sync::{Arc, Mutex}; +use super::data_service::DataService; + pub const ID_LENGTH: usize = 20; pub type SegmentId = String; + + // TODO: make logic with this enum shorter #[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)] pub enum SegmentType { @@ -58,19 +62,19 @@ impl Segment { } } + +// TODO: get DataService #[derive(Clone)] pub struct SegmentsService { connection: Arc>, } impl SegmentsService { - pub fn new() -> anyhow::Result { - // TODO: move it to data service - std::fs::create_dir_all("./data").unwrap(); + pub fn new(ds: &DataService) -> anyhow::Result { // TODO: add unilytic_unit id as a new field - let conn = Connection::open("./data/segments.db")?; - conn.execute( + let conn = ds.segments_connection.clone(); + conn.lock().unwrap().execute( "CREATE TABLE IF NOT EXISTS segment ( id TEXT PRIMARY KEY, start INTEGER NOT NULL, @@ -81,7 +85,7 @@ impl SegmentsService { )?; Ok(SegmentsService { - connection: Arc::new(Mutex::new(conn)), + connection: conn }) }