mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-26 14:54:27 +01:00
Update get_index_schema to allow raw response
This commit is contained in:
parent
e97e13ce9f
commit
2b3c91aabd
@ -1,9 +1,11 @@
|
|||||||
use meilidb_schema::Schema;
|
use chrono::{DateTime, Utc};
|
||||||
use http::StatusCode;
|
use http::StatusCode;
|
||||||
use meilidb_core::ProcessedUpdateResult;
|
use meilidb_core::ProcessedUpdateResult;
|
||||||
|
use meilidb_schema::Schema;
|
||||||
use rand::seq::SliceRandom;
|
use rand::seq::SliceRandom;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
use tide::querystring::ContextExt as QSContextExt;
|
||||||
use tide::response::IntoResponse;
|
use tide::response::IntoResponse;
|
||||||
use tide::{Context, Response};
|
use tide::{Context, Response};
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
@ -39,7 +41,6 @@ pub async fn list_indexes(ctx: Context<Data>) -> SResult<Response> {
|
|||||||
struct GetIndexResponse {
|
struct GetIndexResponse {
|
||||||
name: String,
|
name: String,
|
||||||
uid: String,
|
uid: String,
|
||||||
schema: Option<SchemaBody>,
|
|
||||||
created_at: DateTime<Utc>,
|
created_at: DateTime<Utc>,
|
||||||
updated_at: DateTime<Utc>,
|
updated_at: DateTime<Utc>,
|
||||||
}
|
}
|
||||||
@ -56,9 +57,6 @@ pub async fn get_index(ctx: Context<Data>) -> SResult<Response> {
|
|||||||
let name = index.main.name(&mut reader)
|
let name = index.main.name(&mut reader)
|
||||||
.map_err(ResponseError::internal)?
|
.map_err(ResponseError::internal)?
|
||||||
.ok_or(ResponseError::internal("Name not found"))?;
|
.ok_or(ResponseError::internal("Name not found"))?;
|
||||||
let schema = index.main.schema(&mut reader)
|
|
||||||
.map_err(ResponseError::internal)?
|
|
||||||
.map(|schema| SchemaBody::from(schema));
|
|
||||||
let created_at = index.main.created_at(&mut reader)
|
let created_at = index.main.created_at(&mut reader)
|
||||||
.map_err(ResponseError::internal)?
|
.map_err(ResponseError::internal)?
|
||||||
.ok_or(ResponseError::internal("Created date not found"))?;
|
.ok_or(ResponseError::internal("Created date not found"))?;
|
||||||
@ -69,7 +67,6 @@ pub async fn get_index(ctx: Context<Data>) -> SResult<Response> {
|
|||||||
let response_body = GetIndexResponse {
|
let response_body = GetIndexResponse {
|
||||||
name,
|
name,
|
||||||
uid,
|
uid,
|
||||||
schema,
|
|
||||||
created_at,
|
created_at,
|
||||||
updated_at,
|
updated_at,
|
||||||
};
|
};
|
||||||
@ -77,23 +74,35 @@ pub async fn get_index(ctx: Context<Data>) -> SResult<Response> {
|
|||||||
Ok(tide::response::json(response_body))
|
Ok(tide::response::json(response_body))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
struct GetSchemaParams {
|
||||||
|
raw: bool,
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn get_index_schema(ctx: Context<Data>) -> SResult<Response> {
|
pub async fn get_index_schema(ctx: Context<Data>) -> SResult<Response> {
|
||||||
ctx.is_allowed(IndexesRead)?;
|
ctx.is_allowed(IndexesRead)?;
|
||||||
|
|
||||||
let index = ctx.index()?;
|
let index = ctx.index()?;
|
||||||
|
|
||||||
|
// Tide doesn't support "no query param"
|
||||||
|
let params: GetSchemaParams = ctx.url_query().unwrap_or_default();
|
||||||
|
|
||||||
let env = &ctx.state().db.env;
|
let env = &ctx.state().db.env;
|
||||||
let reader = env.read_txn().map_err(ResponseError::internal)?;
|
let reader = env.read_txn().map_err(ResponseError::internal)?;
|
||||||
|
|
||||||
let schema = index
|
let schema = index
|
||||||
.main
|
.main
|
||||||
.schema(&reader)
|
.schema(&reader)
|
||||||
.map_err(ResponseError::create_index)?;
|
.map_err(ResponseError::open_index)?;
|
||||||
|
|
||||||
match schema {
|
match schema {
|
||||||
Some(schema) => {
|
Some(schema) => {
|
||||||
let schema = SchemaBody::from(schema);
|
if params.raw {
|
||||||
Ok(tide::response::json(schema))
|
Ok(tide::response::json(schema.to_builder()))
|
||||||
|
} else {
|
||||||
|
Ok(tide::response::json(SchemaBody::from(schema)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
None => Ok(
|
None => Ok(
|
||||||
tide::response::json(json!({ "message": "missing index schema" }))
|
tide::response::json(json!({ "message": "missing index schema" }))
|
||||||
|
@ -145,7 +145,7 @@ struct InnerSchema {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Schema {
|
impl Schema {
|
||||||
fn to_builder(&self) -> SchemaBuilder {
|
pub fn to_builder(&self) -> SchemaBuilder {
|
||||||
let identifier = self.inner.identifier.clone();
|
let identifier = self.inner.identifier.clone();
|
||||||
let attributes = self.attributes_ordered();
|
let attributes = self.attributes_ordered();
|
||||||
SchemaBuilder {
|
SchemaBuilder {
|
||||||
|
Loading…
Reference in New Issue
Block a user