use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceRecord {
pub id: String,
pub client_id: String,
pub auth_app_id: String,
pub user_id: String,
pub fingerprint: String,
pub device_info: String,
pub last_active_time: i64,
pub status: i32,
pub created_time: i64,
pub updated_time: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SoftwareInfo {
pub id: String,
pub name: String,
pub description: String,
pub software_type: i32,
pub icon: String,
pub status: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SoftwareVersion {
pub id: String,
pub software_id: String,
pub version: String,
pub release_notes: String,
pub download_url: String,
pub file_size: i64,
pub platform: String,
pub status: i32,
#[serde(default)]
pub force_update: bool,
#[serde(default)]
pub min_compatible: String,
#[serde(default)]
pub channel: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SoftwareStoreItem {
pub software: SoftwareInfo,
pub latest_version: Option<SoftwareVersion>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DownloadInfo {
pub download_url: String,
pub file_size: i64,
pub version: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct VersionBrief {
pub id: String,
pub version: String,
pub release_notes: String,
pub download_url: String,
pub file_size: i64,
pub platform: String,
pub channel: String,
pub force_update: bool,
pub min_compatible: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UpdateInfo {
pub has_update: bool,
pub force_update: bool,
pub current_version: String,
pub target_version: Option<VersionBrief>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct UpdateEvent {
#[serde(default)]
pub id: u64,
pub software_id: String,
pub version: String,
pub platform: String,
pub channel: String,
pub force_update: bool,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ApiResponse<T> {
pub success: bool,
#[serde(default)]
pub message: Option<String>,
#[serde(default)]
pub code: Option<i32>,
pub data: Option<T>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct OfflineLicenseFile {
pub payload: String,
pub signature: String,
pub public_key: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct OfflineLicensePayload {
pub license_id: String,
pub user_id: String,
pub software_id: String,
pub fingerprint: String,
pub max_devices: i32,
pub expire_time: i64,
pub issued_at: i64,
}