73 lines
1.5 KiB
Rust
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
|
|
} |