I WANNA DIE!
This commit is contained in:
parent
c385836aa0
commit
40e8974d6b
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -19,3 +19,6 @@ Cargo.lock
|
|||
# Added by cargo
|
||||
|
||||
/target
|
||||
|
||||
data/*.sqlite
|
||||
.env
|
|
@ -6,4 +6,6 @@ edition = "2021"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
rocket = "0.5.0-rc.2"
|
||||
rocket = { version = "0.5.0-rc.2", features = ["json"] }
|
||||
mysql = "22.2.0"
|
||||
dotenv = "0.15.0"
|
44
src/database/mod.rs
Normal file
44
src/database/mod.rs
Normal file
|
@ -0,0 +1,44 @@
|
|||
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)
|
||||
}
|
45
src/main.rs
45
src/main.rs
|
@ -1,26 +1,41 @@
|
|||
#[macro_use] extern crate rocket;
|
||||
use rocket::serde::json::Json;
|
||||
|
||||
extern crate dotenv;
|
||||
use dotenv::dotenv;
|
||||
|
||||
mod types;
|
||||
mod database;
|
||||
|
||||
#[get("/")]
|
||||
fn index() -> &'static str {
|
||||
"Hello, world!"
|
||||
#[get("/maps")]
|
||||
fn get_all_maps() -> Option<Json<Vec<types::Map>>> {
|
||||
match database::get_maps() {
|
||||
Ok(maps) => Some(Json(maps)),
|
||||
Err(err) => {
|
||||
println!("{err}");
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[get("/map")]
|
||||
fn map() -> String {
|
||||
let map = types::Map {
|
||||
name: "Test".into(),
|
||||
server: "USA".into(),
|
||||
points: 5,
|
||||
stars: 3,
|
||||
mapper: "Furo".into()
|
||||
};
|
||||
|
||||
format!("Map {} by {}", map.name, map.mapper)
|
||||
#[get("/maps/<map>")]
|
||||
fn get_map_by_name(map: &str) -> Option<Json<types::Map>> {
|
||||
match database::get_map_by_name(map) {
|
||||
Ok(map) => match map {
|
||||
Some(map) => Some(Json(map)),
|
||||
None => None
|
||||
},
|
||||
Err(err) => {
|
||||
println!("{err}");
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[launch]
|
||||
fn rocket() -> _ {
|
||||
rocket::build().mount("/", routes![index, map])
|
||||
dotenv().ok();
|
||||
rocket::build()
|
||||
.mount("/", routes![get_all_maps, get_map_by_name])
|
||||
}
|
|
@ -1,8 +1,12 @@
|
|||
#[derive(Debug)]
|
||||
use rocket::serde::{Serialize, Deserialize};
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(crate = "rocket::serde")]
|
||||
pub struct Map {
|
||||
pub name: String,
|
||||
pub server: String,
|
||||
pub points: i8,
|
||||
pub stars: i8,
|
||||
pub mapper: String,
|
||||
pub timestamp: String,
|
||||
}
|
Loading…
Reference in New Issue
Block a user