diff --git a/apps/labrinth/src/routes/internal/mod.rs b/apps/labrinth/src/routes/internal/mod.rs index 08ca8fa21..13db90924 100644 --- a/apps/labrinth/src/routes/internal/mod.rs +++ b/apps/labrinth/src/routes/internal/mod.rs @@ -10,6 +10,7 @@ pub mod medal; pub mod moderation; pub mod mural; pub mod pats; +pub mod search; pub mod session; pub mod statuses; @@ -49,5 +50,10 @@ pub fn utoipa_config( utoipa_actix_web::scope("/_internal/affiliate") .wrap(default_cors()) .configure(affiliate::config), + ) + .service( + utoipa_actix_web::scope("/_internal/search-management") + .wrap(default_cors()) + .configure(search::config), ); } diff --git a/apps/labrinth/src/routes/internal/search.rs b/apps/labrinth/src/routes/internal/search.rs new file mode 100644 index 000000000..43bd21ecd --- /dev/null +++ b/apps/labrinth/src/routes/internal/search.rs @@ -0,0 +1,121 @@ +use crate::routes::ApiError; +use crate::search::SearchConfig; +use crate::util::guards::admin_key_guard; +use actix_web::{HttpResponse, delete, get, web}; +use meilisearch_sdk::tasks::{Task, TasksCancelQuery}; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::time::Duration; +use utoipa::ToSchema; + +pub fn config(cfg: &mut utoipa_actix_web::service_config::ServiceConfig) { + cfg.service(tasks).service(tasks_cancel); +} + +#[utoipa::path] +#[get("tasks", guard = "admin_key_guard")] +pub async fn tasks( + config: web::Data, +) -> Result { + let client = config.make_batch_client()?; + let tasks = client + .with_all_clients("get_tasks", async |client| { + let tasks = client.get_tasks().await?; + + Ok(tasks.results) + }) + .await?; + + #[derive(Serialize, ToSchema)] + struct MeiliTask