feat: Reporting
This commit is contained in:
33
src/api.rs
33
src/api.rs
@@ -1,3 +1,5 @@
|
|||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
use crate::models::{ApiResponse, SuplError};
|
use crate::models::{ApiResponse, SuplError};
|
||||||
|
|
||||||
pub fn fetch_api(provider_url: &str) -> Result<ApiResponse, SuplError> {
|
pub fn fetch_api(provider_url: &str) -> Result<ApiResponse, SuplError> {
|
||||||
@@ -14,3 +16,34 @@ pub fn fetch_api(provider_url: &str) -> Result<ApiResponse, SuplError> {
|
|||||||
reason: e.to_string(),
|
reason: e.to_string(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
struct StatusResponse {
|
||||||
|
working: bool,
|
||||||
|
message: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn test_api(provider_url: &str) -> Result<(), SuplError> {
|
||||||
|
let trimmed = provider_url.trim_end_matches('/');
|
||||||
|
let url = format!("{}/status", trimmed);
|
||||||
|
|
||||||
|
let status: StatusResponse = minreq::get(&url)
|
||||||
|
.send()
|
||||||
|
.map_err(|e| SuplError::NetworkError {
|
||||||
|
reason: e.to_string(),
|
||||||
|
})?
|
||||||
|
.json()
|
||||||
|
.map_err(|e| SuplError::ParseError {
|
||||||
|
reason: e.to_string(),
|
||||||
|
})?;
|
||||||
|
|
||||||
|
if status.working {
|
||||||
|
Ok(())
|
||||||
|
} else {
|
||||||
|
Err(SuplError::ParseError {
|
||||||
|
reason: status
|
||||||
|
.message
|
||||||
|
.unwrap_or_else(|| "Provider reported not working".to_string()),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -34,21 +34,29 @@ impl JecnaSuplClient {
|
|||||||
|
|
||||||
pub fn get_schedule(&self, class_name: String) -> Result<SuplResult, SuplError> {
|
pub fn get_schedule(&self, class_name: String) -> Result<SuplResult, SuplError> {
|
||||||
let provider = self.provider_url.read().unwrap();
|
let provider = self.provider_url.read().unwrap();
|
||||||
|
|
||||||
|
api::test_api(&provider)?;
|
||||||
schedule::get_schedule_impl(&provider, class_name)
|
schedule::get_schedule_impl(&provider, class_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_teacher_absence(&self) -> Result<TeacherAbsenceResult, SuplError> {
|
pub fn get_teacher_absence(&self) -> Result<TeacherAbsenceResult, SuplError> {
|
||||||
let provider = self.provider_url.read().unwrap();
|
let provider = self.provider_url.read().unwrap();
|
||||||
|
|
||||||
|
api::test_api(&provider)?;
|
||||||
teacher_absence::get_teacher_absence_impl(&provider)
|
teacher_absence::get_teacher_absence_impl(&provider)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_all(&self) -> Result<ApiResponse, SuplError> {
|
pub fn get_all(&self) -> Result<ApiResponse, SuplError> {
|
||||||
let provider = self.provider_url.read().unwrap();
|
let provider = self.provider_url.read().unwrap();
|
||||||
|
|
||||||
|
api::test_api(&provider)?;
|
||||||
all::get_all_impl(&provider)
|
all::get_all_impl(&provider)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn report(&self, content: String, class: String, report_location: ReportLocation) -> Result<(), SuplError> {
|
pub fn report(&self, content: String, class: String, report_location: ReportLocation) -> Result<(), SuplError> {
|
||||||
let provider = self.provider_url.read().unwrap();
|
let provider = self.provider_url.read().unwrap();
|
||||||
|
|
||||||
|
api::test_api(&provider)?;
|
||||||
report_impl(&provider, content, class, report_location)
|
report_impl(&provider, content, class, report_location)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user