@@ -36,7 +36,7 @@ func (db *DB) GetEnrollmentsForClass(page, perPage, classId int) (int64, []model
3636 if err := tx .Count (& total ).Error ; err != nil {
3737 return 0 , nil , newNotFoundDBError (err , "program class enrollments" )
3838 }
39- if err := tx .Find ( & content ). Limit (page ).Offset (calcOffset (page , perPage )).Error ; err != nil {
39+ if err := tx .Limit (perPage ).Offset (calcOffset (page , perPage )). Find ( & content ).Error ; err != nil {
4040 return 0 , nil , newNotFoundDBError (err , "program class enrollments" )
4141 }
4242 return total , content , nil
@@ -110,43 +110,56 @@ func (db *DB) DeleteProgramClassEnrollments(id int) error {
110110}
111111
112112func (db * DB ) GraduateEnrollments (adminEmail string , userIds []int , classId int ) error {
113- enrollment := models.ProgramClassEnrollment {}
114- // begin transaction
115113 tx := db .Begin ()
116114
117- // preload necessary relationships
115+ var enrollments []models. ProgramClassEnrollment
118116 err := tx .Model (& models.ProgramClassEnrollment {}).
119117 Preload ("User.Facility" ).
120118 Preload ("Class.Program.ProgramCreditTypes" ).
121119 Preload ("Class.FacilityProg" ).
122- First (& enrollment , "class_id = ?" , classId ).Error
120+ Where ("class_id = ? AND user_id IN (?)" , classId , userIds ).
121+ Find (& enrollments ).Error
123122 if err != nil {
124123 tx .Rollback ()
125124 return newNotFoundDBError (err , "class enrollment" )
126125 }
126+ if len (enrollments ) == 0 {
127+ tx .Rollback ()
128+ return newNotFoundDBError (fmt .Errorf ("no enrollments found" ), "class enrollment" )
129+ }
130+
131+ enrollmentMap := make (map [uint ]models.ProgramClassEnrollment )
132+ for _ , e := range enrollments {
133+ enrollmentMap [e .UserID ] = e
134+ }
127135
136+ firstEnrollment := enrollments [0 ]
128137 creditType := ""
129- for i , ct := range enrollment .Class .Program .ProgramCreditTypes {
130- if i == len (enrollment .Class .Program .ProgramCreditTypes )- 1 {
138+ for i , ct := range firstEnrollment .Class .Program .ProgramCreditTypes {
139+ if i == len (firstEnrollment .Class .Program .ProgramCreditTypes )- 1 {
131140 creditType += string (ct .CreditType )
132141 } else {
133142 creditType += fmt .Sprintf ("%s," , ct .CreditType )
134143 }
135144 }
136145
137146 completions := make ([]models.ProgramCompletion , 0 , len (userIds ))
138- for i := range userIds {
147+ for _ , uid := range userIds {
148+ enrollment , exists := enrollmentMap [uint (uid )]
149+ if ! exists {
150+ continue
151+ }
139152 completions = append (completions , models.ProgramCompletion {
140153 ProgramClassID : uint (classId ),
141154 FacilityName : enrollment .User .Facility .Name ,
142- ProgramName : enrollment .Class .Program .Name ,
143- ProgramOwner : enrollment .Class .FacilityProg .ProgramOwner ,
144- ProgramID : enrollment .Class .ProgramID ,
155+ ProgramName : firstEnrollment .Class .Program .Name ,
156+ ProgramOwner : firstEnrollment .Class .FacilityProg .ProgramOwner ,
157+ ProgramID : firstEnrollment .Class .ProgramID ,
145158 AdminEmail : adminEmail ,
146- ProgramClassStartDt : enrollment .Class .StartDt ,
159+ ProgramClassStartDt : firstEnrollment .Class .StartDt ,
147160 CreditType : creditType ,
148- ProgramClassName : enrollment .Class .Name ,
149- UserID : uint (userIds [ i ] ),
161+ ProgramClassName : firstEnrollment .Class .Name ,
162+ UserID : uint (uid ),
150163 EnrolledOnDt : enrollment .CreatedAt ,
151164 })
152165 }
0 commit comments