ddstats/src/database/mod.rs

73 lines
1.5 KiB
Rust

use std::env;
use std::result::Result;
use std::error::Error;
use mysql::*;
use mysql::prelude::*;
pub mod map;
pub struct DatabasePoolStore(pub Pool);
pub fn get_maps(pool: &Pool) -> Result<Vec<map::Map>, Box<dyn Error>> {
let mut conn = pool.get_conn()?;
let maps = conn.query_map(
"SELECT * FROM record_maps",
|(
name,
server,
points,
stars,
mapper,
timestamp,
)| map::Map {
name,
server,
points,
stars,
mapper,
timestamp
}
)?;
Ok(maps)
}
pub fn get_map_by_name(pool: &Pool, name: &str) -> Result<Option<map::Map>, Box<dyn Error>> {
let mut conn = pool.get_conn()?;
let stmt = conn.prep("SELECT * FROM record_maps WHERE Map = ?")?;
let map = conn.exec_first(
&stmt,
(name,)
)?;
Ok(match map {
Some((name, server, points, stars, mapper, timestamp)) => Some(map::Map {
name, server, points, stars, mapper, timestamp
}),
None => None
})
}
pub fn create_pool() -> Pool {
let url = match env::var("DB_URI") {
Ok(uri) => uri,
Err(err) => {
println!("You must provide an env var: 'DB_URI'!");
panic!("{}", err);
}
};
let pool = match Pool::new(url.as_str()) {
Ok(pool) => pool,
Err(err) => {
println!("Couldn't connect to the database!");
panic!("{}", err);
}
};
pool
}