use reqwest::Method;
use crate::Stream;
use crate::error::Result;
use crate::models::{
DeleteUsersRequest, DeleteUsersResponse, QueryUsersPayload, QueryUsersResponse,
UpdateUserPartialRequest, UpdateUsersPartialRequest, UpdateUsersRequest, UpdateUsersResponse,
UserRequest,
};
impl Stream {
pub async fn upsert_users(
&self,
users: impl IntoIterator<Item = UserRequest>,
) -> Result<UpdateUsersResponse> {
let map = users.into_iter().map(|u| (u.id.clone(), u)).collect();
let body = UpdateUsersRequest { users: map };
self.client()
.request(Method::POST, "/api/v2/users", &[], Some(&body))
.await
}
pub async fn query_users(&self, payload: QueryUsersPayload) -> Result<QueryUsersResponse> {
let encoded = serde_json::to_string(&payload)?;
let query = [("payload".to_string(), encoded)];
self.client()
.request::<(), _>(Method::GET, "/api/v2/users", &query, None)
.await
}
pub async fn update_users_partial(
&self,
users: impl IntoIterator<Item = UpdateUserPartialRequest>,
) -> Result<UpdateUsersResponse> {
let body = UpdateUsersPartialRequest {
users: users.into_iter().collect(),
};
self.client()
.request(Method::PATCH, "/api/v2/users", &[], Some(&body))
.await
}
pub async fn delete_users(&self, request: DeleteUsersRequest) -> Result<DeleteUsersResponse> {
self.client()
.request(Method::POST, "/api/v2/users/delete", &[], Some(&request))
.await
}
}