use bollard::Docker; use clap::{Arg, ArgMatches, Command}; use crate::{Config, DbPool, srvmgr}; use std::fs; use diesel::prelude::*; pub fn create_subcommand() -> Command { Command::new("remove") .about("remove a server") .arg(Arg::new("NAME").required(true)) } pub async fn subcommand(arguments: &ArgMatches, pool: &DbPool, docker: &Docker) -> Result<(), String> { use crate::schema::servers::dsl::*; let server_name = arguments.get_one::("NAME").unwrap(); let config = Config::load(); let conn = &mut pool.get().unwrap(); let _ = srvmgr::stop_server(docker, pool, server_name).await; let deleted = diesel::delete(servers.filter(name.eq(server_name))).execute(conn).map_err(|_| "failed to delete from db".to_string())?; if deleted != 1 { return Err("servver was not found".to_string()); } let path = config.config_path + "/" + server_name; fs::remove_dir_all(path).map_err(|e| format!("failed to remove the server directory, reason : {}", e))?; Ok(()) }