From 4b604dcf3619174c788eb8623fb5cd7dc2397a36 Mon Sep 17 00:00:00 2001 From: Alexey Velikiy Date: Thu, 28 Oct 2021 04:23:46 +0300 Subject: [PATCH] segment continue : buidl IS brOKEN --- server/src/api.rs | 1 + server/src/api/segments.rs | 46 +++++++++++++++++++++++------ server/src/services/data_service.rs | 3 +- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/server/src/api.rs b/server/src/api.rs index 6cebe9e..aeaece5 100644 --- a/server/src/api.rs +++ b/server/src/api.rs @@ -7,6 +7,7 @@ use warp::{http::Response, Filter}; mod auth; mod metric; +mod segments; use serde::Serialize; diff --git a/server/src/api/segments.rs b/server/src/api/segments.rs index a9c94fc..3601f65 100644 --- a/server/src/api/segments.rs +++ b/server/src/api/segments.rs @@ -1,8 +1,9 @@ -use hastic::services::user_service; +use hastic::services::data_service::{self, Segment}; -use warp::filters::method::post; +use warp::filters::method::get; use warp::http::HeaderValue; use warp::hyper::{Body, StatusCode}; +use warp::reject::Reject; use warp::{http::Response, Filter}; use warp::{Rejection, Reply}; @@ -11,13 +12,25 @@ use serde::Serialize; use crate::api::{self, API}; use parking_lot::RwLock; +use std::collections::HashMap; use std::sync::Arc; +#[derive(Serialize)] +struct SegmentsResult { + segments: Vec +} + +#[derive(Debug)] +struct BadQuery; + +impl Reject for BadQuery {} + + async fn get_query( p: HashMap, - ms: Arc>, -) -> anyhow::Result { + ds: Arc>, +) -> anyhow::Result { if !p.contains_key("from") { return Err(anyhow::anyhow!("Missing attribute from")); } @@ -27,17 +40,32 @@ async fn get_query( let from = p.get("from").unwrap().parse::()?; let to = p.get("to").unwrap().parse::()?; - let prom = ms.read().get_prom(); - drop(ms); + let res = ds.read().get_segments(from, to)?; + drop(ds); + + Ok(SegmentsResult{ segments: res }) // Ok(prom.query(from, to, step).await?) } +async fn query( + p: HashMap, + ds: Arc>, +) -> Result { + //Err(warp::reject::custom(BadQuery)); + match get_query(p, ds).await { + Ok(res) => Ok(API::json(&res)), + // TODO: parse different error types + Err(_e) => Err(warp::reject::custom(BadQuery)), + } +} + pub fn get_route( - user_service: Arc>, + data_service: Arc>, ) -> impl Filter + Clone { - return warp::path!("api" / "segments") + + return warp::path!("api" / "segments") .and(get()) .and(warp::query::>()) - .and(warp::any().map(move || metric_service.clone())) + .and(warp::any().map(move || data_service.clone())) .and_then(query); } diff --git a/server/src/services/data_service.rs b/server/src/services/data_service.rs index 174f578..c5e8862 100644 --- a/server/src/services/data_service.rs +++ b/server/src/services/data_service.rs @@ -1,7 +1,8 @@ use rusqlite::{ Connection, params }; +use serde::Serialize; -#[derive(Debug)] +#[derive(Debug, Serialize)] pub struct Segment { pub id: Option, pub start: u64,