aboutsummaryrefslogtreecommitdiff
path: root/courses.go (follow)
Commit message (Expand)AuthorAgeFilesLines
* *.go: Catch panics during requestsRunxi Yu4 days1-1/+9
* Add course metadata course_id and section_id for PowerSchoolRunxi Yu4 days1-1/+5
* Display allowed groups/types on csv error; course{Group,Type}T -> stringRunxi Yu5 days1-2/+2
* *.go: Use wrapError() for brevityRunxi Yu5 days1-8/+5
* *.go: Restructure backend filesRunxi Yu5 days1-110/+0
* Combine "Enrichment" and "Culture" into "Non-sport"Runxi Yu5 days1-6/+4
* courses.go: courseTypes should be a map[courseTypeT]struct{}Runxi Yu5 days1-4/+4
* Allow staff to upload a CSV containing coursesRunxi Yu6 days1-3/+4
* *.go, tmpl/staff.html: Allow staff to export choicesRunxi Yu7 days1-0/+2
* {courses,wsc}.go: Atomic 64-bit alignmentRunxi Yu7 days1-3/+6
* *.go: Update commentsRunxi Yu7 days1-9/+4
* {courses,index}.go, student.html, style.css: Group by course groupRunxi Yu7 days1-9/+11
* *.go: Use sync.Map instead of map[int]*courseT for coursesRunxi Yu7 days1-35/+18
* {courses,wsc,wsp}.go: Usems should be sync.MapRunxi Yu7 days1-5/+2
* {courses,wsc,wsm}.go: map[courseGroupT](bool->struct{})Runxi Yu8 days1-3/+3
* *.go: Further wrap errorsRunxi Yu8 days1-8/+14
* err.go: Create, and unify some error definitionsRunxi Yu8 days1-7/+0
* {courses,wsm,wsp}.go: Make course.Selected atomicRunxi Yu9 days1-4/+5
* *.go: Limit to approximately 80 characters per lineRunxi Yu10 days1-12/+56
* {courses,wsc,wsm,wsp}.go: Send course number immediately on user interactionRunxi Yu10 days1-2/+9
* *: Overhaul structure again and embed everythingRunxi Yu10 days1-0/+229
* *.go: Move to backendRunxi Yu11 days1-229/+0
* {courses,wsm}.go: Use in-memory structure to fetch cgroup, not SQLRunxi Yu11 days1-17/+6
* {courses,sem,ws,wsm}.go: Second step towards an efficient state propagatorRunxi Yu11 days1-4/+6
* {courses,sem,ws}.go: First step towards an efficient state propagatorRunxi Yu11 days1-1/+10
* courses.go: ReformatRunxi Yu11 days1-1/+1
* {courses,wsm}.go: Add getCourseByIDRunxi Yu11 days1-0/+6
* {courses,wsm}.go: Add (*courseT).decrementSelectedAndPropagateRunxi Yu11 days1-0/+11
* {courses,ws,wsm}.go: Update userCourseGroups during choose/unchooseRunxi Yu11 days1-7/+18
* {courses,ws}.go: Populate userCourseGroups in a separate functionRunxi Yu11 days1-0/+34
* {courses,ws}.go: Populate userCourseGroups for each connectionRunxi Yu12 days1-5/+19
* courses.go, schema.sql: Validate course{Type,Group} in server, not SQLRunxi Yu12 days1-10/+44
* courses.go: Propagate course.Selected when setting up coursesRunxi Yu2024-10-011-2/+7
* *: Change license to AGPL-3.0-or-laterRunxi Yu2024-09-301-21/+11
* courses.go: courseT.{Lock->SelectedLock}Runxi Yu2024-09-291-12/+12
* courses.go: Add a RWMutex to courseTRunxi Yu2024-09-281-8/+15
* courses.go, etc: Make courses a map instead of a sliceRunxi Yu2024-09-261-3/+3
* *.go, cca.scfg.example: Expose performance optionsRunxi Yu2024-09-261-1/+1
* *.go: Wrap errorsRunxi Yu2024-09-261-3/+4
* *.go: LintingRunxi Yu2024-09-241-11/+11
* courses.go: Comment out coursetype_t enum to make linter happy for nowRunxi Yu2024-09-241-5/+7
* *.go: Add more licensesRunxi Yu2024-09-091-0/+30
* *.go: Add commentsRunxi Yu2024-09-091-2/+18
* courses.go: Remove unused importsRunxi Yu2024-09-081-1/+0
* *: Display coursesRunxi Yu2024-09-081-0/+69