use crate::client::{path_escape, Query};
use crate::error::Result;
use crate::types::*;
use std::sync::Arc;
pub struct OrganizationModule {
client: Arc<crate::client::TapsilatClient>,
}
impl OrganizationModule {
pub fn new(client: Arc<crate::client::TapsilatClient>) -> Self {
Self { client }
}
pub fn get_settings(&self) -> Result<serde_json::Value> {
self.client
.make_request::<()>("GET", "organization/settings", None)
}
pub fn settings(&self) -> Result<OrganizationSettings> {
self.client
.request::<(), _>("GET", "organization/settings", None)
}
pub fn get_callback(&self) -> Result<serde_json::Value> {
self.client
.make_request::<()>("GET", "organization/callback", None)
}
pub fn update_callback(&self, request: CallbackURLDTO) -> Result<serde_json::Value> {
self.client
.make_request("PATCH", "organization/callback", Some(&request))
}
pub fn create_business(&self, request: OrgCreateBusinessRequest) -> Result<serde_json::Value> {
self.client
.make_request("POST", "organization/business/create", Some(&request))
}
pub fn get_currencies(&self) -> Result<serde_json::Value> {
self.client
.make_request::<()>("GET", "organization/currencies", None)
}
pub fn currencies(&self) -> Result<OrganizationCurrenciesResponse> {
self.client
.request::<(), _>("GET", "organization/currencies", None)
}
pub fn list_currency_presets(&self) -> Result<OrganizationCurrencyPresetsResponse> {
self.client
.request::<(), _>("GET", "organization/currency-presets", None)
}
pub fn create_currency(
&self,
currency_code: &str,
) -> Result<CreateOrganizationCurrencyResponse> {
let payload = serde_json::json!({ "currency_code": currency_code.trim().to_uppercase() });
let response = self
.client
.request("POST", "organization/currencies", Some(&payload))?;
self.client.invalidate_currency_cache();
Ok(response)
}
#[deprecated(note = "the API has no organization user limit route; this request always fails")]
pub fn get_limit_user(&self, user_id: &str) -> Result<serde_json::Value> {
let endpoint = Query::new()
.set("user_id", user_id)
.append_to("organization/limit/user");
self.client.make_request::<()>("GET", &endpoint, None)
}
#[deprecated(note = "the API has no organization user limit route; this request always fails")]
pub fn set_limit_user(&self, request: SetLimitUserRequest) -> Result<serde_json::Value> {
self.client
.make_request("POST", "organization/limit/user", Some(&request))
}
#[deprecated(note = "use get_limits_by_id; the limits route needs an organization ID")]
pub fn get_limits(&self) -> Result<serde_json::Value> {
self.client
.make_request::<()>("GET", "organization/limits", None)
}
pub fn get_limits_by_id(&self, organization_id: &str) -> Result<serde_json::Value> {
let endpoint = format!("organization/{}/limits", path_escape(organization_id));
self.client.make_request::<()>("GET", &endpoint, None)
}
pub fn list_vpos(&self, currency_id: &str) -> Result<serde_json::Value> {
let payload = serde_json::json!({ "currency_id": currency_id });
self.client
.make_request("POST", "organization/list-vpos", Some(&payload))
}
pub fn get_meta(&self, name: &str) -> Result<serde_json::Value> {
let endpoint = format!("organization/metas/{}", path_escape(name));
self.client.make_request::<()>("GET", &endpoint, None)
}
pub fn get_scopes(&self) -> Result<serde_json::Value> {
self.client
.make_request::<()>("GET", "organization/scopes", None)
}
pub fn get_suborganizations(&self, page: u32, per_page: u32) -> Result<serde_json::Value> {
let endpoint = Query::new()
.set("page", page)
.set("per_page", per_page)
.append_to("organization/suborganizations");
self.client.make_request::<()>("GET", &endpoint, None)
}
pub fn list_suborganizations(
&self,
page: u32,
per_page: u32,
) -> Result<SuborganizationListResponse> {
let value = self.get_suborganizations(page, per_page)?;
Ok(serde_json::from_value(value)?)
}
pub fn get_suborganization_detail(&self, id: &str) -> Result<SuborganizationDetail> {
let endpoint = format!("organization/suborganizations/{}", path_escape(id));
self.client.request::<(), _>("GET", &endpoint, None)
}
pub fn get_suborganization_submerchant(
&self,
suborganization_id: &str,
) -> Result<SuborganizationSubmerchantMapping> {
let endpoint = format!(
"organization/suborganizations/{}/submerchant",
path_escape(suborganization_id)
);
self.client.request::<(), _>("GET", &endpoint, None)
}
pub fn create_user(&self, request: OrgCreateUserReq) -> Result<serde_json::Value> {
self.client
.make_request("POST", "organization/user/create", Some(&request))
}
pub fn create_user_token(
&self,
request: OrgUserTokenCreateRequest,
) -> Result<OrgUserTokenCreateResponse> {
self.client
.request("POST", "organization/user/token", Some(&request))
}
pub fn verify_user(&self, user_id: &str) -> Result<serde_json::Value> {
let payload = serde_json::json!({ "user_id": user_id });
self.client
.make_request("POST", "organization/user/verify", Some(&payload))
}
pub fn verify_user_mobile(&self, user_id: &str) -> Result<serde_json::Value> {
let payload = serde_json::json!({ "user_id": user_id });
self.client
.make_request("POST", "organization/user/verify-mobile", Some(&payload))
}
}