use crate::client::ZtkClient;
use crate::common::http::build_params_with_appkey;
use crate::error::ZtkResult;
use super::request::{
VipAuthorizeListRequest, VipAuthorizeRequest, VipConvertRequest, VipGoodsDetailRequest,
VipOrderQueryRequest, VipSearchGoodsRequest,
};
use super::response::{
VipAuthorizeListResponse, VipAuthorizeResponse, VipConvertResponse, VipGoodsDetailResponse,
VipOrderResponse, VipSearchGoodsResponse,
};
pub struct VipApi<'a> {
client: &'a ZtkClient,
}
impl<'a> VipApi<'a> {
pub fn new(client: &'a ZtkClient) -> Self {
Self { client }
}
#[allow(dead_code)]
pub(crate) fn client(&self) -> &ZtkClient {
self.client
}
pub async fn convert(&self, request: VipConvertRequest) -> ZtkResult<VipConvertResponse> {
let params = build_params_with_appkey(self.client.appkey(), &request)?;
self.client
.http_client()
.get("/api/open_vip_genByVIPUrlWithOauth.ashx", ¶ms)
.await
}
pub async fn authorize(&self, request: VipAuthorizeRequest) -> ZtkResult<VipAuthorizeResponse> {
let params = build_params_with_appkey(self.client.appkey(), &request)?;
self.client
.http_client()
.get("/api/vip_shouquan.ashx", ¶ms)
.await
}
pub async fn authorize_list(
&self,
request: VipAuthorizeListRequest,
) -> ZtkResult<VipAuthorizeListResponse> {
let params = build_params_with_appkey(self.client.appkey(), &request)?;
self.client
.http_client()
.get("/api/vip_shouquaninfo.ashx", ¶ms)
.await
}
pub async fn query_orders(&self, request: VipOrderQueryRequest) -> ZtkResult<VipOrderResponse> {
let params = build_params_with_appkey(self.client.appkey(), &request)?;
self.client
.http_client()
.get("/api/open_vip_orderListWithOauth.ashx", ¶ms)
.await
}
pub async fn goods_detail(
&self,
request: VipGoodsDetailRequest,
) -> ZtkResult<VipGoodsDetailResponse> {
let params = build_params_with_appkey(self.client.appkey(), &request)?;
self.client
.http_client()
.get("/api/open_vip_getByGoodsIdsV2WithOauth.ashx", ¶ms)
.await
}
pub async fn search_goods(
&self,
request: VipSearchGoodsRequest,
) -> ZtkResult<VipSearchGoodsResponse> {
let params = build_params_with_appkey(self.client.appkey(), &request)?;
self.client
.http_client()
.get("/api/open_vip_queryWithOauth.ashx", ¶ms)
.await
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_vip_api_creation() {
let client = ZtkClient::new("test_appkey").build().unwrap();
let vip = client.vip();
assert_eq!(vip.client().appkey(), "test_appkey");
}
}