use actix_web::{web, HttpRequest, HttpResponse}; use log::debug; use meilisearch_error::ResponseError; use meilisearch_lib::MeiliSearch; use serde::{Deserialize, Serialize}; use serde_json::json; use time::OffsetDateTime; use crate::analytics::Analytics; use crate::extractors::authentication::{policies::*, GuardedData}; use crate::extractors::sequential_extractor::SeqHandler; use crate::task::{TaskListView, TaskView}; pub fn configure(cfg: &mut web::ServiceConfig) { cfg.service(web::resource("").route(web::get().to(SeqHandler(get_all_tasks_status)))) .service(web::resource("{task_id}").route(web::get().to(SeqHandler(get_task_status)))); } #[derive(Debug, Serialize)] #[serde(rename_all = "camelCase")] pub struct UpdateIndexResponse { name: String, uid: String, #[serde(serialize_with = "time::serde::rfc3339::serialize")] created_at: OffsetDateTime, #[serde(serialize_with = "time::serde::rfc3339::serialize")] updated_at: OffsetDateTime, #[serde(serialize_with = "time::serde::rfc3339::serialize")] primary_key: OffsetDateTime, } #[derive(Deserialize)] pub struct UpdateParam { index_uid: String, task_id: u64, } pub async fn get_task_status( meilisearch: GuardedData, MeiliSearch>, index_uid: web::Path, req: HttpRequest, analytics: web::Data, ) -> Result { analytics.publish( "Index Tasks Seen".to_string(), json!({ "per_task_uid": true }), Some(&req), ); let UpdateParam { index_uid, task_id } = index_uid.into_inner(); let task: TaskView = meilisearch.get_index_task(index_uid, task_id).await?.into(); debug!("returns: {:?}", task); Ok(HttpResponse::Ok().json(task)) } pub async fn get_all_tasks_status( meilisearch: GuardedData, MeiliSearch>, index_uid: web::Path, req: HttpRequest, analytics: web::Data, ) -> Result { analytics.publish( "Index Tasks Seen".to_string(), json!({ "per_task_uid": false }), Some(&req), ); let tasks: TaskListView = meilisearch .list_index_task(index_uid.into_inner(), None, None) .await? .into_iter() .map(TaskView::from) .collect::>() .into(); debug!("returns: {:?}", tasks); Ok(HttpResponse::Ok().json(tasks)) }