Skip to content

Commit 0f7d76a

Browse files
committed
attendance respoce restructured to ba an array
1 parent f9a3344 commit 0f7d76a

1 file changed

Lines changed: 23 additions & 36 deletions

File tree

src/endpoints.rs

Lines changed: 23 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::collections::BTreeMap;
2-
31
use ::octocrab::models::{teams::RequestedTeam, Author};
42
use anyhow::Context;
53
use axum::{
@@ -210,25 +208,23 @@ pub async fn get_region(
210208
}))
211209
}
212210

213-
type SprintAttendance = BTreeMap<String, Vec<Attendance>>;
214-
type ModuleAttendance = BTreeMap<String, SprintAttendance>;
215-
type BatchAttendance = BTreeMap<String, ModuleAttendance>;
216-
type CourseAttendance = BTreeMap<String, BatchAttendance>;
217-
218211
#[derive(Serialize)]
219212
pub struct AttendanceResponse {
220-
courses: CourseAttendance,
213+
#[serde(flatten)]
214+
attendance: Attendance,
215+
sprint: String,
216+
module: String,
217+
batch: String,
221218
}
222219

223220
pub async fn fetch_attendance(
224221
session: Session,
225222
State(server_state): State<ServerState>,
226223
OriginalUri(original_uri): OriginalUri,
227-
) -> Result<Json<AttendanceResponse>, Error> {
224+
) -> Result<Json<Vec<AttendanceResponse>>, Error> {
228225
let all_courses = &server_state.config.courses;
229226
let sheets_client = sheets_client(&session, server_state.clone(), original_uri.clone()).await?;
230227

231-
let mut courses: CourseAttendance = BTreeMap::new();
232228
let mut register_futures = Vec::new();
233229
for (course_name, course_info) in all_courses {
234230
for batch_name in course_info.batches.keys() {
@@ -253,32 +249,23 @@ pub async fn fetch_attendance(
253249
}
254250
let register_info = join_all(register_futures).await;
255251

256-
for (course_name, batch_name, register_result) in register_info {
252+
let mut registered_attendance = Vec::new();
253+
254+
for (_course_name, batch_name, register_result) in register_info {
257255
let register = register_result?;
258-
let modules = register
259-
.modules
260-
.into_iter()
261-
.map(|(module_name, sprint_info)| {
262-
(
263-
module_name,
264-
sprint_info
265-
.attendance
266-
.into_iter()
267-
.enumerate()
268-
.map(|(sprint_number, sprint_info)| {
269-
(
270-
format!("Sprint-{}", sprint_number + 1),
271-
sprint_info.into_values().collect(),
272-
)
273-
})
274-
.collect(),
275-
)
276-
})
277-
.collect();
278-
courses
279-
.entry(course_name)
280-
.or_default()
281-
.insert(batch_name, modules);
256+
for (module_name, sprint_info) in register.modules {
257+
for (sprint_number, attendance_info) in sprint_info.attendance.iter().enumerate() {
258+
let sprint_name = format!("Sprint-{}", sprint_number + 1);
259+
for attendance in attendance_info.values() {
260+
registered_attendance.push(AttendanceResponse {
261+
attendance: attendance.clone(),
262+
sprint: sprint_name.clone(),
263+
module: module_name.clone(),
264+
batch: batch_name.clone(),
265+
});
266+
}
267+
}
268+
}
282269
}
283-
Ok(Json(AttendanceResponse { courses }))
270+
Ok(Json(registered_attendance))
284271
}

0 commit comments

Comments
 (0)