/* Social program for Ramaskrik. Copyright (C) 2019 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 std::result::Result; use rocket::{get, post}; use rocket::form::{Form, FromForm}; use rocket::http::Status; use rocket::response::Redirect; use rocket::serde::json::Json; use rocket_dyn_templates::Template; use serde::Serialize; use std::collections::HashMap; #[derive(Serialize)] struct Context { rooms : Vec, } #[get("/", format = "application/json", rank = 1)] pub async fn get_rooms_json(db: db::Connection) -> Json> { Json(db.get_rooms().await.unwrap()) } #[get("/", rank = 2)] pub async fn list_rooms(db: db::Connection) -> Result { let ctx = Context { rooms: db.get_rooms().await.map_err(|_| Status::InternalServerError)? }; Ok(Template::render("room/list", &ctx)) } #[get("/new")] pub fn new_room() -> Template { let ctx: HashMap = HashMap::new(); Template::render("room/new", &ctx) } #[derive(FromForm)] pub struct NewRoomForm { name: String, } #[post("/", format = "application/x-www-form-urlencoded", data = "")] pub async fn create_room(db: db::Connection, room: Form) -> Result { db.create_room(room.name.to_owned()).await.map_err(|_| Status::InternalServerError)?; Ok(Redirect::to("rooms")) }