feat(api): improve error handling

This commit is contained in:
Mariano Riefolo 2024-09-02 11:52:13 +02:00
parent 85779086bb
commit 8d1fe3b8f2

View File

@ -51,6 +51,9 @@ pub async fn pdf() -> impl IntoResponse {
async fn download_pdf(id: u8) -> Result<String, Error> {
let links = get_pdf_links().await.unwrap();
if id as usize >= links.len() {
return Err(failure::err_msg("Invalid ID"));
}
let url = &links[id as usize];
let mut hasher = Sha1::new();
@ -92,7 +95,15 @@ pub struct Header {
}
pub async fn get_classes(Query(params): Query<FilterByTeacherQuery>) -> impl IntoResponse {
let filename = download_pdf(params.id).await.unwrap();
let filename = match download_pdf(params.id).await {
Ok(x) => x,
Err(_) => {
return (
StatusCode::UNPROCESSABLE_ENTITY,
Json(json!({ "errore": "ID non valido"})),
)
}
};
let csv_content = fs::read_to_string(&filename).unwrap();
let mut rdr = csv::Reader::from_reader(csv_content.as_bytes());
@ -126,7 +137,15 @@ pub struct FilterByClassQuery {
}
pub async fn get_teachers(Query(params): Query<FilterByClassQuery>) -> impl IntoResponse {
let filename = download_pdf(params.id).await.unwrap();
let filename = match download_pdf(params.id).await {
Ok(x) => x,
Err(_) => {
return (
StatusCode::UNPROCESSABLE_ENTITY,
Json(json!({ "errore": "ID non valido"})),
)
}
};
let csv_content = fs::read_to_string(&filename).unwrap();
let mut rdr = csv::Reader::from_reader(csv_content.as_bytes());
@ -135,7 +154,15 @@ pub async fn get_teachers(Query(params): Query<FilterByClassQuery>) -> impl Into
let mut result: HashMap<String, Vec<String>> = HashMap::new();
for record in rdr.records() {
let record = record.unwrap();
let record = match record {
Ok(x) => x,
Err(_) => {
return (
StatusCode::UNPROCESSABLE_ENTITY,
Json(json!({ "errore": "Formato non supportato"})),
)
}
};
for (i, cell) in record.iter().enumerate() {
if cell == params.classe {
for (day, range) in header.weekdays.clone() {