summaryrefslogtreecommitdiff
path: root/src/server.rs
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2017-07-12 06:35:41 -0400
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2017-07-12 11:38:25 -0400
commitf177dcb7b98300634fdef408150a83e9f476d66d (patch)
treeacc38470b061a3ff1bec8440d1957226dbfb22e6 /src/server.rs
parent80f1ddbe1e80682edd2d85b797a4d90ae4fc6f10 (diff)
add: Voting function
Diffstat (limited to 'src/server.rs')
-rw-r--r--src/server.rs37
1 files changed, 37 insertions, 0 deletions
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<Response> {
)))
}
+pub fn vote(r: &mut Request) -> IronResult<Response> {
+ let quote_id = get_param(r, "id").and_then(|id| {
+ id.parse::<i64>().map_err(|e| {
+ From::from(LinoError::BadRequest(format!("id: {}", e)))
+ })
+ })?;
+ let vote = get_param(r, "vote").and_then(|id| {
+ id.parse::<i32>().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::<Write<State>>().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(&quote));
+
+ 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());