feat(api): add api endpoint to retrieve teachers for a given class
This commit is contained in:
parent
8a553f2ebf
commit
85779086bb
@ -20,7 +20,8 @@ pub fn get_routes() -> Router {
|
||||
"/api",
|
||||
Router::new()
|
||||
.route("/pdf", get(pdf))
|
||||
.route("/classi", get(get_classes)),
|
||||
.route("/classi", get(get_classes))
|
||||
.route("/professori", get(get_teachers)),
|
||||
)
|
||||
}
|
||||
|
||||
@ -118,6 +119,49 @@ pub async fn get_classes(Query(params): Query<FilterByTeacherQuery>) -> impl Int
|
||||
)
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct FilterByClassQuery {
|
||||
id: u8,
|
||||
classe: String,
|
||||
}
|
||||
|
||||
pub async fn get_teachers(Query(params): Query<FilterByClassQuery>) -> impl IntoResponse {
|
||||
let filename = download_pdf(params.id).await.unwrap();
|
||||
let csv_content = fs::read_to_string(&filename).unwrap();
|
||||
|
||||
let mut rdr = csv::Reader::from_reader(csv_content.as_bytes());
|
||||
let header = get_header(rdr.headers().unwrap());
|
||||
|
||||
let mut result: HashMap<String, Vec<String>> = HashMap::new();
|
||||
|
||||
for record in rdr.records() {
|
||||
let record = record.unwrap();
|
||||
for (i, cell) in record.iter().enumerate() {
|
||||
if cell == params.classe {
|
||||
for (day, range) in header.weekdays.clone() {
|
||||
if range.contains(&i) {
|
||||
let value = result.entry(day).or_insert_with(|| {
|
||||
let mut v = Vec::new();
|
||||
v.resize(range.end - range.start, String::new());
|
||||
v
|
||||
});
|
||||
value[i - range.start] = record[header.teacher as usize].to_string();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if !result.is_empty() {
|
||||
(StatusCode::OK, Json(json!(result)))
|
||||
} else {
|
||||
(
|
||||
StatusCode::UNPROCESSABLE_ENTITY,
|
||||
Json(json!({ "errore": "classe non trovata"})),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_header(record: &StringRecord) -> Header {
|
||||
let mut docente: u8 = 0;
|
||||
let mut weekdays = HashMap::new();
|
||||
|
Loading…
Reference in New Issue
Block a user