diff options
-rw-r--r-- | courses.go | 23 | ||||
-rw-r--r-- | wsm.go | 21 |
2 files changed, 18 insertions, 26 deletions
@@ -199,10 +199,12 @@ func populateUserCourseGroups(ctx context.Context, userCourseGroups *userCourseG if err != nil { return fmt.Errorf("error fetching user's choices while populating course groups: %w", err) } - thisGroupName, err := getCourseGroupFromCourseID(ctx, thisCourseID) - if err != nil { - return fmt.Errorf("error while populating course groups: %w", err) - } + var thisGroupName courseGroupT + func() { + coursesLock.RLock() + defer coursesLock.RUnlock() + thisGroupName = courses[thisCourseID].Group + }() if (*userCourseGroups)[thisGroupName] { return fmt.Errorf("%w: user %v, group %v", errMultipleChoicesInOneGroup, userID, thisGroupName) } @@ -211,19 +213,6 @@ func populateUserCourseGroups(ctx context.Context, userCourseGroups *userCourseG return nil } -func getCourseGroupFromCourseID(ctx context.Context, courseID int) (courseGroupT, error) { - var ret courseGroupT - err := db.QueryRow( - ctx, - "SELECT cgroup FROM courses WHERE id = $1", - courseID, - ).Scan(&ret) - if err != nil { - return ret, fmt.Errorf("error querying group of course: %w", err) - } - return ret, nil -} - func (course *courseT) decrementSelectedAndPropagate() { func() { course.SelectedLock.Lock() @@ -135,11 +135,12 @@ func messageChooseCourse(ctx context.Context, c *websocket.Conn, reportError rep go course.decrementSelectedAndPropagate() return reportError("Database error while committing transaction") } - thisCourseGroup, err := getCourseGroupFromCourseID(ctx, courseID) - if err != nil { - go course.decrementSelectedAndPropagate() - return reportError("Database error while committing transaction") - } + var thisCourseGroup courseGroupT + func() { + coursesLock.RLock() + defer coursesLock.RUnlock() + thisCourseGroup = courses[courseID].Group + }() if (*userCourseGroups)[thisCourseGroup] { go course.decrementSelectedAndPropagate() return reportError("inconsistent user course groups") @@ -202,10 +203,12 @@ func messageUnchooseCourse(ctx context.Context, c *websocket.Conn, reportError r if ct.RowsAffected() != 0 { go course.decrementSelectedAndPropagate() - thisCourseGroup, err := getCourseGroupFromCourseID(ctx, courseID) - if err != nil { - return reportError("error unsetting course group flag") - } + var thisCourseGroup courseGroupT + func() { + coursesLock.RLock() + defer coursesLock.RUnlock() + thisCourseGroup = courses[courseID].Group + }() if !(*userCourseGroups)[thisCourseGroup] { return reportError("inconsistent user course groups") } |