diff options
Diffstat (limited to 'src/controllers')
-rw-r--r-- | src/controllers/event.rs | 68 |
1 files changed, 68 insertions, 0 deletions
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 <haraldei@anduin.net> + + 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 <https://www.gnu.org/licenses/>. +*/ + +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<Template, Redirect> { + #[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 = "<form>")] +pub fn create(db: db::Connection, form: Form<NewEventForm>) -> Result<Redirect, Box<dyn Error>> { + models::Event::create(&db, &form.name, &form.description)?; + Ok(Redirect::to("/")) +} |