diff --git a/client/src/components/hastic_pod/index.ts b/client/src/components/hastic_pod/index.ts index 62eaac3..ab0dd5d 100644 --- a/client/src/components/hastic_pod/index.ts +++ b/client/src/components/hastic_pod/index.ts @@ -3,7 +3,7 @@ import { AxisRange } from "@chartwerk/core/dist/types"; import { BrushOrientation } from "@chartwerk/core"; import { SegmentsSet } from "@/types/segment_set"; import { ANALYTIC_UNIT_COLORS } from "@/types/colors" -import { Segment, SegmentId } from "@/types/segment"; +import { Segment, SegmentId, SegmentType } from "@/types/segment"; export type TimeRange = { from: number, to: number }; export type UpdateDataCallback = (range: TimeRange) => Promise<{ @@ -50,8 +50,6 @@ export class HasticPod extends LinePod { } }); - console.log( BrushOrientation.VERTICAL); - this._csc = csc; this._dsc = dsc; this._ctrlKeyIsDown = false; @@ -222,6 +220,10 @@ export class HasticPod extends LinePod { .attr('fill', ANALYTIC_UNIT_COLORS[0]) .attr('opacity', '0.8') .attr('pointer-events', 'none') + + if(segment.segmentType == SegmentType.LABEL) { + r.attr('style', 'stroke:rgb(0,0,0); stroke-width:2') + } } private async _updateRange(range: AxisRange[]) { diff --git a/client/src/services/segments.service.ts b/client/src/services/segments.service.ts index c011f79..b29015e 100644 --- a/client/src/services/segments.service.ts +++ b/client/src/services/segments.service.ts @@ -18,10 +18,10 @@ export async function getSegments(from: number, to: number): Promise const uriAnalytics = ANALYTICS_API_URL + `?from=${from}&to=${to}`; const resAnalytics = await axios.get(uriAnalytics); - const result = res["data"] as Segment[]; - const resultAnalytics = resAnalytics["data"] as Segment[]; + const result = res["data"] as any[]; + const resultAnalytics = resAnalytics["data"] as any[]; - return result.concat(resultAnalytics); + return result.concat(resultAnalytics).map(Segment.fromObject); } export async function postSegment(segment: Segment): Promise { diff --git a/client/src/types/segment.ts b/client/src/types/segment.ts index 37e4ea0..eaddac1 100644 --- a/client/src/types/segment.ts +++ b/client/src/types/segment.ts @@ -1,7 +1,12 @@ export type SegmentId = string; +export enum SegmentType { + LABEL = 'Label', + DETECTION = 'Detection' +} + export class Segment { - constructor(private _id: SegmentId | undefined, public from: number, public to: number, segmentType = 1) { + constructor(private _id: SegmentId | undefined, public from: number, public to: number, segmentType = SegmentType.LABEL) { if(this._id === undefined) { throw new Error('id is undefined'); } @@ -36,17 +41,26 @@ export class Segment { } // TODO: remove this and make original inheritence - _segmentType: number - get segmentType(): number { return this._segmentType; } - set segmentType(value) { this._segmentType = value; } + _segmentType: SegmentType + get segmentType(): SegmentType { return this._segmentType; } + set segmentType(value: SegmentType) { this._segmentType = value; } toObject() { return { id: this.id, from: this.from, to: this.to, - segment_type: "Label" + segment_type: 'Label' } } + static fromObject(obj: any) { + return new Segment( + obj.id, + obj.from, + obj.to, + obj.segment_type + ); + } + } \ No newline at end of file diff --git a/server/src/lib.rs b/server/src/lib.rs index 0600086..0601b5c 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -1,2 +1,3 @@ pub mod config; pub mod services; +pub mod utils; diff --git a/server/src/services/analytic_service.rs b/server/src/services/analytic_service.rs index 8c01cda..5548d44 100644 --- a/server/src/services/analytic_service.rs +++ b/server/src/services/analytic_service.rs @@ -1,6 +1,6 @@ -use crate::config::Config; +use crate::{config::Config, utils::get_random_str}; -use super::{metric_service::MetricService, segments_service::{Segment, SegmentType}}; +use super::{metric_service::MetricService, segments_service::{ID_LENGTH, Segment, SegmentType}}; use subbeat::metric::Metric; @@ -42,7 +42,8 @@ impl AnalyticService { } else { if from.is_some() { result.push(Segment { - id: None, + // TODO: persist detections together with id + id: Some(get_random_str(ID_LENGTH)), from: from.unwrap(), to: *t, segment_type: SegmentType::Detection, @@ -52,9 +53,10 @@ impl AnalyticService { } } + // TODO: don't repeat myself if from.is_some() { result.push(Segment { - id: None, + id: Some(get_random_str(ID_LENGTH)), from: from.unwrap(), to, segment_type: SegmentType::Detection, diff --git a/server/src/services/segments_service.rs b/server/src/services/segments_service.rs index 6bb258e..389c88f 100644 --- a/server/src/services/segments_service.rs +++ b/server/src/services/segments_service.rs @@ -4,10 +4,10 @@ use serde::{Deserialize, Serialize}; use std::sync::{Arc, Mutex}; -use std::iter::repeat_with; +use crate::utils::get_random_str; -const ID_LENGTH: usize = 20; +pub const ID_LENGTH: usize = 20; pub type SegmentId = String; @@ -85,9 +85,7 @@ impl SegmentsService { // returns id of created segment pub fn insert_segment(&self, segment: &Segment) -> anyhow::Result { - let id: SegmentId = repeat_with(fastrand::alphanumeric) - .take(ID_LENGTH) - .collect(); + let id: SegmentId = get_random_str(ID_LENGTH); // merging let sgms = self.get_segments_intersected(segment.from, segment.to)?; diff --git a/server/src/utils.rs b/server/src/utils.rs new file mode 100644 index 0000000..e0b8ffb --- /dev/null +++ b/server/src/utils.rs @@ -0,0 +1,6 @@ +use std::iter::repeat_with; + +pub fn get_random_str(len: usize) -> String { + return repeat_with(fastrand::alphanumeric).take(len) + .collect(); +}