diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/controllers/event.rs | 26 | ||||
-rw-r--r-- | src/main.rs | 13 | ||||
-rw-r--r-- | src/models/event.rs | 18 |
3 files changed, 47 insertions, 10 deletions
diff --git a/src/controllers/event.rs b/src/controllers/event.rs index c585933..eca8c21 100644 --- a/src/controllers/event.rs +++ b/src/controllers/event.rs @@ -34,13 +34,13 @@ use rocket_dyn_templates::Template; pub async fn index(db: db::Connection) -> Result<Template, Redirect> { #[derive(Serialize)] struct Context { - event: models::Event, + events: Vec<models::Event>, } - let db_res = models::Event::get(&db).await; + let db_res = models::Event::get_all_events(&db).await; match db_res { - Ok(event) => { - let ctx = Context { event }; + Ok(events) => { + let ctx = Context { events }; Ok(Template::render("event/index", &ctx)) }, Err(_) => { @@ -72,9 +72,23 @@ pub struct NewEventForm { #[post("/create", format = "application/x-www-form-urlencoded", data = "<form>")] pub async fn create(db: db::Connection, form: Form<NewEventForm>) -> Result<Redirect, Status> { - models::Event::create(&db, form.name.to_owned(), form.description.to_owned()) + let event = models::Event::create(&db, form.name.to_owned(), form.description.to_owned()) + .await + .map_err(|_| Status::InternalServerError)?; + + Ok(Redirect::to(format!("/{}/edit", event.id))) +} + +#[get("/<eventid>/edit")] +pub async fn edit(db: db::Connection, eventid: i32) -> Result<Template, Status> { + #[derive(Serialize)] + struct Context { + event: models::Event, + } + + let event = models::Event::get_event(&db, eventid) .await .map_err(|_| Status::InternalServerError)?; - Ok(Redirect::to("")) + Ok(Template::render("event/edit", Context { event })) } diff --git a/src/main.rs b/src/main.rs index 2b4d01b..978c702 100644 --- a/src/main.rs +++ b/src/main.rs @@ -35,10 +35,19 @@ fn rocket() -> _ { event::index, event::new, event::create, + event::edit, ]) .mount("/", FileServer::from("public/")) - .mount("/rooms", routes![room::get_rooms_json, room::list_rooms, room::new_room, room::create_room]) - .mount("/films", routes![film::get_films_json, film::list_films, film::new_film, film::create_film]) + .mount("/rooms", routes![ + room::get_rooms_json, + room::list_rooms, + room::new_room, + room::create_room]) + .mount("/films", routes![ + film::get_films_json, + film::list_films, + film::new_film, + film::create_film]) .mount("/screenings", routes![ screening::get_aggregated_screenings, screening::list_screenings, diff --git a/src/models/event.rs b/src/models/event.rs index 646673d..baa44fc 100644 --- a/src/models/event.rs +++ b/src/models/event.rs @@ -37,13 +37,27 @@ impl Event { }).await } - pub async fn create(db: &db::Connection, eventname: String, desc: String) -> QueryResult<usize> { + pub async fn get_event(db: &db::Connection, eventid: i32) -> QueryResult<Event> { + db.run(move |conn| { + use crate::schema::event::dsl::*; + event.filter(id.eq(eventid)).first(conn) + }).await + } + + pub async fn get_all_events(db: &db::Connection) -> QueryResult<Vec<Event>> { + db.run(|conn| { + use crate::schema::event::dsl::*; + event.load(conn) + }).await + } + + pub async fn create(db: &db::Connection, eventname: String, desc: String) -> QueryResult<Event> { db.run(move |conn| { use crate::schema::event::dsl::*; let new_event = (name.eq(&eventname), description.eq(&desc)); diesel::insert_into(event) .values(&new_event) - .execute(conn) + .get_result(conn) }).await } } |