feat: make reservation api wrapper

This commit is contained in:
Jef Roosens 2023-05-11 15:49:05 +02:00
parent 0aa021259a
commit c799d3d226
Signed by: Jef Roosens
GPG key ID: B75D4F293C7052DB
7 changed files with 76 additions and 21 deletions

View file

@ -1,7 +1,7 @@
mod models;
use chrono::NaiveDate;
use models::{Resource, Data, SiteData};
use chrono::{NaiveDate, NaiveDateTime};
use models::{Resource, Data, SiteData, Reservation, ReservationResponse};
const USER_AGENT: &str = "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0";
@ -17,13 +17,18 @@ impl AffluencesClient {
}
}
pub async fn available(&mut self, resource_uuid: &str, date: NaiveDate, resource_type: u32) -> reqwest::Result<Vec<Resource>> {
let url = format!("https://reservation.affluences.com/api/resources/{}/available", resource_uuid);
pub async fn available(&mut self, site_id: uuid::Uuid, date: NaiveDate, resource_type: u32) -> reqwest::Result<Vec<Resource>> {
let url = format!("https://reservation.affluences.com/api/resources/{}/available", site_id);
self.client.get(url).query(&[("date", date.format("%Y-%m-%d").to_string()), ("type", resource_type.to_string())]).send().await?.json::<Vec<Resource>>().await
}
pub async fn site_data(&mut self, name: &str) -> reqwest::Result<SiteData> {
let url = format!("https://api.affluences.com/app/v3/sites/{}", name);
pub async fn site_data(&mut self, slug: &str) -> reqwest::Result<SiteData> {
let url = format!("https://api.affluences.com/app/v3/sites/{}", slug);
Ok(self.client.get(url).send().await?.json::<Data<SiteData>>().await?.data)
}
pub async fn make_reservation(&mut self, resource_id: u64, reservation: &Reservation) -> reqwest::Result<ReservationResponse> {
let url = format!("https://reservation.affluences.com/api/reserve/{}", resource_id);
self.client.get(url).json(reservation).send().await?.json::<ReservationResponse>().await
}
}

View file

@ -1,4 +1,5 @@
use serde::{Deserialize, Serialize};
use chrono::{NaiveTime, NaiveDate};
#[derive(Deserialize, Debug)]
pub struct Hour {
@ -82,8 +83,8 @@ pub struct SiteDataForecast {
#[derive(Deserialize, Debug)]
pub struct SiteDataNotice {
message: String,
url: Option<String>
pub message: String,
pub url: Option<String>
}
#[derive(Deserialize, Debug)]
@ -138,7 +139,7 @@ pub struct SiteDataStatus {
pub struct SiteData {
pub id: uuid::Uuid,
pub slug: String,
parent: Option<String>,
pub parent: Option<String>,
pub primary_name: String,
pub secondary_name: String,
pub concat_name: String,
@ -148,7 +149,7 @@ pub struct SiteData {
pub phone_number: Option<String>,
pub email: Option<String>,
pub url: Option<String>,
notices: Vec<SiteDataNotice>,
pub notices: Vec<SiteDataNotice>,
// messages
pub estimated_distance: f64,
pub current_forecast: SiteDataForecast,
@ -166,6 +167,37 @@ pub struct SiteData {
pub extended_forecasts: bool,
pub booking_url: Option<String>,
pub validated: bool,
pub validationStatus: String,
pub publicationStatus: String
#[serde(rename = "validationStatus")]
pub validation_status: String,
#[serde(rename = "publicationStatus")]
pub publication_status: String
}
#[derive(Serialize, Debug)]
pub struct Reservation {
// This string might not be correct
pub auth_type: Option<String>,
pub email: String,
pub date: NaiveDate,
pub start_time: String,
pub end_time: String,
pub note: String,
pub user_firstname: String,
pub user_lastname: String,
pub user_phone: Option<String>,
pub person_count: u64
}
#[derive(Deserialize, Debug)]
pub struct ReservationResponse {
pub reservation_id: u64,
// This string might not be correct
pub auth_type: Option<String>,
pub user_validation: bool,
// ticket_payload
pub email: String,
pub success: String,
#[serde(rename = "successMessage")]
pub success_message: String,
// cancellation_token
}