use chrono::{DateTime, Utc};
use tokio::sync::oneshot;
use anyhow::Result;
use super::models::{BackupRecord, ScheduledTask};
#[derive(Debug)]
pub enum DbMessage {
InitTables {
respond_to: oneshot::Sender<Result<()>>,
},
GetConfig {
key: String,
respond_to: oneshot::Sender<Result<Option<String>>>,
},
SetConfig {
key: String,
value: String,
respond_to: oneshot::Sender<Result<()>>,
},
CreateDownloadTask {
task_name: String,
download_url: String,
total_size: i64,
target_path: String,
file_hash: Option<String>,
respond_to: oneshot::Sender<Result<i64>>,
},
UpdateDownloadTaskStatus {
task_id: i64,
status: String,
downloaded_size: Option<i64>,
error_message: Option<String>,
respond_to: oneshot::Sender<Result<()>>,
},
CompleteDownloadTask {
task_id: i64,
average_speed: Option<i64>,
total_duration: Option<i32>,
respond_to: oneshot::Sender<Result<()>>,
},
GetDownloadTask {
task_id: i64,
respond_to: oneshot::Sender<Result<Option<DownloadTaskRecord>>>,
},
GetActiveDownloadTasks {
respond_to: oneshot::Sender<Result<Vec<DownloadTaskRecord>>>,
},
UpdateAppState {
state: String,
state_data: Option<String>, error_message: Option<String>,
respond_to: oneshot::Sender<Result<()>>,
},
GetAppState {
respond_to: oneshot::Sender<Result<Option<AppStateRecord>>>,
},
RecordUserAction {
action_type: String,
action_description: String,
action_params: Option<String>, respond_to: oneshot::Sender<Result<i64>>,
},
CompleteUserAction {
action_id: i64,
status: String,
result_message: Option<String>,
duration_seconds: Option<i32>,
respond_to: oneshot::Sender<Result<()>>,
},
GetUserActions {
limit: Option<i32>,
respond_to: oneshot::Sender<Result<Vec<UserActionRecord>>>,
},
CreateBackupRecord {
file_path: String,
service_version: String,
backup_type: String,
status: String,
respond_to: oneshot::Sender<Result<i64>>,
},
GetAllBackups {
respond_to: oneshot::Sender<Result<Vec<BackupRecord>>>,
},
GetBackupById {
id: i64,
respond_to: oneshot::Sender<Result<Option<BackupRecord>>>,
},
DeleteBackupRecord {
backup_id: i64,
respond_to: oneshot::Sender<Result<()>>,
},
UpdateBackupFilePath {
backup_id: i64,
new_path: String,
respond_to: oneshot::Sender<Result<()>>,
},
CreateScheduledTask {
task_type: String,
target_version: String,
scheduled_at: DateTime<Utc>,
respond_to: oneshot::Sender<Result<i64>>,
},
GetPendingTasks {
respond_to: oneshot::Sender<Result<Vec<ScheduledTask>>>,
},
UpdateTaskStatus {
task_id: i64,
status: String,
details: Option<String>,
respond_to: oneshot::Sender<Result<()>>,
},
CancelPendingTasks {
task_type: String,
respond_to: oneshot::Sender<Result<()>>,
},
}
#[derive(Debug, Clone)]
pub struct DownloadTaskRecord {
pub id: i64,
pub task_name: String,
pub download_url: String,
pub total_size: i64,
pub downloaded_size: i64,
pub target_path: String,
pub file_hash: Option<String>,
pub status: String,
pub error_message: Option<String>,
pub retry_count: i32,
pub average_speed: i64,
pub total_duration_seconds: i32,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub completed_at: Option<DateTime<Utc>>,
}
#[derive(Debug, Clone)]
pub struct AppStateRecord {
pub current_state: String,
pub state_data: Option<String>,
pub last_error: Option<String>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone)]
pub struct UserActionRecord {
pub id: i64,
pub action_type: String,
pub action_description: String,
pub action_params: Option<String>,
pub status: String,
pub result_message: Option<String>,
pub started_at: DateTime<Utc>,
pub completed_at: Option<DateTime<Utc>>,
pub duration_seconds: Option<i32>,
pub client_version: Option<String>,
pub platform_info: Option<String>,
}