Can get the full list of accommodation reservations for a family
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing

This commit is contained in:
Pierre HUBERT 2024-05-25 08:48:13 +02:00
parent d0d1169c7d
commit 936b095d46
7 changed files with 69 additions and 7 deletions

View File

@ -0,0 +1,10 @@
use crate::controllers::HttpResult;
use crate::extractors::family_extractor::FamilyInPath;
use crate::services::accommodations_reservations_service;
use actix_web::HttpResponse;
/// Get the full list of accommodations reservations for a family
pub async fn full_list(m: FamilyInPath) -> HttpResult {
Ok(HttpResponse::Ok()
.json(accommodations_reservations_service::get_all_of_family(m.family_id()).await?))
}

View File

@ -6,6 +6,7 @@ use std::fmt::{Debug, Display, Formatter};
use zip::result::ZipError;
pub mod accommodations_list_controller;
pub mod accommodations_reservations_controller;
pub mod auth_controller;
pub mod couples_controller;
pub mod data_controller;

View File

@ -6,9 +6,9 @@ use actix_web::{web, App, HttpServer};
use geneit_backend::app_config::AppConfig;
use geneit_backend::connections::{db_connection, s3_connection};
use geneit_backend::controllers::{
accommodations_list_controller, auth_controller, couples_controller, data_controller,
families_controller, members_controller, photos_controller, server_controller,
users_controller,
accommodations_list_controller, accommodations_reservations_controller, auth_controller,
couples_controller, data_controller, families_controller, members_controller,
photos_controller, server_controller, users_controller,
};
#[actix_web::main]
@ -228,9 +228,14 @@ async fn main() -> std::io::Result<()> {
)
// [ACCOMODATIONS] Reservations controller
// TODO : create
// TODO : get single
// TODO : update
// TODO : delete
// TODO : list
// TODO : list for an accommodation
.route(
"/family/{id}/accommodations/reservations/full_list",
web::get().to(accommodations_reservations_controller::full_list),
)
// TODO : validate or reject
// Photos controller
.route(

View File

@ -1,5 +1,8 @@
use crate::app_config::AppConfig;
use crate::schema::{accommodations_list, couples, families, members, memberships, photos, users};
use crate::schema::{
accommodations_list, accommodations_reservations, couples, families, members, memberships,
photos, users,
};
use crate::utils::crypt_utils::sha256;
use diesel::prelude::*;
@ -477,3 +480,32 @@ pub struct NewAccommodation {
pub time_create: i64,
pub time_update: i64,
}
/// Accommodation reservation ID holder
#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, Eq, PartialEq, Hash)]
pub struct AccommodationReservationID(pub i32);
#[derive(Queryable, Debug, serde::Serialize)]
pub struct AccommodationReservation {
id: i32,
family_id: i32,
accommodation_id: i32,
user_id: i32,
time_create: i64,
pub time_update: i64,
pub reservation_start: i64,
pub reservation_end: i64,
pub validated: Option<bool>,
}
#[derive(Insertable)]
#[diesel(table_name = accommodations_reservations)]
pub struct NewAccommodationReservation {
pub family_id: i32,
pub accommodation_id: i32,
pub user_id: i32,
pub time_create: i64,
pub time_update: i64,
pub reservation_start: i64,
pub reservation_end: i64,
}

View File

@ -29,7 +29,7 @@ pub async fn get_by_id(id: AccommodationID) -> anyhow::Result<Accommodation> {
})
}
/// Get all the couples of an accommodation
/// Get all the accommodations of a family
pub async fn get_all_of_family(id: FamilyID) -> anyhow::Result<Vec<Accommodation>> {
db_connection::execute(|conn| {
accommodations_list::table
@ -57,7 +57,7 @@ pub async fn exists(
})
}
/// Update the information of a couple
/// Update the information of an accommodation
pub async fn update(accommodation: &mut Accommodation) -> anyhow::Result<()> {
accommodation.time_update = time() as i64;

View File

@ -0,0 +1,13 @@
use crate::connections::db_connection;
use crate::models::{AccommodationReservation, FamilyID};
use crate::schema::accommodations_reservations;
use diesel::prelude::*;
/// Get all the accommodations reservations of a family
pub async fn get_all_of_family(id: FamilyID) -> anyhow::Result<Vec<AccommodationReservation>> {
db_connection::execute(|conn| {
accommodations_reservations::table
.filter(accommodations_reservations::dsl::family_id.eq(id.0))
.get_results(conn)
})
}

View File

@ -1,6 +1,7 @@
//! # Backend services
pub mod accommodations_list_service;
pub mod accommodations_reservations_service;
pub mod couples_service;
pub mod families_service;
pub mod login_token_service;