Generate Instructor Assignments

master
Joshua Herring 3 weeks ago
parent 0a6f6c00f1
commit 7c30e4a723

@ -507,11 +507,15 @@ type Section struct {
type Config struct { type Config struct {
NumberOfUsers int `json:"number_of_users"` NumberOfUsers int `json:"number_of_users"`
NumberOfSections int `json:"number_of_sections"` NumberOfSections int `json:"number_of_sections"`
NumberOfInstructors int `json:"number_of_instructors"`
EnrollmentsPerStudent int `json:"enrollments_per_student"` EnrollmentsPerStudent int `json:"enrollments_per_student"`
PercentStatus map[string]int `json:"percent_status"` PercentStatus map[string]int `json:"percent_status"`
} }
type InstructorsSections struct {
InstructorID string `json:"instructor_id"`
SectionID string `json:"section_id"`
}
var statuses = []string{"JD", "LLM", "MCL", "PHD", "SJD", "MLS", "SPEC", "MNR", "CERT", "Admin", "Instructor"} var statuses = []string{"JD", "LLM", "MCL", "PHD", "SJD", "MLS", "SPEC", "MNR", "CERT", "Admin", "Instructor"}
func GenerateUserData(config Config) []User { func GenerateUserData(config Config) []User {
@ -570,17 +574,17 @@ func SaveGeneratedUsers(users []User) {
fmt.Printf("Generated %d users to users.csv\n", len(users)) fmt.Printf("Generated %d users to users.csv\n", len(users))
} }
func GenerateSectionData(config Config) []Section { func GenerateSectionData(config Config, users []User) []Section {
// Generate unique instructor names: "LastName, X" // Build list of instructor UIDs from users with Status "Instructor"
instructorNames := make([]string, 0, config.NumberOfInstructors) instructorUIDs := make([]string, 0)
seenInstructors := make(map[string]struct{}, config.NumberOfInstructors) for _, u := range users {
for len(instructorNames) < config.NumberOfInstructors { if u.Status == "Instructor" {
name := fmt.Sprintf("%s, %c", gofakeit.LastName(), 'A'+rune(rand.Intn(26))) instructorUIDs = append(instructorUIDs, u.UID)
if _, exists := seenInstructors[name]; !exists {
seenInstructors[name] = struct{}{}
instructorNames = append(instructorNames, name)
} }
} }
if len(instructorUIDs) == 0 {
log.Fatal("no users with Status \"Instructor\" found")
}
// Generate unique course numbers: one uppercase letter + 3 digits // Generate unique course numbers: one uppercase letter + 3 digits
seenCourseNumbers := make(map[string]struct{}, config.NumberOfSections) seenCourseNumbers := make(map[string]struct{}, config.NumberOfSections)
@ -600,7 +604,7 @@ func GenerateSectionData(config Config) []Section {
my_section := course_information[rand.Intn(len(course_information))] my_section := course_information[rand.Intn(len(course_information))]
my_section.SectionID = sectionIDs[i] my_section.SectionID = sectionIDs[i]
my_section.Instructor = instructorNames[rand.Intn(len(instructorNames))] my_section.Instructor = instructorUIDs[rand.Intn(len(instructorUIDs))]
my_section.CourseType = course_type[rand.Intn(len(course_type))] my_section.CourseType = course_type[rand.Intn(len(course_type))]
sections[i] = my_section sections[i] = my_section
@ -634,6 +638,51 @@ func SaveGeneratedSections(sections []Section) {
fmt.Printf("Generated %d sections to sections.csv\n", len(sections)) fmt.Printf("Generated %d sections to sections.csv\n", len(sections))
} }
func GenerateInstructorAssignmentData(users []User, sections []Section) []InstructorsSections {
instructorUIDs := make([]string, 0)
for _, u := range users {
if u.Status == "Instructor" {
instructorUIDs = append(instructorUIDs, u.UID)
}
}
if len(instructorUIDs) == 0 {
log.Fatal("no users with Status \"Instructor\" found")
}
assignments := make([]InstructorsSections, len(sections))
for i, s := range sections {
assignments[i] = InstructorsSections{
InstructorID: instructorUIDs[i%len(instructorUIDs)],
SectionID: s.SectionID,
}
}
return assignments
}
func SaveInstructorsSections(assignments []InstructorsSections) {
f, err := os.Create("instructors_sections.csv")
if err != nil {
log.Fatalf("failed to create instructors_sections.csv: %v", err)
}
defer f.Close()
w := csv.NewWriter(f)
if err := w.Write([]string{"instructor_id", "section_id"}); err != nil {
log.Fatalf("failed to write csv header: %v", err)
}
for _, a := range assignments {
if err := w.Write([]string{a.InstructorID, a.SectionID}); err != nil {
log.Fatalf("failed to write csv row: %v", err)
}
}
w.Flush()
if err := w.Error(); err != nil {
log.Fatalf("csv flush error: %v", err)
}
fmt.Printf("Generated %d instructor assignments to instructors_sections.csv\n", len(assignments))
}
type SectionEnrollment struct { type SectionEnrollment struct {
SectionID string `json:"section_id"` SectionID string `json:"section_id"`
UID string `json:"uid"` UID string `json:"uid"`
@ -704,9 +753,12 @@ func main() {
generated_users := GenerateUserData(config) generated_users := GenerateUserData(config)
SaveGeneratedUsers(generated_users) SaveGeneratedUsers(generated_users)
generated_sections := GenerateSectionData(config) generated_sections := GenerateSectionData(config, generated_users)
SaveGeneratedSections(generated_sections) SaveGeneratedSections(generated_sections)
generated_assignments := GenerateInstructorAssignmentData(generated_users, generated_sections)
SaveInstructorsSections(generated_assignments)
generated_enrollments := GenerateSectionEnrollmentData(generated_users, generated_sections, config) generated_enrollments := GenerateSectionEnrollmentData(generated_users, generated_sections, config)
SaveGeneratedSectionEnrollments(generated_enrollments) SaveGeneratedSectionEnrollments(generated_enrollments)

Loading…
Cancel
Save