use crate::types::models::{ColumnInfo, FilterInfo, ModelInfo};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DashboardResponse {
pub site_name: String,
pub site_header: String,
pub url_prefix: String,
pub login_url: String,
pub logout_url: String,
pub models: Vec<ModelInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub csrf_token: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListResponse {
pub model_name: String,
pub count: u64,
pub page: u64,
pub page_size: u64,
pub total_pages: u64,
pub results: Vec<HashMap<String, serde_json::Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub available_filters: Option<Vec<FilterInfo>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub columns: Option<Vec<ColumnInfo>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DetailResponse {
pub model_name: String,
pub data: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MutationResponse {
pub success: bool,
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub affected: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BulkDeleteResponse {
pub success: bool,
pub deleted: u64,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImportResponse {
pub success: bool,
pub imported: u64,
pub updated: u64,
pub skipped: u64,
pub failed: u64,
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub errors: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct ExportResponse {
#[serde(with = "serde_bytes")]
pub data: Vec<u8>,
pub filename: String,
pub content_type: String,
pub truncated: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_count: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoginResponse {
pub token: String,
pub username: String,
pub user_id: String,
pub is_staff: bool,
pub is_superuser: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FieldsResponse {
pub model_name: String,
pub fields: Vec<crate::types::models::FieldInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub values: Option<HashMap<String, serde_json::Value>>,
}