From 36c1c902bcee7032f9394a48e54cce9ddc600a4e Mon Sep 17 00:00:00 2001 From: TheSilentSage Date: Sat, 28 Dec 2024 18:41:22 +0530 Subject: [PATCH] feat: added courses table --- .../cli/commands/timetableCommands.go | 35 +++++++++++++++++++ vitty-backend-api/internal/models/courses.go | 6 ++++ .../internal/models/initialize.go | 1 + 3 files changed, 42 insertions(+) create mode 100644 vitty-backend-api/internal/models/courses.go diff --git a/vitty-backend-api/cli/commands/timetableCommands.go b/vitty-backend-api/cli/commands/timetableCommands.go index daac625..99d2a41 100644 --- a/vitty-backend-api/cli/commands/timetableCommands.go +++ b/vitty-backend-api/cli/commands/timetableCommands.go @@ -22,6 +22,13 @@ var TimetableCommands = []*cli.Command{ Usage: "Fix slot times", Action: fixSlotTimes, }, + { + + Name: "seed-course-table", + Aliases: []string{"sct"}, + Usage: "populate course table", + Action: seedCourseTable, + }, } func parseTimetable(c *cli.Context) error { @@ -73,3 +80,31 @@ func fixSlotTimes(c *cli.Context) error { } return nil } + +func seedCourseTable(c *cli.Context) error { + reset := "\033[0m" + red := "\033[31m" + green := "\033[32m" + cyan := "\033[36m " + + fmt.Print(cyan, "Seeding.. ", reset) + err := database.DB.Exec(` + INSERT INTO courses (course_id, course_name) + SELECT + DISTINCT ON(elems.data->>'code') + elems.data->>'code' AS CourseCode, + elems.data->>'name' AS CourseName + FROM + timetables, + jsonb_array_elements(timetables.slots::jsonb) AS elems(data) + `).Error + + if err != nil { + fmt.Println(red, "Failed") + fmt.Println("Error: ", err, reset) + } + + fmt.Println(green, "Done", reset) + + return nil +} diff --git a/vitty-backend-api/internal/models/courses.go b/vitty-backend-api/internal/models/courses.go new file mode 100644 index 0000000..450d853 --- /dev/null +++ b/vitty-backend-api/internal/models/courses.go @@ -0,0 +1,6 @@ +package models + +type Courses struct { + CourseId string `gorm:"primaryKey"` + CourseName string +} diff --git a/vitty-backend-api/internal/models/initialize.go b/vitty-backend-api/internal/models/initialize.go index 4181fd3..61f7665 100644 --- a/vitty-backend-api/internal/models/initialize.go +++ b/vitty-backend-api/internal/models/initialize.go @@ -11,6 +11,7 @@ func InitializeModels() { "User": &User{}, "Timetable": &Timetable{}, "Friend Requests": &FriendRequest{}, + "Courses": &Courses{}, } for name, model := range MODELS {