use bollard::Docker; use chrono::Utc; use clap::Arg; use clap::{Command, ArgMatches}; use crate::{ DbPool, schema }; use crate::dockermgr; use diesel::prelude::*; pub fn create_subcommand() -> Command { Command::new("start") .about("manually start a server (and set last login datetime to now)") .arg(Arg::new("NAME").required(true)) } pub async fn subcommand(arguments: &ArgMatches, pool: &DbPool, docker: Docker) -> Result<(), String> { use schema::servers::dsl::*; let server_name = arguments.get_one::("NAME").unwrap(); dockermgr::start_server(&docker, pool, server_name).await?; diesel::update(servers).filter(name.eq(server_name)).set(last_login.eq(Utc::now().naive_utc())).execute(&mut pool.get().unwrap()).map_err(|e| format!("Failed to set the last login date: {}", e))?; Ok(()) }