gRPC in import/export

This commit is contained in:
Gregory Schier
2024-02-23 16:16:13 -08:00
parent 16506d1ddd
commit fd5b495b70
10 changed files with 137 additions and 132 deletions

View File

@@ -42,22 +42,8 @@ use window_ext::TrafficLightWindowExt;
use crate::analytics::{AnalyticsAction, AnalyticsResource};
use crate::grpc::metadata_to_map;
use crate::http::send_http_request;
use crate::models::{
cancel_pending_grpc_connections, cancel_pending_responses, create_http_response,
delete_all_grpc_connections, delete_all_http_responses, delete_cookie_jar, delete_environment,
delete_folder, delete_grpc_connection, delete_grpc_request, delete_http_request,
delete_http_response, delete_workspace, duplicate_grpc_request, duplicate_http_request,
get_cookie_jar, get_environment, get_folder, get_grpc_connection, get_grpc_request,
get_http_request, get_http_response, get_key_value_raw, get_or_create_settings, get_workspace,
get_workspace_export_resources, list_cookie_jars, list_environments, list_folders,
list_grpc_connections, list_grpc_events, list_grpc_requests, list_requests, list_responses,
list_workspaces, set_key_value_raw, update_response_if_id, update_settings, upsert_cookie_jar,
upsert_environment, upsert_folder, upsert_grpc_connection, upsert_grpc_event,
upsert_grpc_request, upsert_http_request, upsert_workspace, CookieJar, Environment,
EnvironmentVariable, Folder, GrpcConnection, GrpcEvent, GrpcEventType, GrpcRequest,
HttpRequest, HttpResponse, KeyValue, Settings, Workspace,
};
use crate::plugin::{ImportResources, ImportResult};
use crate::models::{cancel_pending_grpc_connections, cancel_pending_responses, create_http_response, delete_all_grpc_connections, delete_all_http_responses, delete_cookie_jar, delete_environment, delete_folder, delete_grpc_connection, delete_grpc_request, delete_http_request, delete_http_response, delete_workspace, duplicate_grpc_request, duplicate_http_request, get_cookie_jar, get_environment, get_folder, get_grpc_connection, get_grpc_request, get_http_request, get_http_response, get_key_value_raw, get_or_create_settings, get_workspace, get_workspace_export_resources, list_cookie_jars, list_environments, list_folders, list_grpc_connections, list_grpc_events, list_grpc_requests, list_requests, list_responses, list_workspaces, set_key_value_raw, update_response_if_id, update_settings, upsert_cookie_jar, upsert_environment, upsert_folder, upsert_grpc_connection, upsert_grpc_event, upsert_grpc_request, upsert_http_request, upsert_workspace, CookieJar, Environment, EnvironmentVariable, Folder, GrpcConnection, GrpcEvent, GrpcEventType, GrpcRequest, HttpRequest, HttpResponse, KeyValue, Settings, Workspace, WorkspaceExportResources};
use crate::plugin::{ImportResult};
use crate::updates::{update_mode_from_str, UpdateMode, YaakUpdater};
mod analytics;
@@ -691,7 +677,7 @@ async fn cmd_filter_response(w: Window, response_id: &str, filter: &str) -> Resu
}
#[tauri::command]
async fn cmd_import_data(w: Window, file_paths: Vec<&str>) -> Result<ImportResources, String> {
async fn cmd_import_data(w: Window, file_paths: Vec<&str>) -> Result<WorkspaceExportResources, String> {
let mut result: Option<ImportResult> = None;
let plugins = vec!["importer-yaak", "importer-insomnia", "importer-postman"];
for plugin_name in plugins {
@@ -714,7 +700,7 @@ async fn cmd_import_data(w: Window, file_paths: Vec<&str>) -> Result<ImportResou
match result {
None => Err("No importers found for the chosen file".to_string()),
Some(r) => {
let mut imported_resources = ImportResources::default();
let mut imported_resources = WorkspaceExportResources::default();
info!("Importing resources");
for v in r.resources.workspaces {
@@ -739,11 +725,19 @@ async fn cmd_import_data(w: Window, file_paths: Vec<&str>) -> Result<ImportResou
info!("Imported folder: {}", x.name);
}
for v in r.resources.requests {
for v in r.resources.http_requests {
let x = upsert_http_request(&w, v)
.await
.expect("Failed to create request");
imported_resources.requests.push(x.clone());
.expect("Failed to create HTTP request");
imported_resources.http_requests.push(x.clone());
info!("Imported request: {}", x.name);
}
for v in r.resources.grpc_requests {
let x = upsert_grpc_request(&w, &v)
.await
.expect("Failed to create GRPC request");
imported_resources.grpc_requests.push(x.clone());
info!("Imported request: {}", x.name);
}

View File

@@ -712,7 +712,7 @@ pub async fn upsert_grpc_event(
sqlx::query!(
r#"
INSERT INTO grpc_events (
id, workspace_id, request_id, connection_id, content, event_type, metadata,
id, workspace_id, request_id, connection_id, content, event_type, metadata,
status, error
)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -743,10 +743,7 @@ pub async fn upsert_grpc_event(
}
}
pub async fn get_grpc_event(
mgr: &impl Manager<Wry>,
id: &str,
) -> Result<GrpcEvent, sqlx::Error> {
pub async fn get_grpc_event(mgr: &impl Manager<Wry>, id: &str) -> Result<GrpcEvent, sqlx::Error> {
let db = get_db(mgr).await;
sqlx::query_as!(
GrpcEvent,
@@ -760,8 +757,8 @@ pub async fn get_grpc_event(
"#,
id,
)
.fetch_one(&db)
.await
.fetch_one(&db)
.await
}
pub async fn list_grpc_events(
@@ -781,8 +778,8 @@ pub async fn list_grpc_events(
"#,
connection_id,
)
.fetch_all(&db)
.await
.fetch_all(&db)
.await
}
pub async fn upsert_cookie_jar(
@@ -1532,19 +1529,20 @@ pub fn generate_id(prefix: Option<&str>) -> String {
#[derive(Default, Debug, Deserialize, Serialize)]
#[serde(default, rename_all = "camelCase")]
pub struct WorkspaceExport {
yaak_version: String,
yaak_schema: i64,
timestamp: NaiveDateTime,
resources: WorkspaceExportResources,
pub yaak_version: String,
pub yaak_schema: i64,
pub timestamp: NaiveDateTime,
pub resources: WorkspaceExportResources,
}
#[derive(Default, Debug, Deserialize, Serialize)]
#[serde(default, rename_all = "camelCase")]
pub struct WorkspaceExportResources {
workspaces: Vec<Workspace>,
environments: Vec<Environment>,
folders: Vec<Folder>,
requests: Vec<HttpRequest>,
pub workspaces: Vec<Workspace>,
pub environments: Vec<Environment>,
pub folders: Vec<Folder>,
pub http_requests: Vec<HttpRequest>,
pub grpc_requests: Vec<GrpcRequest>,
}
pub async fn get_workspace_export_resources(
@@ -1556,7 +1554,7 @@ pub async fn get_workspace_export_resources(
.expect("Failed to get workspace");
return WorkspaceExport {
yaak_version: app_handle.package_info().version.clone().to_string(),
yaak_schema: 1,
yaak_schema: 2,
timestamp: chrono::Utc::now().naive_utc(),
resources: WorkspaceExportResources {
workspaces: vec![workspace],
@@ -1566,9 +1564,12 @@ pub async fn get_workspace_export_resources(
folders: list_folders(app_handle, workspace_id)
.await
.expect("Failed to get folders"),
requests: list_requests(app_handle, workspace_id)
http_requests: list_requests(app_handle, workspace_id)
.await
.expect("Failed to get requests"),
grpc_requests: list_grpc_requests(app_handle, workspace_id)
.await
.expect("Failed to get grpc requests"),
},
};
}

View File

@@ -1,18 +1,18 @@
use std::fs;
use boa_engine::{
Context, js_string, JsNativeError, JsValue, Module, module::SimpleModuleLoader,
property::Attribute, Source,
};
use boa_engine::builtins::promise::PromiseState;
use boa_engine::module::ModuleLoader;
use boa_engine::{
js_string, module::SimpleModuleLoader, property::Attribute, Context, JsNativeError, JsValue,
Module, Source,
};
use boa_runtime::Console;
use log::{debug, error};
use serde::{Deserialize, Serialize};
use serde_json::json;
use tauri::AppHandle;
use crate::models::{Environment, Folder, HttpRequest, Workspace};
use crate::models::{Environment, Folder, HttpRequest, Workspace, WorkspaceExportResources};
#[derive(Default, Debug, Deserialize, Serialize)]
pub struct FilterResult {
@@ -21,15 +21,7 @@ pub struct FilterResult {
#[derive(Default, Debug, Deserialize, Serialize)]
pub struct ImportResult {
pub resources: ImportResources,
}
#[derive(Default, Debug, Deserialize, Serialize)]
pub struct ImportResources {
pub workspaces: Vec<Workspace>,
pub environments: Vec<Environment>,
pub folders: Vec<Folder>,
pub requests: Vec<HttpRequest>,
pub resources: WorkspaceExportResources,
}
pub async fn run_plugin_filter(