diff --git a/src/common/meta/saved_view.rs b/src/common/meta/saved_view.rs index aa866de422..36629bd3f4 100644 --- a/src/common/meta/saved_view.rs +++ b/src/common/meta/saved_view.rs @@ -59,10 +59,6 @@ pub struct ViewWithoutData { pub struct ViewsWithoutData { pub views: Vec, } -#[derive(Serialize, Deserialize, ToSchema)] -pub struct Views { - pub views: Vec, -} #[derive(Serialize, Deserialize, ToSchema)] pub struct DeleteViewResponse { diff --git a/src/handler/http/request/search/saved_view.rs b/src/handler/http/request/search/saved_view.rs index 054741e527..a0a2332c73 100644 --- a/src/handler/http/request/search/saved_view.rs +++ b/src/handler/http/request/search/saved_view.rs @@ -13,27 +13,14 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -// Copyright 2023 Zinc Labs Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -use actix_web::{delete, get, post, put, web, HttpRequest, HttpResponse}; +use actix_web::{delete, get, post, put, web, HttpResponse}; use std::io::Error; use crate::common::meta::{ http::HttpResponse as MetaHttpResponse, - saved_view::{CreateViewRequest, CreateViewResponse, DeleteViewResponse, UpdateViewRequest}, + saved_view::{ + CreateViewRequest, CreateViewResponse, DeleteViewResponse, UpdateViewRequest, View, + }, }; use crate::service::db::saved_view; @@ -64,13 +51,15 @@ use crate::service::db::saved_view; ) )] #[get("/{org_id}/savedviews/{view_id}")] -pub async fn get_view( - path: web::Path<(String, String)>, - _req: HttpRequest, -) -> Result { +pub async fn get_view(path: web::Path<(String, String)>) -> Result { let (org_id, view_id) = path.into_inner(); - let view = saved_view::get_view(&org_id, &view_id).await.unwrap(); - Ok(MetaHttpResponse::json(view)) + match saved_view::get_view(&org_id, &view_id).await { + Ok(view) => { + let view: View = view; + Ok(MetaHttpResponse::json(view)) + } + Err(e) => Ok(MetaHttpResponse::bad_request(e)), + } } // ListSavedViews @@ -88,7 +77,7 @@ pub async fn get_view( ("org_id" = String, Path, description = "Organization name"), ), responses( - (status = 200, description="Success", content_type = "application/json", body = Views, example = json!([{ + (status = 200, description="Success", content_type = "application/json", body = ViewsWithoutData, example = json!([{ "org_id": "some-org-id", "view_name": "view-name", "view_id": "view-id", @@ -99,10 +88,12 @@ pub async fn get_view( ) )] #[get("/{org_id}/savedviews")] -pub async fn get_views(path: web::Path, _req: HttpRequest) -> Result { +pub async fn get_views(path: web::Path) -> Result { let org_id = path.into_inner(); - let views = saved_view::get_views_list_only(&org_id).await.unwrap(); - Ok(MetaHttpResponse::json(views)) + match saved_view::get_views_list_only(&org_id).await { + Ok(views) => Ok(MetaHttpResponse::json(views)), + Err(e) => Ok(MetaHttpResponse::bad_request(e)), + } } // DeleteSavedViews @@ -121,7 +112,7 @@ pub async fn get_views(path: web::Path, _req: HttpRequest) -> Result, _req: HttpRequest) -> Result, - _req: HttpRequest, -) -> Result { +pub async fn delete_view(path: web::Path<(String, String)>) -> Result { let (org_id, view_id) = path.into_inner(); - saved_view::delete_view(&org_id, &view_id).await.unwrap(); - - let resp = DeleteViewResponse { org_id, view_id }; - Ok(MetaHttpResponse::json(resp)) + match saved_view::delete_view(&org_id, &view_id).await { + Ok(_) => Ok(MetaHttpResponse::json(DeleteViewResponse { + org_id, + view_id, + })), + Err(e) => Ok(MetaHttpResponse::bad_request(e)), + } } // CreateSavedViews @@ -155,9 +146,9 @@ pub async fn delete_view( params( ("org_id" = String, Path, description = "Organization name"), ), - request_body(content = RequestCreateView, description = "Create view data", content_type = "application/json"), + request_body(content = CreateViewRequest, description = "Create view data", content_type = "application/json"), responses( - (status = 200, description="Success", content_type = "application/json", body = ResponseCreateView, example = json!([{ + (status = 200, description="Success", content_type = "application/json", body = CreateViewResponse, example = json!([{ "org_id": "some-org-id", "view_id": "view_id", }])), @@ -169,17 +160,17 @@ pub async fn delete_view( pub async fn create_view( path: web::Path, view: web::Json, - _req: HttpRequest, ) -> Result { let org_id = path.into_inner(); - let created_view = saved_view::set_view(&org_id, &view).await.unwrap(); - let resp = CreateViewResponse { - org_id, - view_id: created_view.view_id, - view_name: view.view_name.clone(), - }; - Ok(MetaHttpResponse::json(resp)) + match saved_view::set_view(&org_id, &view).await { + Ok(created_view) => Ok(MetaHttpResponse::json(CreateViewResponse { + org_id, + view_id: created_view.view_id, + view_name: view.view_name.clone(), + })), + Err(e) => Ok(MetaHttpResponse::bad_request(e)), + } } // UpdateSavedViews @@ -197,7 +188,7 @@ pub async fn create_view( ("org_id" = String, Path, description = "Organization name"), ("view_id" = String, Path, description = "View id to be updated"), ), - request_body(content = RequestUpdateView, description = "Update view data", content_type = "application/json"), + request_body(content = UpdateViewRequest, description = "Update view data", content_type = "application/json"), responses( (status = 200, description="Success", content_type = "application/json", body = View, example = json!([{ "org_id": "some-org-id", @@ -213,14 +204,13 @@ pub async fn create_view( pub async fn update_view( path: web::Path<(String, String)>, view: web::Json, - _req: HttpRequest, ) -> Result { let (org_id, view_id) = path.into_inner(); - let updated_view = saved_view::update_view(&org_id, &view_id, &view) - .await - .unwrap(); - Ok(MetaHttpResponse::json(updated_view)) + match saved_view::update_view(&org_id, &view_id, &view).await { + Ok(updated_view) => Ok(MetaHttpResponse::json(updated_view)), + Err(e) => Ok(MetaHttpResponse::bad_request(e)), + } } #[cfg(test)] diff --git a/src/handler/http/router/openapi.rs b/src/handler/http/router/openapi.rs index dc84e149cc..51aaf60e3e 100644 --- a/src/handler/http/router/openapi.rs +++ b/src/handler/http/router/openapi.rs @@ -147,7 +147,8 @@ use crate::handler::http::request; meta::search::Response, meta::search::ResponseTook, meta::saved_view::View, - meta::saved_view::Views, + meta::saved_view::ViewWithoutData, + meta::saved_view::ViewsWithoutData, meta::saved_view::CreateViewRequest, meta::saved_view::DeleteViewResponse, meta::saved_view::CreateViewResponse, diff --git a/src/service/db/saved_view.rs b/src/service/db/saved_view.rs index 306059241e..47076a6410 100644 --- a/src/service/db/saved_view.rs +++ b/src/service/db/saved_view.rs @@ -16,7 +16,7 @@ use crate::common::{ infra::{db as infra_db, errors::Error}, meta::saved_view::{ - CreateViewRequest, UpdateViewRequest, View, ViewWithoutData, Views, ViewsWithoutData, + CreateViewRequest, UpdateViewRequest, View, ViewWithoutData, ViewsWithoutData, }, utils::json, }; @@ -77,19 +77,6 @@ pub async fn get_view(org_id: &str, view_id: &str) -> Result { Ok(view) } -/// Return all the saved views associated with a provided org_id -pub async fn get_views(org_id: &str) -> Result { - let db = &infra_db::get_db().await; - let key = format!("{}/{}", SAVED_VIEWS_KEY_PREFIX, org_id); - let ret = db.list_values(&key).await?; - let views: Vec = ret - .iter() - .map(|view| json::from_slice(view).unwrap()) - .collect(); - - Ok(Views { views }) -} - /// Return all the saved views but query limited data only, associated with a provided org_id /// This will not contain the payload. pub async fn get_views_list_only(org_id: &str) -> Result {