You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.0 KiB
Rust

#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use] extern crate rocket;
#[macro_use] extern crate rocket_contrib;
extern crate postgres;
extern crate chrono;
use chrono::NaiveDateTime;
use rocket::request::Form;
use rocket::response::Redirect;
use rocket_contrib::templates::Template;
use rocket_contrib::serve::StaticFiles;
use postgres::{NoTls, Client};
use std::env;
#[derive(FromForm)]
struct UserInput {
pullups: i32,
datetime: String
}
#[get("/")]
fn index() -> Template {
let context = json!({});
Template::render("index", context)
}
#[post("/add", data = "<user_input>")]
fn add_pullups(user_input: Form<UserInput>) -> Redirect {
println!("Pullups: {}", user_input.pullups);
println!("Date: {}", user_input.datetime);
query_db(user_input.pullups, user_input.datetime.clone());
Redirect::found("/added")
}
#[get("/added")]
fn added() -> Template {
let context = json!({});
Template::render("added", context)
}
fn query_db(pullups: i32, date: String) {
let parsed_datetime = NaiveDateTime::parse_from_str(&date, "%Y-%m-%d %H:%M:%S").unwrap();
let pg_conn = format!(
"host={} user={} password={} dbname={}",
env::var("DB_HOST").unwrap(),
env::var("DB_USER").unwrap(),
env::var("DB_PASS").unwrap(),
env::var("DB_NAME").unwrap(),
);
let mut pg_client = Client::connect(&pg_conn, NoTls).unwrap();
let query_res = pg_client.query_one(
"INSERT INTO pullups (pullups, date) VALUES ($1, $2) RETURNING session_id",
&[&pullups, &parsed_datetime]
);
match query_res {
Ok(row) => {
let session_id: i32 = row.get("session_id");
println!("Created new pullup session: {}", session_id);
},
Err(err) => {
println!("There was an error storing to DB! {}", err);
}
};
}
fn main() {
rocket::ignite()
.mount("/", routes![
index, add_pullups, added
])
.mount("/static", StaticFiles::from("./static"))
.attach(Template::fairing())
.launch();
}