multi-hotel-refactor #3

Merged
Rominou merged 27 commits from multi-hotel-refactor into master 2026-03-11 13:32:43 +00:00
5 changed files with 94 additions and 4 deletions
Showing only changes of commit 377f57ce2d - Show all commits

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,6 +1,6 @@
use std::time::Duration;
use axum::{
Json, body::{Body, to_bytes}, extract::{Extension, FromRequest, FromRequestParts, Path, State}, http::{Request as HttpRequest, StatusCode, header::{HeaderValue, SET_COOKIE}, request::Parts, status }, middleware::Next, response::{IntoResponse, IntoResponseParts, Response}
Json, body::{Body, to_bytes}, extract::{Extension, FromRequest, FromRequestParts, Path, State, ws::close_code::STATUS}, http::{Request as HttpRequest, StatusCode, header::{HeaderValue, SET_COOKIE}, request::Parts, status }, middleware::Next, response::{IntoResponse, IntoResponseParts, Response}
};
use axum_extra::extract::TypedHeader;
@@ -903,11 +903,100 @@ pub async fn get_hotel(
//.map_err(|_| (StatusCode::INTERNAL_SERVER_ERROR, "DB connection error".to_string()))?;
//return (StatusCode::OK).into_response();
}
#[derive(Deserialize, Debug)]
pub struct addHotelUser{
user_id:i32,
#[serde(default)]
hotel_ids: Vec<i32>,
}
pub async fn add_hotel_user(
State(state): State<AppState>,
Extension(keys): Extension<JwtKeys>,
Json(payload): Json<addHotelUser>
) -> impl IntoResponse {
let conn = match state.logs_pool.get() {
Ok(c) => c,
Err(e) => return (StatusCode::INTERNAL_SERVER_ERROR,
"DB connection error").into_response()
};
let user_name: String= match conn.query_row(
"SELECT username FROM users WHERE id = ?1",
params![&payload.user_id],
|row| row.get(0),
) {
Ok(name) => name,
Err(e) => return (StatusCode::INTERNAL_SERVER_ERROR,
format!("user not found {e} ")).into_response()
};
let mut get_hotel_name_stmt = match conn.prepare(
"SELECT hotelname FROM hotels WHERE id = ?1"
) {
Ok(stmt) => stmt,
Err(e) => return (StatusCode::INTERNAL_SERVER_ERROR,
format!("could't prepare stmt for hotel : {e} ")).into_response()
};
let mut insert_hotel_link_stmt = match conn.prepare(
"INSERT INTO hotel_user_link
(user_id,hotel_id,username,hotelname)
VALUES (?1,?2,?3,?4)",
) {
Ok(stmt) => stmt,
Err(e) => return (StatusCode::INTERNAL_SERVER_ERROR,
format!("could't prepare stmt to insert hotel : {e} ")).into_response()
};
for &hotel_id in &payload.hotel_ids{
let hotel_name: String = match get_hotel_name_stmt.query_row(
params![hotel_id],
|row| row.get(0),
) {
Ok(name) => name,
Err(e) => return (StatusCode::INTERNAL_SERVER_ERROR,
format!("hotel not found {e} ")).into_response()
};
let add_link = match conn.execute(
"INSERT INTO hotel_user_link
(user_id,hotel_id,username,hotelname)
VALUES (?1,?2,?3,?4)",
params![
payload.user_id,
hotel_id,
user_name,
hotel_name
],) {
Ok(_) => true,
Err(e) => return (StatusCode::INTERNAL_SERVER_ERROR,
format!("hotel not found {e} ")).into_response()
};
//TODO: still need to build the add hotel to user here
};
return(StatusCode::OK, "goo").into_response();
}
fn internal_error<E: std::fmt::Display>(err: E) -> (StatusCode, String) {
(StatusCode::INTERNAL_SERVER_ERROR, format!("Internal error: {}", err))
}

View File

@@ -30,6 +30,7 @@ pub fn utils_routes() -> Router<AppState> {
.route("/force_update_password", put(force_update_password))
.route("/get_hotels", get(get_hotel))
.route("/add_hotel_user", put(add_hotel_user))
//.with_state(state)