From 6e5521595ddfcffd73ff54d1d14270e20f9e4e71 Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Thu, 11 Apr 2024 09:24:56 +0200 Subject: [PATCH 1/4] fix:#57 fixed ss/ws check --- backend/service/fetch/v2/fetcher.go | 59 +++++++++++++----------- backend/service/fetch/v2/fetcher_test.go | 39 ++++++++++++++++ 2 files changed, 71 insertions(+), 27 deletions(-) diff --git a/backend/service/fetch/v2/fetcher.go b/backend/service/fetch/v2/fetcher.go index 238c7a2..caee8ef 100644 --- a/backend/service/fetch/v2/fetcher.go +++ b/backend/service/fetch/v2/fetcher.go @@ -69,48 +69,53 @@ func FetchAllEventsAndSave(app *pocketbase.PocketBase, clock localTime.Clock) ([ "%0A?&template=sws_modul&weeks=1-65&combined=yes", } - savedRecordsSs, errSs := fetchAndSaveAllEventsForSemester(app, time.March, time.October, "ss", clock, stubUrl) - if errSs == nil { - savedRecords = append(savedRecords, savedRecordsSs...) - } - savedRecordsWs, errWs := fetchAndSaveAllEventsForSemester(app, time.September, time.April, "ws", clock, stubUrl) - if errWs == nil { - savedRecords = append(savedRecords, savedRecordsWs...) + if isSummerSemester(clock) { + savedRecordsSs, errSs := fetchAndSaveAllEventsForSemester(app, "ss", stubUrl) + if errSs == nil { + savedRecords = append(savedRecords, savedRecordsSs...) + } + } else { + savedRecordsWs, errWs := fetchAndSaveAllEventsForSemester(app, "ws", stubUrl) + if errWs == nil { + savedRecords = append(savedRecords, savedRecordsWs...) + } } return savedRecords, err } func fetchAndSaveAllEventsForSemester( app *pocketbase.PocketBase, - before time.Month, - after time.Month, semester string, - clock localTime.Clock, stubUrl [2]string, ) ([]model.Event, error) { var err error = nil var savedRecords []model.Event - - if (clock.Now().Month() >= after) || (clock.Now().Month() <= before) { - url := stubUrl[0] + semester + stubUrl[1] - var events []model.Event - events, err = parseEventForOneSemester(url) - if err != nil { - return nil, fmt.Errorf("failed to parse events for "+semester+": %w", err) - } - err = db.DeleteAllEventsBySemesterWithoutCourse(app, "Sport", semester) - if err != nil { - return nil, fmt.Errorf("failed to delete all events for "+semester+": %w", err) - } - savedEvents, dbError := db.SaveEvents(events, app) - if dbError != nil { - return nil, fmt.Errorf("failed to save events for "+semester+": %w", dbError) - } - savedRecords = append(savedRecords, savedEvents...) + url := stubUrl[0] + semester + stubUrl[1] + var events []model.Event + events, err = parseEventForOneSemester(url) + if err != nil { + return nil, fmt.Errorf("failed to parse events for "+semester+": %w", err) } + err = db.DeleteAllEventsBySemesterWithoutCourse(app, "Sport", semester) + if err != nil { + return nil, fmt.Errorf("failed to delete all events for "+semester+": %w", err) + } + savedEvents, dbError := db.SaveEvents(events, app) + if dbError != nil { + return nil, fmt.Errorf("failed to save events for "+semester+": %w", dbError) + } + savedRecords = append(savedRecords, savedEvents...) return savedRecords, err } +func isSummerSemester(clock localTime.Clock) bool { + if clock.Now().Month() >= time.April && clock.Now().Month() <= time.September { + return true + } else { + return false + } +} + func parseEventForOneSemester(url string) ([]model.Event, error) { // Fetch Webpage from URL webpage, err := fetch.GetHTML(url) diff --git a/backend/service/fetch/v2/fetcher_test.go b/backend/service/fetch/v2/fetcher_test.go index 9b2dec1..28eb103 100644 --- a/backend/service/fetch/v2/fetcher_test.go +++ b/backend/service/fetch/v2/fetcher_test.go @@ -18,8 +18,10 @@ package v2 import ( "htwkalender/model" + mockTime "htwkalender/service/functions/time" "reflect" "testing" + "time" ) func Test_switchNameAndNotesForExam(t *testing.T) { @@ -97,3 +99,40 @@ func Test_switchNameAndNotesForExam(t *testing.T) { }) } } + +func Test_isSummerSemester(t *testing.T) { + type args struct { + clock mockTime.MockClock + } + tests := []struct { + name string + args args + want bool + }{ + { + name: "is summer semester", + args: args{ + clock: mockTime.MockClock{ + NowTime: time.Date(2024, 6, 1, 0, 0, 0, 0, time.UTC), + }, + }, + want: true, + }, + { + name: "is not summer semester", + args: args{ + clock: mockTime.MockClock{ + NowTime: time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC), + }, + }, + want: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := isSummerSemester(tt.args.clock); got != tt.want { + t.Errorf("isSummerSemester() = %v, want %v", got, tt.want) + } + }) + } +} From 2f0fa03b58ac13cfbb3bccd64879a2d7be09948f Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Thu, 11 Apr 2024 14:48:12 +0200 Subject: [PATCH 2/4] fix:#57 lint error var --- backend/service/fetch/v2/fetcher.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/backend/service/fetch/v2/fetcher.go b/backend/service/fetch/v2/fetcher.go index caee8ef..27363d6 100644 --- a/backend/service/fetch/v2/fetcher.go +++ b/backend/service/fetch/v2/fetcher.go @@ -88,11 +88,9 @@ func fetchAndSaveAllEventsForSemester( semester string, stubUrl [2]string, ) ([]model.Event, error) { - var err error = nil var savedRecords []model.Event url := stubUrl[0] + semester + stubUrl[1] - var events []model.Event - events, err = parseEventForOneSemester(url) + events, err := parseEventForOneSemester(url) if err != nil { return nil, fmt.Errorf("failed to parse events for "+semester+": %w", err) } From 12ad56808841935143153e541f15b3f486eb6632 Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Thu, 11 Apr 2024 17:23:04 +0200 Subject: [PATCH 3/4] feat:#57 updated function and calc --- backend/service/fetch/v2/fetcher.go | 38 ++++++++++++++---------- backend/service/fetch/v2/fetcher_test.go | 25 +++++++++++----- 2 files changed, 40 insertions(+), 23 deletions(-) diff --git a/backend/service/fetch/v2/fetcher.go b/backend/service/fetch/v2/fetcher.go index 27363d6..57a9aef 100644 --- a/backend/service/fetch/v2/fetcher.go +++ b/backend/service/fetch/v2/fetcher.go @@ -69,17 +69,15 @@ func FetchAllEventsAndSave(app *pocketbase.PocketBase, clock localTime.Clock) ([ "%0A?&template=sws_modul&weeks=1-65&combined=yes", } - if isSummerSemester(clock) { - savedRecordsSs, errSs := fetchAndSaveAllEventsForSemester(app, "ss", stubUrl) - if errSs == nil { - savedRecords = append(savedRecords, savedRecordsSs...) - } - } else { - savedRecordsWs, errWs := fetchAndSaveAllEventsForSemester(app, "ws", stubUrl) - if errWs == nil { - savedRecords = append(savedRecords, savedRecordsWs...) + // Fetch and save events for all semesters + for _, semester := range calculateSemesterList(clock) { + events, fetchErr := fetchAndSaveAllEventsForSemester(app, semester, stubUrl) + if fetchErr != nil { + return nil, fmt.Errorf("failed to fetch and save events for "+semester+": %w", err) } + savedRecords = append(savedRecords, events...) } + return savedRecords, err } @@ -106,12 +104,23 @@ func fetchAndSaveAllEventsForSemester( return savedRecords, err } -func isSummerSemester(clock localTime.Clock) bool { - if clock.Now().Month() >= time.April && clock.Now().Month() <= time.September { - return true - } else { - return false +func calculateSemesterList(clock localTime.Clock) []string { + summerSemester := clock.Now().Month() >= time.March && clock.Now().Month() <= time.September + winterSemester := clock.Now().Month() <= time.March || clock.Now().Month() >= time.September + + if summerSemester && winterSemester { + return []string{"ss", "ws"} } + + if summerSemester { + return []string{"ss"} + } + + if winterSemester { + return []string{"ws"} + } + + return []string{"ss", "ws"} } func parseEventForOneSemester(url string) ([]model.Event, error) { @@ -131,7 +140,6 @@ func parseEventForOneSemester(url string) ([]model.Event, error) { // Get all event tables and all day labels eventTables := getEventTables(doc) allDayLabels := getAllDayLabels(doc) - eventsWithCombinedWeeks := toEvents(eventTables, allDayLabels) splitEventsByWeekVal := splitEventsByWeek(eventsWithCombinedWeeks) diff --git a/backend/service/fetch/v2/fetcher_test.go b/backend/service/fetch/v2/fetcher_test.go index 28eb103..2223549 100644 --- a/backend/service/fetch/v2/fetcher_test.go +++ b/backend/service/fetch/v2/fetcher_test.go @@ -100,14 +100,14 @@ func Test_switchNameAndNotesForExam(t *testing.T) { } } -func Test_isSummerSemester(t *testing.T) { +func Test_calculateSemesterList(t *testing.T) { type args struct { - clock mockTime.MockClock + clock mockTime.Clock } tests := []struct { name string args args - want bool + want []string }{ { name: "is summer semester", @@ -116,22 +116,31 @@ func Test_isSummerSemester(t *testing.T) { NowTime: time.Date(2024, 6, 1, 0, 0, 0, 0, time.UTC), }, }, - want: true, + want: []string{"ss"}, }, { - name: "is not summer semester", + name: "is winter semester", args: args{ clock: mockTime.MockClock{ NowTime: time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC), }, }, - want: false, + want: []string{"ws"}, + }, + { + name: "is in both", + args: args{ + clock: mockTime.MockClock{ + NowTime: time.Date(2024, 3, 22, 0, 0, 0, 0, time.UTC), + }, + }, + want: []string{"ss", "ws"}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if got := isSummerSemester(tt.args.clock); got != tt.want { - t.Errorf("isSummerSemester() = %v, want %v", got, tt.want) + if got := calculateSemesterList(tt.args.clock); !reflect.DeepEqual(got, tt.want) { + t.Errorf("calculateSemesterList() = %v, want %v", got, tt.want) } }) } From 903ee7576d58097cf05ad7159a8f0e7477bad5ed Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Thu, 11 Apr 2024 17:37:50 +0200 Subject: [PATCH 4/4] feat:#57 updated slog for sports fetch --- backend/service/fetch/sport/sportFetcher.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/service/fetch/sport/sportFetcher.go b/backend/service/fetch/sport/sportFetcher.go index 6d45558..f17f41c 100644 --- a/backend/service/fetch/sport/sportFetcher.go +++ b/backend/service/fetch/sport/sportFetcher.go @@ -208,7 +208,7 @@ func getWeekEvents(start time.Time, end time.Time, cycle string) ([]time.Time, [ for _, day := range days { weekDay, err := getDayInt(day) if err != nil { - slog.Error("Error while getting day int", err) + slog.Error("Error while getting day int: "+day+" ", err) } else { weekEvents = append(weekEvents, model.SportDayStartEnd{ Start: time.Date(start.Year(), start.Month(), start.Day(), startHour, startMinute, 0, 0, start.Location()), @@ -233,7 +233,7 @@ func getWeekEvents(start time.Time, end time.Time, cycle string) ([]time.Time, [ endI, endIErr = getDayInt(days[1]) if endIErr != nil || startIErr != nil { - slog.Error("Error while getting day int", startIErr, endIErr) + slog.Error("Error while getting day int: "+days[0]+" - "+days[1]+" :", startIErr, endIErr) } else { //create a int array with all days from start to end day var daysBetween []int @@ -258,7 +258,7 @@ func getWeekEvents(start time.Time, end time.Time, cycle string) ([]time.Time, [ dayInt, err := getDayInt(day) if err != nil { - slog.Error("Error while getting day int", err) + slog.Error("Error while getting day int: "+day+" ", err) } else { dayNumbers = append(dayNumbers, dayInt) } @@ -270,7 +270,7 @@ func getWeekEvents(start time.Time, end time.Time, cycle string) ([]time.Time, [ weekDay, err := getDayInt(day) if err != nil { - slog.Error("Error while getting day int", err) + slog.Error("Error while getting day int: "+day+" ", err) } else { weekEvents = append(weekEvents, model.SportDayStartEnd{ Start: time.Date(start.Year(), start.Month(), start.Day(), startHour, startMinute, 0, 0, start.Location()),