/* 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::result::Result; use rocket::{get, post}; use rocket::http::Status; use rocket::response::Redirect; use rocket::form::{Form, FromForm}; use rocket_dyn_templates::Template; #[get("/")] pub async fn index(db: db::Connection) -> Result { #[derive(Serialize)] struct Context { event: models::Event, } let db_res = models::Event::get(&db).await; 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, } // fn full_uri(path: &str) -> String { // let config = rocket::rocket.config(); // if Some(base_uri) = config.extras.get("base_uri") { // String::from(base_uri.as_str().unwrap()) + path // } else { // String::from(path) // } // } #[post("/create", format = "application/x-www-form-urlencoded", data = "
")] pub async fn create(db: db::Connection, form: Form) -> Result { models::Event::create(&db, form.name.to_owned(), form.description.to_owned()) .await .map_err(|_| Status::InternalServerError)?; Ok(Redirect::to("")) }