migration/
lib.rs

1#[cfg(test)]
2mod tests;
3
4use music_player_settings::{read_settings, Settings};
5pub use sea_orm_migration::prelude::*;
6use sea_orm_migration::{cli::run_migrate, sea_orm::Database};
7use std::{env, fs::File, path::Path};
8
9mod m20220101_000001_create_table;
10mod m20221115_220318_add_folder_table;
11mod m20221117_211308_add_created_at_column;
12
13pub struct Migrator;
14
15#[async_trait::async_trait]
16impl MigratorTrait for Migrator {
17    fn migrations() -> Vec<Box<dyn MigrationTrait>> {
18        vec![
19            Box::new(m20220101_000001_create_table::Migration),
20            Box::new(m20221115_220318_add_folder_table::Migration),
21            Box::new(m20221117_211308_add_created_at_column::Migration),
22        ]
23    }
24}
25
26pub async fn run() {
27    let config = read_settings().unwrap();
28    let settings = config.try_deserialize::<Settings>().unwrap();
29    let url = settings.database_url.clone();
30
31    std::env::set_var("DATABASE_URL", settings.database_url);
32
33    let database_path = std::env::var("DATABASE_URL")
34        .unwrap()
35        .replace("sqlite:", "");
36
37    if !Path::new(&database_path).exists() {
38        File::create(database_path).expect("Failed to create database file");
39    }
40
41    match env::consts::OS {
42        "android" => {
43            let db = &Database::connect(&url).await.unwrap();
44            Migrator::up(&db, None).await.unwrap();
45        }
46        _ => {
47            cli::run_cli(Migrator).await;
48        }
49    }
50}