Add an accommodations reservations module (#188)
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Add a new module to enable accommodations reservation  Reviewed-on: #188
This commit is contained in:
@ -1,6 +1,11 @@
|
||||
use crate::app_config::AppConfig;
|
||||
use crate::schema::{couples, families, members, memberships, photos, users};
|
||||
use crate::constants;
|
||||
use crate::schema::{
|
||||
accommodations_list, accommodations_reservations, accommodations_reservations_cals_urls,
|
||||
couples, families, members, memberships, photos, users,
|
||||
};
|
||||
use crate::utils::crypt_utils::sha256;
|
||||
use crate::utils::time_utils::time;
|
||||
use diesel::prelude::*;
|
||||
|
||||
/// User ID holder
|
||||
@ -66,6 +71,7 @@ pub struct Family {
|
||||
pub invitation_code: String,
|
||||
pub disable_couple_photos: bool,
|
||||
pub enable_genealogy: bool,
|
||||
pub enable_accommodations: bool,
|
||||
}
|
||||
|
||||
impl Family {
|
||||
@ -308,7 +314,7 @@ pub struct NewMember {
|
||||
pub time_update: i64,
|
||||
}
|
||||
|
||||
/// Member ID holder
|
||||
/// Couple ID holder
|
||||
#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, Eq, PartialEq, Hash)]
|
||||
pub struct CoupleID(pub i32);
|
||||
|
||||
@ -441,3 +447,153 @@ pub struct NewCouple {
|
||||
pub time_create: i64,
|
||||
pub time_update: i64,
|
||||
}
|
||||
|
||||
/// Accommodation ID holder
|
||||
#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, Eq, PartialEq, Hash)]
|
||||
pub struct AccommodationID(pub i32);
|
||||
|
||||
#[derive(Queryable, Debug, serde::Serialize)]
|
||||
pub struct Accommodation {
|
||||
id: i32,
|
||||
family_id: i32,
|
||||
time_create: i64,
|
||||
pub time_update: i64,
|
||||
pub name: String,
|
||||
pub need_validation: bool,
|
||||
pub description: Option<String>,
|
||||
pub color: Option<String>,
|
||||
pub open_to_reservations: bool,
|
||||
}
|
||||
|
||||
impl Accommodation {
|
||||
pub fn id(&self) -> AccommodationID {
|
||||
AccommodationID(self.id)
|
||||
}
|
||||
|
||||
pub fn family_id(&self) -> FamilyID {
|
||||
FamilyID(self.family_id)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Insertable)]
|
||||
#[diesel(table_name = accommodations_list)]
|
||||
pub struct NewAccommodation {
|
||||
pub family_id: i32,
|
||||
pub name: String,
|
||||
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);
|
||||
|
||||
pub enum ReservationStatus {
|
||||
Pending,
|
||||
Accepted,
|
||||
Rejected,
|
||||
}
|
||||
|
||||
#[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>,
|
||||
}
|
||||
|
||||
impl AccommodationReservation {
|
||||
pub fn id(&self) -> AccommodationReservationID {
|
||||
AccommodationReservationID(self.id)
|
||||
}
|
||||
|
||||
pub fn accommodation_id(&self) -> AccommodationID {
|
||||
AccommodationID(self.accommodation_id)
|
||||
}
|
||||
|
||||
pub fn family_id(&self) -> FamilyID {
|
||||
FamilyID(self.family_id)
|
||||
}
|
||||
|
||||
pub fn user_id(&self) -> UserID {
|
||||
UserID(self.user_id)
|
||||
}
|
||||
|
||||
pub fn status(&self) -> ReservationStatus {
|
||||
match self.validated {
|
||||
None => ReservationStatus::Pending,
|
||||
Some(true) => ReservationStatus::Accepted,
|
||||
Some(false) => ReservationStatus::Rejected,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[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,
|
||||
}
|
||||
|
||||
/// Accommodation reservation calendar ID holder
|
||||
#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, Eq, PartialEq, Hash)]
|
||||
pub struct AccommodationReservationCalendarID(pub i32);
|
||||
|
||||
#[derive(Queryable, Debug, serde::Serialize)]
|
||||
pub struct AccommodationReservationCalendar {
|
||||
id: i32,
|
||||
family_id: i32,
|
||||
accommodation_id: Option<i32>,
|
||||
user_id: i32,
|
||||
name: String,
|
||||
token: String,
|
||||
pub time_create: i64,
|
||||
pub time_used: i64,
|
||||
}
|
||||
|
||||
impl AccommodationReservationCalendar {
|
||||
pub fn id(&self) -> AccommodationReservationCalendarID {
|
||||
AccommodationReservationCalendarID(self.id)
|
||||
}
|
||||
|
||||
pub fn accommodation_id(&self) -> Option<AccommodationID> {
|
||||
self.accommodation_id.map(AccommodationID)
|
||||
}
|
||||
|
||||
pub fn family_id(&self) -> FamilyID {
|
||||
FamilyID(self.family_id)
|
||||
}
|
||||
|
||||
pub fn user_id(&self) -> UserID {
|
||||
UserID(self.user_id)
|
||||
}
|
||||
|
||||
pub fn should_update_last_used(&self) -> bool {
|
||||
(self.time_used
|
||||
+ constants::ACCOMMODATIONS_RESERVATIONS_CAL_URL_TIME_USED_UPDATE_MIN_INTERVAL.as_secs()
|
||||
as i64)
|
||||
< time() as i64
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Insertable)]
|
||||
#[diesel(table_name = accommodations_reservations_cals_urls)]
|
||||
pub struct NewAccommodationReservationCalendar {
|
||||
pub family_id: i32,
|
||||
pub accommodation_id: Option<i32>,
|
||||
pub user_id: i32,
|
||||
pub name: String,
|
||||
pub token: String,
|
||||
pub time_create: i64,
|
||||
pub time_used: i64,
|
||||
}
|
||||
|
Reference in New Issue
Block a user