use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Migration {
pub id: String,
pub name: String,
pub up_sql: String,
pub down_sql: String,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MigrationRecord {
pub id: String,
pub applied_at: DateTime<Utc>,
pub batch: i32,
}
#[derive(Debug, Clone)]
pub struct MigrationConfig {
pub migrations_dir: PathBuf,
pub migrations_table: String,
}
impl Default for MigrationConfig {
fn default() -> Self {
Self {
migrations_dir: PathBuf::from("migrations"),
migrations_table: "elif_migrations".to_string(),
}
}
}
#[derive(Debug)]
pub struct MigrationRunResult {
pub applied_count: usize,
pub applied_migrations: Vec<String>,
pub skipped_count: usize,
pub execution_time_ms: u128,
}
#[derive(Debug)]
pub struct RollbackResult {
pub rolled_back_count: usize,
pub rolled_back_migrations: Vec<String>,
pub execution_time_ms: u128,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MigrationDirection {
Up,
Down,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum MigrationStatus {
Pending,
Applied {
applied_at: DateTime<Utc>,
batch: i32,
},
}