diff --git a/backend/src/main.rs b/backend/src/main.rs index b646d04..80e3b9e 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -2,7 +2,7 @@ use std::net::SocketAddr; use axum::{ middleware, routing::{get, get_service}, Extension, Router }; -use secret_gift_exchange::{giftexchange, giftexchanges}; +use secret_gift_exchange::{giftexchange, giftexchange_save, giftexchanges}; use sqlx::{sqlite::SqlitePoolOptions, SqlitePool}; use sqlx::migrate::Migrator; use tower_http::services::ServeDir; @@ -65,7 +65,7 @@ async fn main() { .route("/userwishlist/bought/:user_id", get(user_wishlist_bought_item)) .route("/userwishlist/received/:user_id", get(user_wishlist_received_item)) .route("/giftexchanges", get(giftexchanges)) - .route("/giftexchange/:giftexchange_id", get(giftexchange)) + .route("/giftexchange/:giftexchange_id", get(giftexchange).post(giftexchange_save)) .nest_service("/assets", ServeDir::new("templates/assets") .fallback(get_service(ServeDir::new("templates/assets")))) .route("/", get(index)) diff --git a/backend/src/secret_gift_exchange.rs b/backend/src/secret_gift_exchange.rs index eb5cd4d..fe999ee 100644 --- a/backend/src/secret_gift_exchange.rs +++ b/backend/src/secret_gift_exchange.rs @@ -1,11 +1,10 @@ use askama::Template; use askama_axum::{IntoResponse, Response}; use axum::{ - extract::{Path, State}, - response::Redirect, - Extension, + extract::{Path, State}, response::Redirect, routing::post, Extension, Form }; use axum_extra::response::Html; +use chrono::Utc; use http::StatusCode; use serde::{Deserialize, Serialize}; use sqlx::{FromRow, SqlitePool}; @@ -143,7 +142,7 @@ struct GiftExchangeTemplate { name: String, user_roles: Vec, giftexchange: GiftExchange, - participants: Vec, + participants: Vec, non_participants: Vec, } @@ -162,17 +161,21 @@ pub async fn giftexchange( let user_roles = get_user_roles_display(userid, &db_pool.clone()).await; // Get gift exchange - let giftexchange = match sqlx::query_as!(GiftExchange, "SELECT * FROM gift_exchange WHERE id = ?", exchange_id) + let giftexchange = match sqlx::query_as!( + GiftExchange, + "SELECT * FROM gift_exchange WHERE id = ?", + exchange_id + ) .fetch_one(&db_pool) - .await { + .await + { Ok(giftexchange) => giftexchange, - Err(_) => { - GiftExchange::default() - }}; + Err(_) => GiftExchange::default(), + }; // Get participants - let participants = sqlx::query_as::<_, GiftExchangeParticipant>( - "SELECT * FROM gift_exchange_participants WHERE exchange_id = ?", + let participants = sqlx::query_as::<_, UserData>( + "select * from users where users.id in (select participant_id from gift_exchange_participants where exchange_id = ?)", ) .bind(exchange_id) .fetch_all(&db_pool) @@ -202,5 +205,24 @@ pub async fn giftexchange( } } -pub fn select_gifters() {} +#[derive(Deserialize, Debug)] +pub struct ExchangeForm { + name: String, + exchange_date: String, + non_participants: Vec, +} +pub async fn giftexchange_save( + Path(exchange_id): Path, + Extension(user_data): Extension>, + State(db_pool): State, + Form(item_form): Form, +) -> impl IntoResponse { + println!("Saving gift exchange: {:?}", item_form); + if is_authorized("/giftexchange", user_data.clone(), db_pool.clone()).await { + // Insert new item to database + let now = Utc::now().timestamp(); + + } + Redirect::to("/").into_response() +} diff --git a/backend/templates/base.html b/backend/templates/base.html index 2662a1a..e02004d 100644 --- a/backend/templates/base.html +++ b/backend/templates/base.html @@ -18,7 +18,7 @@ -
+