mirror of https://github.com/buster-so/buster.git
Refactor dataset API to deploy datasets and update related structures
- Replaced the existing `post_datasets` endpoint with a new `deploy_datasets` endpoint to better reflect its purpose. - Deleted the `post_datasets` module and its associated logic, streamlining the codebase. - Updated the request and response structures to use `DeployDatasetsRequest` and related types, enhancing clarity and maintainability. - Adjusted the BusterClient to utilize the new endpoint for deploying datasets, ensuring consistency across the API. These changes improve the API's functionality by providing a clearer and more focused approach to dataset deployment, facilitating better data management.
This commit is contained in:
parent
51e3c0cc2e
commit
c2cd564251
|
@ -25,7 +25,7 @@ use crate::{
|
|||
};
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct PostDatasetsRequest {
|
||||
pub struct DeployDatasetsRequest {
|
||||
pub data_source_name: String,
|
||||
pub env: String,
|
||||
pub name: String,
|
||||
|
@ -33,13 +33,13 @@ pub struct PostDatasetsRequest {
|
|||
pub schema: String,
|
||||
pub description: String,
|
||||
pub sql_definition: Option<String>,
|
||||
pub entity_relationships: Option<Vec<PostDatasetsEntityRelationshipsRequest>>,
|
||||
pub columns: Vec<PostDatasetsColumnsRequest>,
|
||||
pub entity_relationships: Option<Vec<DeployDatasetsEntityRelationshipsRequest>>,
|
||||
pub columns: Vec<DeployDatasetsColumnsRequest>,
|
||||
pub yml_file: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct PostDatasetsColumnsRequest {
|
||||
pub struct DeployDatasetsColumnsRequest {
|
||||
pub name: String,
|
||||
pub description: String,
|
||||
pub semantic_type: Option<String>,
|
||||
|
@ -50,7 +50,7 @@ pub struct PostDatasetsColumnsRequest {
|
|||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct PostDatasetsEntityRelationshipsRequest {
|
||||
pub struct DeployDatasetsEntityRelationshipsRequest {
|
||||
pub name: String,
|
||||
pub expr: String,
|
||||
#[serde(rename = "type")]
|
||||
|
@ -58,15 +58,15 @@ pub struct PostDatasetsEntityRelationshipsRequest {
|
|||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
pub struct PostDatasetsResponse {
|
||||
pub struct DeployDatasetsResponse {
|
||||
pub ids: Vec<Uuid>,
|
||||
}
|
||||
|
||||
pub async fn post_datasets(
|
||||
pub async fn deploy_datasets(
|
||||
Extension(user): Extension<User>,
|
||||
Json(request): Json<Vec<PostDatasetsRequest>>,
|
||||
) -> Result<ApiResponse<PostDatasetsResponse>, (axum::http::StatusCode, String)> {
|
||||
let _ = match post_datasets_handler(&user.id, request).await {
|
||||
Json(request): Json<Vec<DeployDatasetsRequest>>,
|
||||
) -> Result<ApiResponse<DeployDatasetsResponse>, (axum::http::StatusCode, String)> {
|
||||
let _ = match deploy_datasets_handler(&user.id, request).await {
|
||||
Ok(dataset) => dataset,
|
||||
Err(e) => {
|
||||
tracing::error!("Error creating dataset: {:?}", e);
|
||||
|
@ -77,7 +77,7 @@ pub async fn post_datasets(
|
|||
Ok(ApiResponse::OK)
|
||||
}
|
||||
|
||||
async fn post_datasets_handler(user_id: &Uuid, requests: Vec<PostDatasetsRequest>) -> Result<()> {
|
||||
async fn deploy_datasets_handler(user_id: &Uuid, requests: Vec<DeployDatasetsRequest>) -> Result<()> {
|
||||
// Get the user organization id.
|
||||
let organization_id = get_user_organization_id(&user_id).await?;
|
||||
|
|
@ -2,7 +2,7 @@ mod assets;
|
|||
mod get_dataset;
|
||||
mod get_dataset_data_sample;
|
||||
mod list_datasets;
|
||||
mod post_datasets;
|
||||
mod deploy_datasets;
|
||||
|
||||
use axum::{
|
||||
routing::{get, post},
|
||||
|
@ -12,7 +12,7 @@ use axum::{
|
|||
pub fn router() -> Router {
|
||||
Router::new()
|
||||
.route("/", get(list_datasets::list_datasets))
|
||||
.route("/", post(post_datasets::post_datasets))
|
||||
.route("/deploy", post(deploy_datasets::deploy_datasets))
|
||||
.route("/:dataset_id", get(get_dataset::get_dataset))
|
||||
.route(
|
||||
"/:dataset_id/data/sample",
|
||||
|
|
|
@ -5,7 +5,7 @@ use reqwest::{
|
|||
};
|
||||
|
||||
use super::{
|
||||
PostDataSourcesRequest, PostDatasetsRequest, ValidateApiKeyRequest, ValidateApiKeyResponse,
|
||||
PostDataSourcesRequest, DeployDatasetsRequest, ValidateApiKeyRequest, ValidateApiKeyResponse,
|
||||
};
|
||||
|
||||
pub struct BusterClient {
|
||||
|
@ -85,12 +85,12 @@ impl BusterClient {
|
|||
}
|
||||
}
|
||||
|
||||
pub async fn post_datasets(&self, req_body: Vec<PostDatasetsRequest>) -> Result<()> {
|
||||
pub async fn deploy_datasets(&self, req_body: Vec<DeployDatasetsRequest>) -> Result<()> {
|
||||
let headers = self.build_headers()?;
|
||||
|
||||
match self
|
||||
.client
|
||||
.post(format!("{}/api/v1/datasets", self.base_url))
|
||||
.post(format!("{}/api/v1/datasets/deploy", self.base_url))
|
||||
.headers(headers)
|
||||
.json(&req_body)
|
||||
.send()
|
||||
|
@ -99,13 +99,13 @@ impl BusterClient {
|
|||
Ok(res) => {
|
||||
if !res.status().is_success() {
|
||||
return Err(anyhow::anyhow!(
|
||||
"POST /api/v1/datasets failed: {}",
|
||||
"POST /api/v1/datasets/deploy failed: {}",
|
||||
res.text().await?
|
||||
));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
Err(e) => Err(anyhow::anyhow!("POST /api/v1/datasets failed: {}", e)),
|
||||
Err(e) => Err(anyhow::anyhow!("POST /api/v1/datasets/deploy failed: {}", e)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ pub struct PostDataSourcesRequest {
|
|||
}
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
pub struct PostDatasetsRequest {
|
||||
pub struct DeployDatasetsRequest {
|
||||
pub data_source_name: String,
|
||||
pub env: String,
|
||||
pub name: String,
|
||||
|
@ -29,13 +29,13 @@ pub struct PostDatasetsRequest {
|
|||
pub schema: String,
|
||||
pub description: String,
|
||||
pub sql_definition: Option<String>,
|
||||
pub entity_relationships: Option<Vec<PostDatasetsEntityRelationshipsRequest>>,
|
||||
pub columns: Vec<PostDatasetsColumnsRequest>,
|
||||
pub entity_relationships: Option<Vec<DeployDatasetsEntityRelationshipsRequest>>,
|
||||
pub columns: Vec<DeployDatasetsColumnsRequest>,
|
||||
pub yml_file: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
pub struct PostDatasetsColumnsRequest {
|
||||
pub struct DeployDatasetsColumnsRequest {
|
||||
pub name: String,
|
||||
pub description: String,
|
||||
pub semantic_type: Option<String>,
|
||||
|
@ -46,7 +46,7 @@ pub struct PostDatasetsColumnsRequest {
|
|||
}
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
pub struct PostDatasetsEntityRelationshipsRequest {
|
||||
pub struct DeployDatasetsEntityRelationshipsRequest {
|
||||
pub name: String,
|
||||
pub expr: String,
|
||||
#[serde(rename = "type")]
|
||||
|
|
|
@ -4,8 +4,8 @@ use serde::{Deserialize, Serialize};
|
|||
use tokio::fs;
|
||||
|
||||
use crate::utils::{
|
||||
BusterClient, PostDatasetsColumnsRequest, PostDatasetsEntityRelationshipsRequest,
|
||||
PostDatasetsRequest,
|
||||
BusterClient, DeployDatasetsColumnsRequest, DeployDatasetsEntityRelationshipsRequest,
|
||||
DeployDatasetsRequest,
|
||||
};
|
||||
|
||||
use super::{
|
||||
|
@ -121,7 +121,7 @@ pub async fn upload_model_files(
|
|||
let mut columns = Vec::new();
|
||||
|
||||
for column in semantic_model.dimensions {
|
||||
columns.push(PostDatasetsColumnsRequest {
|
||||
columns.push(DeployDatasetsColumnsRequest {
|
||||
name: column.name,
|
||||
description: column.description,
|
||||
semantic_type: Some(String::from("dimension")),
|
||||
|
@ -132,7 +132,7 @@ pub async fn upload_model_files(
|
|||
}
|
||||
|
||||
for column in semantic_model.measures {
|
||||
columns.push(PostDatasetsColumnsRequest {
|
||||
columns.push(DeployDatasetsColumnsRequest {
|
||||
name: column.name,
|
||||
description: column.description,
|
||||
semantic_type: Some(String::from("measure")),
|
||||
|
@ -145,14 +145,14 @@ pub async fn upload_model_files(
|
|||
let mut entity_relationships = Vec::new();
|
||||
|
||||
for entity in semantic_model.entities {
|
||||
entity_relationships.push(PostDatasetsEntityRelationshipsRequest {
|
||||
entity_relationships.push(DeployDatasetsEntityRelationshipsRequest {
|
||||
name: entity.name,
|
||||
expr: entity.expr,
|
||||
type_: entity.entity_type,
|
||||
});
|
||||
}
|
||||
|
||||
let dataset = PostDatasetsRequest {
|
||||
let dataset = DeployDatasetsRequest {
|
||||
data_source_name: profile_name.clone(),
|
||||
env: profile.target.clone(),
|
||||
name: semantic_model.name,
|
||||
|
@ -171,7 +171,7 @@ pub async fn upload_model_files(
|
|||
|
||||
let buster = BusterClient::new(buster_creds.url, buster_creds.api_key)?;
|
||||
|
||||
if let Err(e) = buster.post_datasets(post_datasets_req_body).await {
|
||||
if let Err(e) = buster.deploy_datasets(post_datasets_req_body).await {
|
||||
return Err(anyhow::anyhow!(
|
||||
"Failed to upload model files to Buster: {}",
|
||||
e
|
||||
|
|
Loading…
Reference in New Issue