ddstats/src/database/mod.rs

44 lines
1.1 KiB
Rust

use std::env;
use std::result::Result;
use std::error::Error;
use mysql::*;
use mysql::prelude::*;
use crate::types;
pub fn get_maps() -> Result<Vec<types::Map>, Box<dyn Error>> {
let mut conn = create_pool()?.get_conn()?;
let maps = conn.query_map(
"SELECT * FROM record_maps",
|(name, server, points, stars, mapper, timestamp)| types::Map {
name, server, points, stars, mapper, timestamp
}
)?;
Ok(maps)
}
pub fn get_map_by_name(name: &str) -> Result<Option<types::Map>, Box<dyn Error>> {
let mut conn = create_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(types::Map {
name, server, points, stars, mapper, timestamp
}),
None => None
})
}
pub fn create_pool() -> Result<Pool, Box<dyn Error>> {
let url = env::var("DB_URI")?;
let pool = Pool::new(url.as_str())?;
Ok(pool)
}