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",
|
"/api",
|
||||||
Router::new()
|
Router::new()
|
||||||
.route("/pdf", get(pdf))
|
.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 {
|
pub fn get_header(record: &StringRecord) -> Header {
|
||||||
let mut docente: u8 = 0;
|
let mut docente: u8 = 0;
|
||||||
let mut weekdays = HashMap::new();
|
let mut weekdays = HashMap::new();
|
||||||
|
Loading…
Reference in New Issue
Block a user