Skip to content

Commit d90926f

Browse files
committed
Add delete tasks for v0.30.0
1 parent 19685e7 commit d90926f

File tree

2 files changed

+118
-4
lines changed

2 files changed

+118
-4
lines changed

src/client.rs

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::{
44
key::{Key, KeyBuilder, KeyUpdater, KeysQuery, KeysResults},
55
request::*,
66
task_info::TaskInfo,
7-
tasks::{Task, TasksCancelQuery, TasksResults, TasksSearchQuery},
7+
tasks::{Task, TasksCancelQuery, TasksDeleteQuery, TasksResults, TasksSearchQuery},
88
utils::async_sleep,
99
};
1010
use serde::Deserialize;
@@ -788,7 +788,7 @@ impl Client {
788788
/// # let client = client::Client::new(MEILISEARCH_URL, MEILISEARCH_API_KEY);
789789
///
790790
/// let mut query = tasks::TasksCancelQuery::new(&client);
791-
/// query.with_index_uids(["get_tasks_with"]);
791+
/// query.with_index_uids(["movies"]);
792792
///
793793
/// let res = client.cancel_tasks_with(&query).await.unwrap();
794794
/// # });
@@ -811,6 +811,40 @@ impl Client {
811811
Ok(tasks)
812812
}
813813

814+
/// Delete tasks with filters [TasksDeleteQuery]
815+
///
816+
/// # Example
817+
///
818+
/// ```
819+
/// # use meilisearch_sdk::*;
820+
/// #
821+
/// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
822+
/// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
823+
/// #
824+
/// # futures::executor::block_on(async move {
825+
/// # let client = client::Client::new(MEILISEARCH_URL, MEILISEARCH_API_KEY);
826+
///
827+
/// let mut query = tasks::TasksDeleteQuery::new(&client);
828+
/// query.with_index_uids(["movies"]);
829+
///
830+
/// let res = client.delete_tasks_with(&query).await.unwrap();
831+
/// # });
832+
/// ```
833+
pub async fn delete_tasks_with(
834+
&self,
835+
filters: &TasksDeleteQuery<'_>,
836+
) -> Result<TaskInfo, Error> {
837+
let tasks = request::<&TasksDeleteQuery, (), TaskInfo>(
838+
&format!("{}/tasks", self.host),
839+
&self.api_key,
840+
Method::Delete { query: filters },
841+
200,
842+
)
843+
.await?;
844+
845+
Ok(tasks)
846+
}
847+
814848
/// Get all tasks from the server.
815849
///
816850
/// # Example

src/tasks.rs

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ pub enum TaskType {
3333
details: Option<DumpCreation>,
3434
},
3535
TaskCancelation {
36-
details: Option<DumpCreation>,
36+
details: Option<TaskCancelation>,
37+
},
38+
TaskDeletion {
39+
details: Option<TaskDeletion>,
3740
},
3841
}
3942

@@ -87,7 +90,15 @@ pub struct DumpCreation {
8790
pub struct TaskCancelation {
8891
pub matched_tasks: usize,
8992
pub canceled_tasks: usize,
90-
pub original_filters: usize,
93+
pub original_filters: String,
94+
}
95+
96+
#[derive(Debug, Clone, Deserialize)]
97+
#[serde(rename_all = "camelCase")]
98+
pub struct TaskDeletion {
99+
pub matched_tasks: usize,
100+
pub deleted_tasks: usize,
101+
pub original_filters: String,
91102
}
92103

93104
#[derive(Deserialize, Debug, Clone)]
@@ -424,8 +435,12 @@ pub struct TasksPaginationFilters {
424435
#[derive(Debug, Serialize, Clone)]
425436
pub struct TasksCancelFilters {}
426437

438+
#[derive(Debug, Serialize, Clone)]
439+
pub struct TasksDeleteFilters {}
440+
427441
pub type TasksSearchQuery<'a> = TasksQuery<'a, TasksPaginationFilters>;
428442
pub type TasksCancelQuery<'a> = TasksQuery<'a, TasksCancelFilters>;
443+
pub type TasksDeleteQuery<'a> = TasksQuery<'a, TasksDeleteFilters>;
429444

430445
#[derive(Debug, Serialize, Clone)]
431446
#[serde(rename_all = "camelCase")]
@@ -582,6 +597,29 @@ impl<'a> TasksQuery<'a, TasksCancelFilters> {
582597
}
583598
}
584599

600+
impl<'a> TasksQuery<'a, TasksDeleteFilters> {
601+
pub fn new(client: &'a Client) -> TasksQuery<'a, TasksDeleteFilters> {
602+
TasksQuery {
603+
client,
604+
index_uids: None,
605+
statuses: None,
606+
task_types: None,
607+
uids: None,
608+
before_enqueued_at: None,
609+
after_enqueued_at: None,
610+
before_started_at: None,
611+
after_started_at: None,
612+
before_finished_at: None,
613+
after_finished_at: None,
614+
pagination: TasksDeleteFilters {},
615+
}
616+
}
617+
618+
pub async fn execute(&'a self) -> Result<TaskInfo, Error> {
619+
self.client.delete_tasks_with(self).await
620+
}
621+
}
622+
585623
impl<'a> TasksQuery<'a, TasksPaginationFilters> {
586624
pub fn new(client: &'a Client) -> TasksQuery<'a, TasksPaginationFilters> {
587625
TasksQuery {
@@ -973,4 +1011,46 @@ mod test {
9731011
mock_res.assert();
9741012
Ok(())
9751013
}
1014+
1015+
#[meilisearch_test]
1016+
async fn test_delete_tasks_with_params() -> Result<(), Error> {
1017+
let mock_server_url = &mockito::server_url();
1018+
let client = Client::new(mock_server_url, "masterKey");
1019+
let path = "/tasks?indexUids=movies,test&statuses=equeued&types=documentDeletion&uids=1";
1020+
1021+
let mock_res = mock("DELETE", path).with_status(200).create();
1022+
1023+
let mut query = TasksDeleteQuery::new(&client);
1024+
query
1025+
.with_index_uids(["movies", "test"])
1026+
.with_statuses(["equeued"])
1027+
.with_types(["documentDeletion"])
1028+
.with_uids([&1]);
1029+
1030+
let _ = client.delete_tasks_with(&query).await;
1031+
1032+
mock_res.assert();
1033+
Ok(())
1034+
}
1035+
1036+
#[meilisearch_test]
1037+
async fn test_delete_tasks_with_params_execute() -> Result<(), Error> {
1038+
let mock_server_url = &mockito::server_url();
1039+
let client = Client::new(mock_server_url, "masterKey");
1040+
let path = "/tasks?indexUids=movies,test&statuses=equeued&types=documentDeletion&uids=1";
1041+
1042+
let mock_res = mock("DELETE", path).with_status(200).create();
1043+
1044+
let mut query = TasksDeleteQuery::new(&client);
1045+
let _ = query
1046+
.with_index_uids(["movies", "test"])
1047+
.with_statuses(["equeued"])
1048+
.with_types(["documentDeletion"])
1049+
.with_uids([&1])
1050+
.execute()
1051+
.await;
1052+
1053+
mock_res.assert();
1054+
Ok(())
1055+
}
9761056
}

0 commit comments

Comments
 (0)