From a3db23d802017762fdb77fbb294e57720088576c Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Sun, 9 Jul 2017 05:42:37 -0400 Subject: fix: Vote counting and sql queries --- src/data.rs | 35 +++++++++++------------------------ src/server.rs | 10 ---------- 2 files changed, 11 insertions(+), 34 deletions(-) (limited to 'src') diff --git a/src/data.rs b/src/data.rs index 2149a06..b5199e2 100644 --- a/src/data.rs +++ b/src/data.rs @@ -1,5 +1,3 @@ -use serde_json::{Value, Map}; -use handlebars_iron::handlebars::to_json; use rusqlite::Connection; use error::Result; @@ -13,24 +11,6 @@ pub struct Quote { content: String, } -pub fn make_data() -> Map { - let mut data = Map::new(); - data.insert( - "quotes".to_string(), - to_json(&vec![ - &Quote { - id: 1, - author: "panda_man".to_owned(), - date: "2017-07-01".to_owned(), - score: format!("{:.2}", 450.0 / 96.0), - votes: 99, - content: " hvor er jantho?".to_owned(), - }, - ]), - ); - data -} - pub fn init(c: &Connection) -> Result<()> { info!("Initializing db"); try!(c.execute_batch( @@ -69,7 +49,7 @@ pub fn populate_test_db(c: &Connection) -> Result<()> { (1, 3), (1, 1), (2, 3), - (1, 4); + (2, 4); "#, )); Ok(()) @@ -81,9 +61,10 @@ pub fn get_quotes(c: &Connection) -> Result> { SELECT q.id, q.timestamp, q.author, q.content, sum(v.score), count(v.score) FROM quotes q - JOIN votes v + JOIN votes v ON (q.id = v.quote_id) WHERE q.approved GROUP BY 1, 2, 3, 4; + ORDER BY q.id DESC; "#, )?; @@ -97,6 +78,12 @@ pub fn get_quotes(c: &Connection) -> Result> { votes: row.get(5), } })?; - let result = rows.map(|r| r.map_err(|e| From::from(e))).collect(); - result + + let result = rows.map(|r| r.map_err(|e| From::from(e))) + .collect::>>(); + // For some reason, the ordering from sqlite doesn't work. + result.map(|mut queries| { + queries.sort_by_key(|q| -q.id); + queries + }) } diff --git a/src/server.rs b/src/server.rs index 4af8c83..404c3b2 100644 --- a/src/server.rs +++ b/src/server.rs @@ -34,15 +34,6 @@ fn make_renderer() -> HandlebarsEngine { e } -fn info(_r: &mut Request) -> IronResult { - let data = data::make_data(); - Ok(Response::with(( - status::Ok, - Header(ContentType::html()), - Template::new("quotes", data), - ))) -} - fn quotes(r: &mut Request) -> IronResult { let mut result = Map::new(); let quotes = { @@ -61,7 +52,6 @@ fn quotes(r: &mut Request) -> IronResult { pub fn serve(state: State, port: u16) { let router = router!( - info: get "/info" => info, index: get "/" => quotes, ); let mut chain = Chain::new(router); -- cgit v1.2.3