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}