use openlark_core::{
SDKResult,
api::{ApiRequest, ApiResponseTrait, ResponseFormat},
config::Config,
http::Transport,
req_option::RequestOption,
validate_required, validate_required_list,
};
use serde::{Deserialize, Serialize};
pub struct CreateBadgeGrantRequestBuilder {
badge_id: String,
user_ids: Vec<String>,
config: Config,
}
impl CreateBadgeGrantRequestBuilder {
pub fn new(config: Config) -> Self {
Self {
badge_id: String::new(),
user_ids: Vec::new(),
config,
}
}
pub fn badge_id(mut self, badge_id: impl Into<String>) -> Self {
self.badge_id = badge_id.into();
self
}
pub fn user_ids(mut self, user_ids: Vec<String>) -> Self {
self.user_ids = user_ids;
self
}
pub async fn execute(self) -> SDKResult<CreateBadgeGrantResponse> {
self.execute_with_options(RequestOption::default()).await
}
pub async fn execute_with_options(
self,
option: RequestOption,
) -> SDKResult<CreateBadgeGrantResponse> {
validate_required!(self.badge_id, "勋章ID不能为空");
validate_required_list!(self.user_ids, 50, "用户ID列表不能为空且不能超过 50 个");
let request_body = CreateBadgeGrantRequest {
user_ids: self.user_ids,
};
let api_request: ApiRequest<CreateBadgeGrantResponse> = ApiRequest::post(format!(
"/open-apis/admin/v1/badges/{}/grants",
self.badge_id
))
.body(serde_json::to_value(&request_body)?);
Transport::request_typed(api_request, &self.config, Some(option), "创建勋章授予名单").await
}
}
#[derive(Debug, Serialize)]
struct CreateBadgeGrantRequest {
user_ids: Vec<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CreateBadgeGrantResponse {
pub grant_id: String,
pub badge_id: String,
pub user_ids: Vec<String>,
pub create_time: String,
}
impl ApiResponseTrait for CreateBadgeGrantResponse {
fn data_format() -> ResponseFormat {
ResponseFormat::Data
}
}
#[deprecated(note = "renamed to CreateBadgeGrantRequestBuilder, will be removed in v1.0 (#271)")]
pub type CreateBadgeGrantBuilder = CreateBadgeGrantRequestBuilder;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_builder_basic() {
let config = openlark_core::config::Config::builder()
.app_id("test_app")
.app_secret("test_secret")
.build();
let request = CreateBadgeGrantRequestBuilder::new(config.clone())
.badge_id("test".to_string())
.user_ids(vec!["user_001".to_string()]);
let _ = request;
}
}