Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 36 additions & 2 deletions src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use crate::{
key::{Key, KeyBuilder, KeyUpdater, KeysQuery, KeysResults},
request::*,
task_info::TaskInfo,
tasks::{Task, TasksCancelQuery, TasksResults, TasksSearchQuery},
tasks::{Task, TasksCancelQuery, TasksDeleteQuery, TasksResults, TasksSearchQuery},
utils::async_sleep,
};
use serde::Deserialize;
Expand Down Expand Up @@ -788,7 +788,7 @@ impl Client {
/// # let client = client::Client::new(MEILISEARCH_URL, MEILISEARCH_API_KEY);
///
/// let mut query = tasks::TasksCancelQuery::new(&client);
/// query.with_index_uids(["get_tasks_with"]);
/// query.with_index_uids(["movies"]);
///
/// let res = client.cancel_tasks_with(&query).await.unwrap();
/// # });
Expand All @@ -811,6 +811,40 @@ impl Client {
Ok(tasks)
}

/// Delete tasks with filters [TasksDeleteQuery]
///
/// # Example
///
/// ```
/// # use meilisearch_sdk::*;
/// #
/// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
/// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
/// #
/// # futures::executor::block_on(async move {
/// # let client = client::Client::new(MEILISEARCH_URL, MEILISEARCH_API_KEY);
///
/// let mut query = tasks::TasksDeleteQuery::new(&client);
/// query.with_index_uids(["movies"]);
///
/// let res = client.delete_tasks_with(&query).await.unwrap();
/// # });
/// ```
pub async fn delete_tasks_with(
&self,
filters: &TasksDeleteQuery<'_>,
) -> Result<TaskInfo, Error> {
let tasks = request::<&TasksDeleteQuery, (), TaskInfo>(
&format!("{}/tasks", self.host),
&self.api_key,
Method::Delete { query: filters },
200,
)
.await?;

Ok(tasks)
}

/// Get all tasks from the server.
///
/// # Example
Expand Down
84 changes: 82 additions & 2 deletions src/tasks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@ pub enum TaskType {
details: Option<DumpCreation>,
},
TaskCancelation {
details: Option<DumpCreation>,
details: Option<TaskCancelation>,
},
TaskDeletion {
details: Option<TaskDeletion>,
},
}

Expand Down Expand Up @@ -87,7 +90,15 @@ pub struct DumpCreation {
pub struct TaskCancelation {
pub matched_tasks: usize,
pub canceled_tasks: usize,
pub original_filters: usize,
pub original_filters: String,
}

#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TaskDeletion {
pub matched_tasks: usize,
pub deleted_tasks: usize,
pub original_filters: String,
}

#[derive(Deserialize, Debug, Clone)]
Expand Down Expand Up @@ -424,8 +435,12 @@ pub struct TasksPaginationFilters {
#[derive(Debug, Serialize, Clone)]
pub struct TasksCancelFilters {}

#[derive(Debug, Serialize, Clone)]
pub struct TasksDeleteFilters {}

pub type TasksSearchQuery<'a> = TasksQuery<'a, TasksPaginationFilters>;
pub type TasksCancelQuery<'a> = TasksQuery<'a, TasksCancelFilters>;
pub type TasksDeleteQuery<'a> = TasksQuery<'a, TasksDeleteFilters>;

#[derive(Debug, Serialize, Clone)]
#[serde(rename_all = "camelCase")]
Expand Down Expand Up @@ -582,6 +597,29 @@ impl<'a> TasksQuery<'a, TasksCancelFilters> {
}
}

impl<'a> TasksQuery<'a, TasksDeleteFilters> {
pub fn new(client: &'a Client) -> TasksQuery<'a, TasksDeleteFilters> {
TasksQuery {
client,
index_uids: None,
statuses: None,
task_types: None,
uids: None,
before_enqueued_at: None,
after_enqueued_at: None,
before_started_at: None,
after_started_at: None,
before_finished_at: None,
after_finished_at: None,
pagination: TasksDeleteFilters {},
}
}

pub async fn execute(&'a self) -> Result<TaskInfo, Error> {
self.client.delete_tasks_with(self).await
}
}

impl<'a> TasksQuery<'a, TasksPaginationFilters> {
pub fn new(client: &'a Client) -> TasksQuery<'a, TasksPaginationFilters> {
TasksQuery {
Expand Down Expand Up @@ -973,4 +1011,46 @@ mod test {
mock_res.assert();
Ok(())
}

#[meilisearch_test]
async fn test_delete_tasks_with_params() -> Result<(), Error> {
let mock_server_url = &mockito::server_url();
let client = Client::new(mock_server_url, "masterKey");
let path = "/tasks?indexUids=movies,test&statuses=equeued&types=documentDeletion&uids=1";

let mock_res = mock("DELETE", path).with_status(200).create();

let mut query = TasksDeleteQuery::new(&client);
query
.with_index_uids(["movies", "test"])
.with_statuses(["equeued"])
.with_types(["documentDeletion"])
.with_uids([&1]);

let _ = client.delete_tasks_with(&query).await;

mock_res.assert();
Ok(())
}

#[meilisearch_test]
async fn test_delete_tasks_with_params_execute() -> Result<(), Error> {
let mock_server_url = &mockito::server_url();
let client = Client::new(mock_server_url, "masterKey");
let path = "/tasks?indexUids=movies,test&statuses=equeued&types=documentDeletion&uids=1";

let mock_res = mock("DELETE", path).with_status(200).create();

let mut query = TasksDeleteQuery::new(&client);
let _ = query
.with_index_uids(["movies", "test"])
.with_statuses(["equeued"])
.with_types(["documentDeletion"])
.with_uids([&1])
.execute()
.await;

mock_res.assert();
Ok(())
}
}