Browse Source

segment types

pull/25/head
Alexey Velikiy 3 years ago
parent
commit
8556e7d045
  1. 2
      client/src/components/Graph.vue
  2. 6
      client/src/services/segments.service.ts
  3. 18
      client/src/types/segment.ts
  4. 1
      server/.gitignore
  5. 29
      server/src/services/segments_service.rs

2
client/src/components/Graph.vue

@ -14,7 +14,7 @@
import { defineComponent } from 'vue';
import { HasticPod, TimeRange } from "./hastic_pod";
import { getMetrics } from '../services/metrics.service';
import { getSegments, postSegment, deleteSegment } from '../services/segments';
import { getSegments, postSegment, deleteSegment } from '../services/segments.service';
import { LineTimeSerie } from "@chartwerk/line-pod";
import { SegmentArray } from '@/types/segment_array';

6
client/src/services/segments.ts → client/src/services/segments.service.ts

@ -18,8 +18,10 @@ export async function getSegments(from: number, to: number): Promise<Segment[]>
}
export async function postSegment(segment: Segment): Promise<SegmentId> {
segment.id = undefined; // because we post a new segment. It's a hack
const resp = await axios.post(SEGMENTS_API_URL, segment);
const segObj = segment.toObject();
segObj.id = undefined; // because we post a new segment. It's a hack
const resp = await axios.post(SEGMENTS_API_URL, segObj);
return resp['data']['id'];
}

18
client/src/types/segment.ts

@ -1,7 +1,7 @@
export type SegmentId = string;
export class Segment {
constructor(private _id: SegmentId | undefined, public from: number, public to: number) {
constructor(private _id: SegmentId | undefined, public from: number, public to: number, segmentType = 1) {
if(this._id === undefined) {
throw new Error('id is undefined');
}
@ -11,6 +11,7 @@ export class Segment {
if(isNaN(+to)) {
throw new Error('to can`t be NaN');
}
this._segmentType = segmentType;
}
get id(): SegmentId { return this._id; }
@ -33,4 +34,19 @@ export class Segment {
equals(segment: Segment) {
return this._id === segment._id;
}
// TODO: remove this and make original inheritence
_segmentType: number
get segmentType(): number { return this._segmentType; }
set segmentType(value) { this._segmentType = value; }
toObject() {
return {
id: this.id,
from: this.from,
to: this.to,
segment_type: "Label"
}
}
}

1
server/.gitignore vendored

@ -1,2 +1,3 @@
target/*
data.db
data/*

29
server/src/services/segments_service.rs

@ -9,7 +9,9 @@ use std::iter::repeat_with;
const ID_LENGTH: usize = 20;
pub type SegmentId = String;
#[derive(Debug, Serialize, Deserialize, Clone, Copy)]
// TODO: make logic with this enum shorter
#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
pub enum SegmentType {
Label = 1,
Detection = 2,
@ -23,8 +25,17 @@ impl SegmentType {
SegmentType::Detection
}
}
fn to_integer(&self) -> u64 {
if *self == SegmentType::Label {
1
} else {
2
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Segment {
pub id: Option<SegmentId>,
@ -53,13 +64,17 @@ pub struct SegmentsService {
impl SegmentsService {
pub fn new() -> anyhow::Result<SegmentsService> {
let conn = Connection::open("./segments.db")?;
// TODO: move it to data service
std::fs::create_dir_all("./data").unwrap();
let conn = Connection::open("./data/segments.db")?;
conn.execute(
"CREATE TABLE IF NOT EXISTS segment (
id TEXT PRIMARY KEY,
start INTEGER NOT NULL,
end INTEGER NOT NULL,
segment_type INTEGER NOT NULL
id TEXT PRIMARY KEY,
start INTEGER NOT NULL,
end INTEGER NOT NULL,
segment_type INTEGER NOT NULL
)",
[],
)?;
@ -91,7 +106,7 @@ impl SegmentsService {
self.connection.lock().unwrap().execute(
"INSERT INTO segment (id, start, end, segment_type) VALUES (?1, ?2, ?3, ?4)",
params![id, min, max],
params![id, min, max, segment.segment_type.to_integer()],
)?;
Ok(Segment {
id: Some(id),

Loading…
Cancel
Save