diff --git a/src/callers/login.rs b/src/callers/login.rs index 6f2908e..83347e1 100644 --- a/src/callers/login.rs +++ b/src/callers/login.rs @@ -51,13 +51,16 @@ pub mod endpoint { let (token_literal, duration) = token_stuff::create_token(&key).unwrap(); if token_stuff::verify_token(&key, &token_literal) { + let current_time = time::OffsetDateTime::now_utc(); + let _ = repo::user::update_last_login(&pool, &user, ¤t_time).await; + ( StatusCode::OK, Json(response::Response { message: String::from("Successful"), data: vec![icarus_models::login_result::LoginResult { id: user.id, - username: user.username, + username: user.username.clone(), token: token_literal, token_type: String::from(token_stuff::TOKENTYPE), expiration: duration, diff --git a/src/repo/mod.rs b/src/repo/mod.rs index 1d27bbb..a58bab5 100644 --- a/src/repo/mod.rs +++ b/src/repo/mod.rs @@ -45,19 +45,32 @@ pub mod user { pub async fn update_last_login( pool: &sqlx::PgPool, user: &icarus_models::user::User, + time: &time::OffsetDateTime, ) -> Result { let result = sqlx::query( r#" - UPDATE "user" SET last_login = $1 WHERE id = $2 + UPDATE "user" SET last_login = $1 WHERE id = $2 RETURNING last_login "#, ) - .bind(user.last_login) + .bind(time) .bind(user.id) .fetch_optional(pool) - .await; + .await + .map_err(|e| { + eprintln!("Error updating time: {}", e); + e + }); match result { - Ok(row) => Ok(user.last_login.unwrap()), + Ok(row) => match row { + Some(r) => { + let last_login: time::OffsetDateTime = r + .try_get("last_login") + .map_err(|_e| sqlx::Error::RowNotFound)?; + Ok(last_login) + } + None => Err(sqlx::Error::RowNotFound), + }, Err(err) => Err(err), } }