From f177dcb7b98300634fdef408150a83e9f476d66d Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Wed, 12 Jul 2017 06:35:41 -0400 Subject: add: Voting function --- src/server.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/server.rs') diff --git a/src/server.rs b/src/server.rs index e20bb96..4c8240b 100644 --- a/src/server.rs +++ b/src/server.rs @@ -48,6 +48,10 @@ fn make_renderer() -> HandlebarsEngine { "approve".to_string(), include_str!("data/templates/approve.hbs").to_string(), ); + templates.insert( + "vote".to_string(), + include_str!("data/templates/vote.hbs").to_string(), + ); e.add(Box::new(MemorySource(templates))); if let Err(r) = e.reload() { @@ -149,6 +153,38 @@ fn approve(r: &mut Request) -> IronResult { ))) } +pub fn vote(r: &mut Request) -> IronResult { + let quote_id = get_param(r, "id").and_then(|id| { + id.parse::().map_err(|e| { + From::from(LinoError::BadRequest(format!("id: {}", e))) + }) + })?; + let vote = get_param(r, "vote").and_then(|id| { + id.parse::().map_err(|e| { + From::from(LinoError::BadRequest(format!("vote: {}", e))) + }) + })?; + if vote < 1 || vote > 5 { + return Err(From::from(LinoError::BadRequest("bad vote".to_string()))); + } + + let quote = { + let mu = r.get::>().unwrap(); + let state = mu.lock().unwrap(); + data::new_vote(&state.connection, quote_id, vote); + data::get_quote(&state.connection, quote_id)? + }; + + let mut result = Map::new(); + result.insert("quote".to_string(), to_json("e)); + + Ok(Response::with(( + status::Ok, + Header(ContentType::html()), + Template::new("vote", result), + ))) +} + pub fn serve(state: State, port: u16) { let router = router!( @@ -158,6 +194,7 @@ pub fn serve(state: State, port: u16) { quotes_jsp: get "/quotes.jsp" => quotes, view_quote: get "/view_quote" => quotes, approve: get "/approve.jsp" => approve, + vote: get "/vote" => vote, ); let mut chain = Chain::new(router); chain.link_after(make_renderer()); -- cgit v1.2.3