mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-07-27 00:31:02 +00:00
Add error handling
This commit is contained in:
@ -417,6 +417,7 @@ InvalidChatCompletionSearchDescriptionPrompt , InvalidRequest , BAD_REQU
|
|||||||
InvalidChatCompletionSearchQueryParamPrompt , InvalidRequest , BAD_REQUEST ;
|
InvalidChatCompletionSearchQueryParamPrompt , InvalidRequest , BAD_REQUEST ;
|
||||||
InvalidChatCompletionSearchIndexUidParamPrompt , InvalidRequest , BAD_REQUEST ;
|
InvalidChatCompletionSearchIndexUidParamPrompt , InvalidRequest , BAD_REQUEST ;
|
||||||
InvalidChatCompletionPreQueryPrompt , InvalidRequest , BAD_REQUEST ;
|
InvalidChatCompletionPreQueryPrompt , InvalidRequest , BAD_REQUEST ;
|
||||||
|
// Render
|
||||||
InvalidRenderTemplate , InvalidRequest , BAD_REQUEST ;
|
InvalidRenderTemplate , InvalidRequest , BAD_REQUEST ;
|
||||||
InvalidRenderTemplateId , InvalidRequest , BAD_REQUEST ;
|
InvalidRenderTemplateId , InvalidRequest , BAD_REQUEST ;
|
||||||
InvalidRenderTemplateInline , InvalidRequest , BAD_REQUEST ;
|
InvalidRenderTemplateInline , InvalidRequest , BAD_REQUEST ;
|
||||||
|
@ -6,7 +6,7 @@ use index_scheduler::IndexScheduler;
|
|||||||
use itertools::structs;
|
use itertools::structs;
|
||||||
use meilisearch_types::deserr::query_params::Param;
|
use meilisearch_types::deserr::query_params::Param;
|
||||||
use meilisearch_types::deserr::{DeserrJsonError, DeserrQueryParamError};
|
use meilisearch_types::deserr::{DeserrJsonError, DeserrQueryParamError};
|
||||||
use meilisearch_types::error::deserr_codes::*;
|
use meilisearch_types::error::{deserr_codes::*, Code};
|
||||||
use meilisearch_types::error::ResponseError;
|
use meilisearch_types::error::ResponseError;
|
||||||
use meilisearch_types::index_uid::IndexUid;
|
use meilisearch_types::index_uid::IndexUid;
|
||||||
use meilisearch_types::keys::actions;
|
use meilisearch_types::keys::actions;
|
||||||
@ -28,21 +28,19 @@ use crate::search::{
|
|||||||
|
|
||||||
#[derive(OpenApi)]
|
#[derive(OpenApi)]
|
||||||
#[openapi(
|
#[openapi(
|
||||||
paths(render),
|
paths(render_post),
|
||||||
tags(
|
tags((
|
||||||
(
|
name = "Render templates",
|
||||||
name = "Render templates",
|
description = "The /render route allows rendering templates used by Meilisearch.",
|
||||||
description = "The /render route allows rendering templates used by Meilisearch.",
|
external_docs(url = "https://www.meilisearch.com/docs/reference/api/render"),
|
||||||
external_docs(url = "https://www.meilisearch.com/docs/reference/api/render"),
|
)),
|
||||||
),
|
|
||||||
),
|
|
||||||
)]
|
)]
|
||||||
pub struct RenderApi;
|
pub struct RenderApi;
|
||||||
|
|
||||||
pub fn configure(cfg: &mut web::ServiceConfig) {
|
pub fn configure(cfg: &mut web::ServiceConfig) {
|
||||||
cfg.service(
|
cfg.service(
|
||||||
web::resource("")
|
web::resource("")
|
||||||
.route(web::post().to(SeqHandler(render)))
|
.route(web::post().to(SeqHandler(render_post)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,7 +49,7 @@ pub fn configure(cfg: &mut web::ServiceConfig) {
|
|||||||
post,
|
post,
|
||||||
path = "{indexUid}/render",
|
path = "{indexUid}/render",
|
||||||
tag = "Render templates",
|
tag = "Render templates",
|
||||||
security(("Bearer" = ["templates.render", "*.get", "*"])),
|
security(("Bearer" = ["settings.get", "settings.*", "*.get", "*"])),
|
||||||
params(("indexUid" = String, Path, example = "movies", description = "Index Unique Identifier", nullable = false)),
|
params(("indexUid" = String, Path, example = "movies", description = "Index Unique Identifier", nullable = false)),
|
||||||
request_body = RenderQuery,
|
request_body = RenderQuery,
|
||||||
responses(
|
responses(
|
||||||
@ -78,8 +76,8 @@ pub fn configure(cfg: &mut web::ServiceConfig) {
|
|||||||
)),
|
)),
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
pub async fn render(
|
pub async fn render_post(
|
||||||
index_scheduler: GuardedData<ActionPolicy<{ actions::SEARCH }>, Data<IndexScheduler>>,
|
index_scheduler: GuardedData<ActionPolicy<{ actions::SETTINGS_GET }>, Data<IndexScheduler>>,
|
||||||
index_uid: web::Path<String>,
|
index_uid: web::Path<String>,
|
||||||
params: AwebJson<RenderQuery, DeserrJsonError>,
|
params: AwebJson<RenderQuery, DeserrJsonError>,
|
||||||
req: HttpRequest,
|
req: HttpRequest,
|
||||||
@ -92,17 +90,43 @@ pub async fn render(
|
|||||||
|
|
||||||
//let mut aggregate = SimilarAggregator::<SimilarPOST>::from_query(&query);
|
//let mut aggregate = SimilarAggregator::<SimilarPOST>::from_query(&query);
|
||||||
|
|
||||||
let rendered = RenderResult {
|
let result = render(query).await?;
|
||||||
rendered: String::from("TODO")
|
|
||||||
};
|
|
||||||
|
|
||||||
// if let Ok(similar) = &similar {
|
// if let Ok(similar) = &similar {
|
||||||
// aggregate.succeed(similar);
|
// aggregate.succeed(similar);
|
||||||
// }
|
// }
|
||||||
// analytics.publish(aggregate, &req);
|
// analytics.publish(aggregate, &req);
|
||||||
|
|
||||||
debug!(returns = ?rendered, "Render template");
|
debug!(returns = ?result, "Render template");
|
||||||
Ok(HttpResponse::Ok().json(rendered))
|
Ok(HttpResponse::Ok().json(result))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
enum RenderError {
|
||||||
|
TemplateBothInlineAndId,
|
||||||
|
}
|
||||||
|
|
||||||
|
use RenderError::*;
|
||||||
|
|
||||||
|
impl From<RenderError> for ResponseError {
|
||||||
|
fn from(error: RenderError) -> Self {
|
||||||
|
match error {
|
||||||
|
TemplateBothInlineAndId => ResponseError::from_msg(
|
||||||
|
"Cannot provide both an inline template and a template ID.".to_string(),
|
||||||
|
Code::InvalidRenderTemplate,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn render(query: RenderQuery) -> Result<RenderResult, RenderError> {
|
||||||
|
if query.template.inline.is_some() && query.template.id.is_some() {
|
||||||
|
return Err(TemplateBothInlineAndId);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(RenderResult {
|
||||||
|
rendered: String::from("TODO: Implement render logic here")
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Deserr, ToSchema)]
|
#[derive(Debug, Clone, PartialEq, Deserr, ToSchema)]
|
||||||
|
Reference in New Issue
Block a user