summaryrefslogtreecommitdiff
path: root/src/server.rs
diff options
context:
space:
mode:
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());