1- use std:: collections:: BTreeMap ;
2-
31use :: octocrab:: models:: { teams:: RequestedTeam , Author } ;
42use anyhow:: Context ;
53use 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 ) ]
219212pub struct AttendanceResponse {
220- courses : CourseAttendance ,
213+ #[ serde( flatten) ]
214+ attendance : Attendance ,
215+ sprint : String ,
216+ module : String ,
217+ batch : String ,
221218}
222219
223220pub 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