summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--courses.go23
-rw-r--r--wsm.go21
2 files changed, 18 insertions, 26 deletions
diff --git a/courses.go b/courses.go
index d501368..4e1ea51 100644
--- a/courses.go
+++ b/courses.go
@@ -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()
diff --git a/wsm.go b/wsm.go
index 7e2c4ef..5f271ff 100644
--- a/wsm.go
+++ b/wsm.go
@@ -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")
}