feat: started api wrapper

This commit is contained in:
Jef Roosens 2023-05-11 09:30:25 +02:00
parent 02d5446e3e
commit e8e73e9afe
Signed by: Jef Roosens
GPG key ID: B75D4F293C7052DB
8 changed files with 217 additions and 11 deletions

26
affluences-api/API.md Normal file
View file

@ -0,0 +1,26 @@
curl -L 'https://api.affluences.com/app/v3/sites/ghent-university' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0'
returnt lijst van alle bibliotheken op ugent, inclusief de uuids die dan nodig zijn om de specifieke requests te sturen naar die bib zijn stuff
curl -L 'https://api.affluences.com/app/v3/timetables/4737e57a-ee05-4f7b-901a-7bb541eeb297?offset=0' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0'
returnt de time table voor die bib
https://reservation.affluences.com/api/sites/4737e57a-ee05-4f7b-901a-7bb541eeb297
Basisinformatie voor s5 bib
https://reservation.affluences.com/api/resources/4737e57a-ee05-4f7b-901a-7bb541eeb297?type=1
returnt lijst van mogelijke lokalen voor s5
https://reservation.affluences.com/api/resources/4737e57a-ee05-4f7b-901a-7bb541eeb297/available?date=2023-05-11&type=1
returnt momenten die nog vrij zijn voor gegeven datum
pretty sure da die type 1 slaat op da et een bib is
https://api.affluences.com/app/v3/sites
body: {"selected_categories":[1],"page":0,"search_query":"university of ghent"}
zoek op alle mogelijke bibs, met een search query

View file

@ -1,14 +1,22 @@
pub fn add(left: usize, right: usize) -> usize {
left + right
mod models;
use models::Resource;
const USER_AGENT: &str = "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0";
pub struct AffluencesClient {
client: reqwest::Client,
}
#[cfg(test)]
mod tests {
use super::*;
impl AffluencesClient {
pub fn new() -> Self {
Self {
client: reqwest::Client::builder()
.user_agent(USER_AGENT).build().unwrap(),
}
}
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
pub async fn available(&mut self) -> reqwest::Result<Vec<Resource>> {
self.client.get("https://reservation.affluences.com/api/resources/026b8caa-d310-464f-b714-4c21a2cf98ea/available?date=2023-05-11&type=1").send().await?.json::<Vec<Resource>>().await
}
}

View file

@ -0,0 +1,40 @@
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Debug)]
pub struct Hour {
pub hour: String,
pub state: u32,
// reservations
pub granularity: u32,
pub person_count: u32,
pub places_available: u32,
pub places_bookable: u32,
}
#[derive(Deserialize, Debug)]
pub struct Resource {
pub resource_id: u32,
pub resource_name: String,
pub resource_type: u32,
pub granularity: u32,
pub time_slot_count: u32,
pub static_time_slot: bool,
// reservations_by_timeslot
pub note_available: bool,
pub note_required: bool,
pub note_description: String,
pub description: String,
pub capacity: u32,
pub site_timezone: String,
pub user_name_required: bool,
pub user_phone_required: bool,
pub user_name_available: bool,
pub user_phone_available: bool,
// time_before_reservations_closed
// min_places_per_reservation
// max_places_per_reservation
pub image_url: Option<String>,
// services
pub slots_state: u32,
pub hours: Vec<Hour>,
}