feat: add apps endpoint with list, get, and batch-get methods
Implement App model and three endpoint methods: list_apps (paginated), get_app (by ID), and batch_get_apps (up to 100 by IDs). Add comprehensive tests for success, pagination, not-found, and batch scenarios.
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
use reqwest::Method;
|
||||
|
||||
use crate::client::OnspringClient;
|
||||
use crate::error::Result;
|
||||
use crate::models::{App, CollectionResponse, PagedResponse, PagingRequest};
|
||||
|
||||
impl OnspringClient {
|
||||
/// Gets all apps for the current client, with optional pagination.
|
||||
pub async fn list_apps(&self, paging: Option<PagingRequest>) -> Result<PagedResponse<App>> {
|
||||
let mut query = Vec::new();
|
||||
if let Some(p) = paging {
|
||||
query.push(("PageNumber", p.page_number.to_string()));
|
||||
query.push(("PageSize", p.page_size.to_string()));
|
||||
}
|
||||
let query_refs: Vec<(&str, String)> = query.iter().map(|(k, v)| (*k, v.clone())).collect();
|
||||
self.request(Method::GET, "/Apps", &query_refs, Option::<&()>::None)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Gets an app by its identifier.
|
||||
pub async fn get_app(&self, app_id: i32) -> Result<App> {
|
||||
let path = format!("/Apps/id/{}", app_id);
|
||||
self.request(Method::GET, &path, &[], Option::<&()>::None)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Gets up to 100 apps by their identifiers.
|
||||
pub async fn batch_get_apps(&self, ids: &[i32]) -> Result<CollectionResponse<App>> {
|
||||
self.request(Method::POST, "/Apps/batch-get", &[], Some(&ids))
|
||||
.await
|
||||
}
|
||||
}
|
||||
@@ -1 +1,2 @@
|
||||
mod apps;
|
||||
mod ping;
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
use serde::Deserialize;
|
||||
|
||||
/// Represents an Onspring application.
|
||||
#[derive(Debug, Clone, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct App {
|
||||
pub href: Option<String>,
|
||||
pub id: i32,
|
||||
pub name: Option<String>,
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
mod app;
|
||||
mod enums;
|
||||
mod paging;
|
||||
|
||||
pub use app::*;
|
||||
pub use enums::*;
|
||||
pub use paging::*;
|
||||
|
||||
Reference in New Issue
Block a user