use serde::{Serialize, Deserialize};
use serde_json::{Value};
use crate::{session::SessionStore, request::{RequestType}, WechatCommonResponse, LabradorResult, WechatCpClient};
use crate::wechat::cp::method::{CpDepartmentMethod, WechatCpMethod};
#[derive(Debug, Clone)]
pub struct WechatCpDepartment<'a, T: SessionStore> {
client: &'a WechatCpClient<T>,
}
#[allow(unused)]
impl<'a, T: SessionStore> WechatCpDepartment<'a, T> {
#[inline]
pub fn new(client: &WechatCpClient<T>) -> WechatCpDepartment<T> {
WechatCpDepartment {
client,
}
}
pub async fn create(&self, req: WechatCpDepartInfo) -> LabradorResult<i64> {
let v = self.client.post(WechatCpMethod::Department(CpDepartmentMethod::Create), vec![], req, RequestType::Json).await?.json::<Value>()?;
let v = WechatCommonResponse::parse::<Value>(v)?;
let tag_id = v["id"].as_i64().unwrap_or_default();
Ok(tag_id)
}
pub async fn simple_list(&self, id: Option<i64>) -> LabradorResult<WechatCpDepartSimpleResponse> {
let mut query = vec![];
if let Some(id) = id {
query.push(("id".to_string(), id.to_string()));
}
let v = self.client.get(WechatCpMethod::Department(CpDepartmentMethod::SimpleList), query, RequestType::Json).await?.json::<Value>()?;
WechatCommonResponse::parse::<WechatCpDepartSimpleResponse>(v)
}
pub async fn list(&self, id: Option<i64>) -> LabradorResult<WechatCpDepartResponse> {
let mut query = vec![];
if let Some(id) = id {
query.push(("id".to_string(), id.to_string()));
}
let v = self.client.get(WechatCpMethod::Department(CpDepartmentMethod::List), query, RequestType::Json).await?.json::<Value>()?;
WechatCommonResponse::parse::<WechatCpDepartResponse>(v)
}
pub async fn update(&self, req: WechatCpDepartInfo) -> LabradorResult<WechatCommonResponse> {
self.client.post(WechatCpMethod::Department(CpDepartmentMethod::Update), vec![], req, RequestType::Json).await?.json::<WechatCommonResponse>()
}
pub async fn delete(&self, depart_id: i64) -> LabradorResult<WechatCommonResponse> {
self.client.get(WechatCpMethod::Department(CpDepartmentMethod::Delete(depart_id)), vec![], RequestType::Json).await?.json::<WechatCommonResponse>()
}
}
#[derive(Debug, Clone,Serialize, Deserialize)]
pub struct WechatCpDepartInfo {
pub id: Option<i32>,
pub name: Option<String>,
pub en_name: Option<String>,
pub parentid: Option<i32>,
pub order: Option<i32>,
}
#[derive(Debug, Clone,Serialize, Deserialize)]
pub struct WechatCpDepartResponse {
pub department: Vec<WechatCpDepartInfo>,
}
#[derive(Debug, Clone,Serialize, Deserialize)]
pub struct WechatCpDepartSimpleResponse {
pub department_id: Vec<WechatCpDepartInfo>,
}