use anyhow::Error;
use crate::{
Client,
utils::{
HttpsRequest,
HttpProtocol,
HttpMethod,
http_request,
Session,
format_query_param,
merge_qry_to_qry_prms,
},
data_models::{
GroupAuditLogAction,
SortOrder,
Limit,
AuditPage
},
};
pub struct GetAuditLog<'a> {
session: &'a Session,
group_id: u64,
query_params: Vec<String>,
}
impl <'a>GetAuditLog<'a> {
pub fn new(session: &'a Session, group_id: u64) -> GetAuditLog<'a> {
GetAuditLog {
session,
group_id,
query_params: Vec::new(),
}
}
pub fn action_type(&'a mut self, action_type: GroupAuditLogAction) -> &'a mut GetAuditLog {
self.query_params.push(format_query_param(("actionType", action_type.to_string())));
self
}
pub fn user_id(&'a mut self, user_id: u64) -> &'a mut GetAuditLog {
self.query_params.push(format_query_param(("userId", user_id.to_string())));
self
}
pub fn sort_order(&'a mut self, sort_order: SortOrder) -> &'a mut GetAuditLog {
self.query_params.push(format_query_param(("sortOrder", sort_order.to_string())));
self
}
pub fn limit(&'a mut self, limit: Limit) -> &'a mut GetAuditLog {
self.query_params.push(format_query_param(("limit", limit.to_string())));
self
}
pub fn cursor(&'a mut self, cursor: String) -> &'a mut GetAuditLog {
self.query_params.push(format_query_param(("cursor", cursor)));
self
}
pub async fn send(&self) -> Result<AuditPage, Error> {
let query = format!("//groups.roblox.com/v1/groups/{}/audit-log?", self.group_id);
let response = http_request(HttpsRequest {
method: HttpMethod::Get,
protocol: HttpProtocol::Https,
url: merge_qry_to_qry_prms(query, &self.query_params),
session: Some(self.session),
}).await?;
Ok(response.json::<AuditPage>().await?)
}
}
impl Client {
pub fn get_audit_log(&self, group_id: u64) -> GetAuditLog {
GetAuditLog::new(self.get_session(), group_id)
}
}