use reqwest::Method;
use serde_json::json;
use crate::{
core::{
api_resp::BaseResponse, config::Config, constants::AccessTokenType, http::Transport,
req_option::RequestOption, SDKResult,
},
impl_executable_builder_owned,
};
use super::models::{
QueryStatsFieldsRequest, QueryStatsFieldsRespData, QueryStatsSettingsRequest,
QueryStatsSettingsRespData, QueryUserStatsDataRequest, QueryUserStatsDataRespData,
UpdateUserStatsDataRequest, UpdateUserStatsDataRespData,
};
pub struct UserStatsDataService {
pub config: Config,
}
impl UserStatsDataService {
pub async fn update(
&self,
request: UpdateUserStatsDataRequest,
option: Option<RequestOption>,
) -> SDKResult<BaseResponse<UpdateUserStatsDataRespData>> {
let mut api_req = request.api_req;
api_req.http_method = Method::POST;
api_req.api_path = "/open-apis/attendance/v1/user_stats_datas/update".to_string();
api_req.supported_access_token_types = vec![AccessTokenType::Tenant];
api_req
.query_params
.insert("employee_type".to_string(), request.employee_type);
let body = json!({
"stats_setting": request.stats_setting
});
api_req.body = serde_json::to_vec(&body)?;
let api_resp = Transport::request(api_req, &self.config, option).await?;
Ok(api_resp)
}
pub async fn query_settings(
&self,
request: QueryStatsSettingsRequest,
option: Option<RequestOption>,
) -> SDKResult<BaseResponse<QueryStatsSettingsRespData>> {
let mut api_req = request.api_req;
api_req.http_method = Method::GET;
api_req.api_path = "/open-apis/attendance/v1/user_stats_datas/query".to_string();
api_req.supported_access_token_types = vec![AccessTokenType::Tenant];
api_req
.query_params
.insert("employee_type".to_string(), request.employee_type);
let api_resp = Transport::request(api_req, &self.config, option).await?;
Ok(api_resp)
}
pub async fn query_fields(
&self,
request: QueryStatsFieldsRequest,
option: Option<RequestOption>,
) -> SDKResult<BaseResponse<QueryStatsFieldsRespData>> {
let mut api_req = request.api_req;
api_req.http_method = Method::GET;
api_req.api_path = "/open-apis/attendance/v1/user_stats_datas/query_fields".to_string();
api_req.supported_access_token_types = vec![AccessTokenType::Tenant];
api_req
.query_params
.insert("employee_type".to_string(), request.employee_type);
if let Some(locale) = request.locale {
api_req.query_params.insert("locale".to_string(), locale);
}
let api_resp = Transport::request(api_req, &self.config, option).await?;
Ok(api_resp)
}
pub async fn query_data(
&self,
request: QueryUserStatsDataRequest,
option: Option<RequestOption>,
) -> SDKResult<BaseResponse<QueryUserStatsDataRespData>> {
let mut api_req = request.api_req;
api_req.http_method = Method::POST;
api_req.api_path = "/open-apis/attendance/v1/user_stats_datas/query_data".to_string();
api_req.supported_access_token_types = vec![AccessTokenType::Tenant];
api_req
.query_params
.insert("employee_type".to_string(), request.employee_type);
if let Some(locale) = request.locale {
api_req.query_params.insert("locale".to_string(), locale);
}
let body = json!({
"start_date": request.start_date,
"end_date": request.end_date,
"user_ids": request.user_ids,
"need_fields": request.need_fields
});
api_req.body = serde_json::to_vec(&body)?;
let api_resp = Transport::request(api_req, &self.config, option).await?;
Ok(api_resp)
}
}
impl_executable_builder_owned!(
UpdateUserStatsDataRequest,
UserStatsDataService,
UpdateUserStatsDataRequest,
BaseResponse<UpdateUserStatsDataRespData>,
update
);
impl_executable_builder_owned!(
QueryStatsSettingsRequest,
UserStatsDataService,
QueryStatsSettingsRequest,
BaseResponse<QueryStatsSettingsRespData>,
query_settings
);
impl_executable_builder_owned!(
QueryStatsFieldsRequest,
UserStatsDataService,
QueryStatsFieldsRequest,
BaseResponse<QueryStatsFieldsRespData>,
query_fields
);
impl_executable_builder_owned!(
QueryUserStatsDataRequest,
UserStatsDataService,
QueryUserStatsDataRequest,
BaseResponse<QueryUserStatsDataRespData>,
query_data
);