Skip to content

Commit 7ae0c12

Browse files
committed
fix: add changes per requests
1 parent c4572fd commit 7ae0c12

File tree

3 files changed

+32
-19
lines changed

3 files changed

+32
-19
lines changed

backend/src/database/events_attendance.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ func (db *DB) GetActiveClassesForMissingAttendance(args *models.QueryContext, fa
403403
var missClasses []models.MissingAttendanceClass
404404
classQuery := db.WithContext(args.Ctx).
405405
Table("program_classes c").
406-
Select("c.id, c.name, f.name as facility_name").
406+
Select("c.id, c.name, f.name as facility_name, c.facility_id").
407407
Joins("JOIN facilities f ON f.id = c.facility_id").
408408
Where("c.status = ?", models.Active).
409409
Where("c.archived_at IS NULL")

backend/src/models/class_event.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ type MissingAttendanceClass struct {
268268
ID uint `json:"id"`
269269
Name string `json:"name"`
270270
FacilityName string `json:"facility_name"`
271+
FacilityID uint `json:"facility_id"`
271272
}
272273

273274
type EventDates struct {

backend/src/services/classes.go

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,24 @@ func (svc *ClassesService) GetFacilityHealthSummaries(args *models.QueryContext,
2929
return nil, err
3030
}
3131

32-
missingByFacility := make(map[uint]int64, len(summaries))
33-
for _, summary := range summaries {
34-
facilityRef := summary.FacilityID
35-
items, err := svc.GetMissingAttendanceForFacility(args, &facilityRef, days)
36-
if err != nil {
37-
return nil, err
38-
}
39-
if len(items) == 0 {
32+
items, classByID, err := svc.getMissingAttendanceForFacilityData(args, facilityID, days)
33+
if err != nil {
34+
return nil, err
35+
}
36+
37+
missingByFacilityClasses := make(map[uint]map[uint]struct{})
38+
for _, item := range items {
39+
classInfo, ok := classByID[item.ClassID]
40+
if !ok {
4041
continue
4142
}
42-
classIDs := make(map[uint]struct{}, len(items))
43-
for _, item := range items {
44-
classIDs[item.ClassID] = struct{}{}
43+
if _, exists := missingByFacilityClasses[classInfo.FacilityID]; !exists {
44+
missingByFacilityClasses[classInfo.FacilityID] = make(map[uint]struct{})
4545
}
46+
missingByFacilityClasses[classInfo.FacilityID][item.ClassID] = struct{}{}
47+
}
48+
missingByFacility := make(map[uint]int64, len(missingByFacilityClasses))
49+
for facilityRef, classIDs := range missingByFacilityClasses {
4650
missingByFacility[facilityRef] = int64(len(classIDs))
4751
}
4852

@@ -70,15 +74,23 @@ func getCanonicalHourAndMinute(occurrences []time.Time, timezone string) (int, i
7074
}
7175

7276
func (svc *ClassesService) GetMissingAttendanceForFacility(args *models.QueryContext, facilityID *uint, days int) ([]models.MissingAttendanceItem, error) {
77+
items, _, err := svc.getMissingAttendanceForFacilityData(args, facilityID, days)
78+
if err != nil {
79+
return nil, err
80+
}
81+
return items, nil
82+
}
83+
84+
func (svc *ClassesService) getMissingAttendanceForFacilityData(args *models.QueryContext, facilityID *uint, days int) ([]models.MissingAttendanceItem, map[uint]models.MissingAttendanceClass, error) {
7385
if days <= 0 {
7486
days = 3
7587
}
7688
classes, err := svc.db.GetActiveClassesForMissingAttendance(args, facilityID)
7789
if err != nil {
78-
return nil, err
90+
return nil, nil, err
7991
}
8092
if len(classes) == 0 {
81-
return []models.MissingAttendanceItem{}, nil
93+
return []models.MissingAttendanceItem{}, map[uint]models.MissingAttendanceClass{}, nil
8294
}
8395

8496
loc, err := time.LoadLocation(args.Timezone)
@@ -98,7 +110,7 @@ func (svc *ClassesService) GetMissingAttendanceForFacility(args *models.QueryCon
98110

99111
events, err := svc.db.GetClassEventsWithOverrides(args, classIDs)
100112
if err != nil {
101-
return nil, err
113+
return nil, nil, err
102114
}
103115

104116
type eventInstance struct {
@@ -146,7 +158,7 @@ func (svc *ClassesService) GetMissingAttendanceForFacility(args *models.QueryCon
146158
}
147159
}
148160
if len(instances) == 0 {
149-
return []models.MissingAttendanceItem{}, nil
161+
return []models.MissingAttendanceItem{}, classByID, nil
150162
}
151163

152164
eventIDs := make([]uint, 0, len(eventIDSet))
@@ -160,7 +172,7 @@ func (svc *ClassesService) GetMissingAttendanceForFacility(args *models.QueryCon
160172

161173
attendanceCounts, err := svc.db.GetAttendanceCountsForEvents(args, eventIDs, dates)
162174
if err != nil {
163-
return nil, err
175+
return nil, nil, err
164176
}
165177
attendanceMap := make(map[string]int64, len(attendanceCounts))
166178
for _, attendance := range attendanceCounts {
@@ -174,7 +186,7 @@ func (svc *ClassesService) GetMissingAttendanceForFacility(args *models.QueryCon
174186
}
175187
enrollments, err := svc.db.GetActiveEnrollmentsForClasses(args, classIDs)
176188
if err != nil {
177-
return nil, err
189+
return nil, nil, err
178190
}
179191
enrollmentsByClass := make(map[uint][]enrollmentWindow, len(classIDs))
180192
for _, enrollment := range enrollments {
@@ -222,7 +234,7 @@ func (svc *ClassesService) GetMissingAttendanceForFacility(args *models.QueryCon
222234
return items[i].Date > items[j].Date
223235
})
224236

225-
return items, nil
237+
return items, classByID, nil
226238
}
227239

228240
func (svc *ClassesService) GetTodaysSchedule(args *models.QueryContext, facilityID *uint) ([]models.TodaysScheduleItem, error) {

0 commit comments

Comments
 (0)