use crate::api_client::CimaClient;
use crate::models::{MasterDataType, MasterItem};
use anyhow::{Context, Result};
#[derive(Debug, Default, Clone)]
pub struct MasterDataParams {
pub name: Option<String>,
pub id: Option<i32>,
pub code: Option<String>,
pub narcotic: Option<u8>,
pub psychotropic: Option<u8>,
pub narcotic_or_psychotropic: Option<u8>,
pub in_use: Option<u8>,
pub page: Option<u32>,
}
impl MasterDataParams {
pub fn new() -> Self {
Self::default()
}
pub(crate) fn to_query_params(&self, data_type: MasterDataType) -> Vec<(&str, String)> {
let mut params = vec![("maestra", data_type.as_u8().to_string())];
if let Some(ref v) = self.name {
params.push(("nombre", v.clone()));
}
if let Some(v) = self.id {
params.push(("id", v.to_string()));
}
if let Some(ref v) = self.code {
params.push(("codigo", v.clone()));
}
if let Some(v) = self.narcotic {
params.push(("estupefaciente", v.to_string()));
}
if let Some(v) = self.psychotropic {
params.push(("psicotropo", v.to_string()));
}
if let Some(v) = self.narcotic_or_psychotropic {
params.push(("estuopsico", v.to_string()));
}
if let Some(v) = self.in_use {
params.push(("enuso", v.to_string()));
}
if let Some(v) = self.page {
params.push(("pagina", v.to_string()));
}
params
}
}
impl CimaClient {
pub async fn get_master_data(
&self,
data_type: MasterDataType,
params: &MasterDataParams,
) -> Result<crate::models::PaginatedResponse<MasterItem>> {
let query_params = params.to_query_params(data_type);
self.get_with_params("maestras", &query_params)
.await
.context("Failed to get master data")
}
}