From 639eb16af544ea051d2e091111bcd6427a1644d0 Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Tue, 25 Aug 2020 16:12:16 +0200 Subject: Add info about the event to the db and render landing page. --- src/controllers/event.rs | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/controllers/event.rs (limited to 'src/controllers/event.rs') diff --git a/src/controllers/event.rs b/src/controllers/event.rs new file mode 100644 index 0000000..1b754f2 --- /dev/null +++ b/src/controllers/event.rs @@ -0,0 +1,68 @@ +/* + Social program for Ramaskrik. + Copyright (C) 2019, 2020 Harald Eilertsen + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +use crate::{ + db, + models, +}; + +use serde::Serialize; +use serde_json::json; +use std::error::Error; +use std::result::Result; +use rocket::{get, post}; +use rocket::response::Redirect; +use rocket::request::{Form, FromForm}; +use rocket_contrib::templates::Template; + +#[get("/")] +pub fn index(db: db::Connection) -> Result { + #[derive(Serialize)] + struct Context { + event: models::Event, + } + + let db_res = models::Event::get(&db); + match db_res { + Ok(event) => { + let ctx = Context { event }; + Ok(Template::render("event/index", &ctx)) + }, + Err(_) => { + // Create new event if it's not already in the db. + Err(Redirect::to("/new")) + } + } +} + +#[get("/new")] +pub fn new() -> Template { + Template::render("event/new", &json!({})) +} + +#[derive(FromForm)] +pub struct NewEventForm { + pub name: String, + pub description: String, +} + +#[post("/", format = "application/x-www-form-urlencoded", data = "
")] +pub fn create(db: db::Connection, form: Form) -> Result> { + models::Event::create(&db, &form.name, &form.description)?; + Ok(Redirect::to("/")) +} -- cgit v1.2.3