diff --git a/backend/service/fetch/sport/sportFetcher.go b/backend/service/fetch/sport/sportFetcher.go index 3c7ae91..6d45558 100644 --- a/backend/service/fetch/sport/sportFetcher.go +++ b/backend/service/fetch/sport/sportFetcher.go @@ -110,7 +110,7 @@ func formatEntriesToEvents(entries []model.SportEntry) []model.Event { var event = model.Event{ UUID: uuid.NewSHA1(uuid.NameSpaceDNS, []byte(entry.Title+entry.ID+entry.Details.Type)).String(), - Day: toGermanWeekdayString(entry.Details.DateRange.Start.Weekday()), + Day: toGermanWeekdayString(start.Time().Weekday()), Week: strconv.Itoa(23), Start: start, End: end, @@ -129,8 +129,9 @@ func formatEntriesToEvents(entries []model.SportEntry) []model.Event { return events } -func getDayInt(weekDay string) int { +func getDayInt(weekDay string) (int, error) { var weekDayInt int + var err error = nil switch weekDay { case "Mo": weekDayInt = 1 @@ -146,8 +147,13 @@ func getDayInt(weekDay string) int { weekDayInt = 6 case "So": weekDayInt = 0 + default: + { + err = errors.New("no day found") + weekDayInt = -1 + } } - return weekDayInt + return weekDayInt, err } func toGermanWeekdayString(weekday time.Weekday) string { @@ -200,11 +206,16 @@ func getWeekEvents(start time.Time, end time.Time, cycle string) ([]time.Time, [ // creating a SportDayStartEnd for each day in the cycle for _, day := range days { - weekEvents = append(weekEvents, model.SportDayStartEnd{ - Start: time.Date(start.Year(), start.Month(), start.Day(), startHour, startMinute, 0, 0, start.Location()), - End: time.Date(end.Year(), end.Month(), end.Day(), endHour, endMinute, 0, 0, end.Location()), - Day: time.Weekday(getDayInt(day)), - }) + weekDay, err := getDayInt(day) + if err != nil { + slog.Error("Error while getting day int", err) + } else { + weekEvents = append(weekEvents, model.SportDayStartEnd{ + Start: time.Date(start.Year(), start.Month(), start.Day(), startHour, startMinute, 0, 0, start.Location()), + End: time.Date(end.Year(), end.Month(), end.Day(), endHour, endMinute, 0, 0, end.Location()), + Day: time.Weekday(weekDay), + }) + } } } @@ -216,19 +227,22 @@ func getWeekEvents(start time.Time, end time.Time, cycle string) ([]time.Time, [ days := dayRegExp.FindAllString(cyclePart, 2) startHour, startMinute, endHour, endMinute := extractStartAndEndTime(cyclePart) - //create a int array with all days from start to end day - var daysBetween []int - for i := getDayInt(days[0]); i <= getDayInt(days[1]); i++ { - daysBetween = append(daysBetween, i) - } + var startI, endI int + var endIErr, startIErr error + startI, startIErr = getDayInt(days[0]) + endI, endIErr = getDayInt(days[1]) - // creating a SportDayStartEnd for each day in the cycle - for _, day := range daysBetween { - weekEvents = append(weekEvents, model.SportDayStartEnd{ - Start: time.Date(start.Year(), start.Month(), start.Day(), startHour, startMinute, 0, 0, start.Location()), - End: time.Date(end.Year(), end.Month(), end.Day(), endHour, endMinute, 0, 0, end.Location()), - Day: time.Weekday(day), - }) + if endIErr != nil || startIErr != nil { + slog.Error("Error while getting day int", startIErr, endIErr) + } else { + //create a int array with all days from start to end day + var daysBetween []int + for i := startI; i <= endI; i++ { + daysBetween = append(daysBetween, i) + } + + // creating a SportDayStartEnd for each day in the cycle + weekEvents = createEventListFromStartToEndMatchingDay23(daysBetween, start, startHour, startMinute, end, endHour, endMinute) } } @@ -239,13 +253,31 @@ func getWeekEvents(start time.Time, end time.Time, cycle string) ([]time.Time, [ days := dayRegExp.FindAllString(cyclePart, -1) startHour, startMinute, endHour, endMinute := extractStartAndEndTime(cyclePart) - // creating a SportDayStartEnd for each day in the cycle + var dayNumbers []int for _, day := range days { - weekEvents = append(weekEvents, model.SportDayStartEnd{ - Start: time.Date(start.Year(), start.Month(), start.Day(), startHour, startMinute, 0, 0, start.Location()), - End: time.Date(end.Year(), end.Month(), end.Day(), endHour, endMinute, 0, 0, end.Location()), - Day: time.Weekday(getDayInt(day)), - }) + + dayInt, err := getDayInt(day) + if err != nil { + slog.Error("Error while getting day int", err) + } else { + dayNumbers = append(dayNumbers, dayInt) + } + } + + // creating a SportDayStartEnd for each day in the cycle + weekEvents = append(weekEvents, createEventListFromStartToEndMatchingDay23(dayNumbers, start, startHour, startMinute, end, endHour, endMinute)...) + for _, day := range days { + + weekDay, err := getDayInt(day) + if err != nil { + slog.Error("Error while getting day int", err) + } else { + weekEvents = append(weekEvents, model.SportDayStartEnd{ + Start: time.Date(start.Year(), start.Month(), start.Day(), startHour, startMinute, 0, 0, start.Location()), + End: time.Date(end.Year(), end.Month(), end.Day(), endHour, endMinute, 0, 0, end.Location()), + Day: time.Weekday(weekDay), + }) + } } } } @@ -262,6 +294,21 @@ func getWeekEvents(start time.Time, end time.Time, cycle string) ([]time.Time, [ return startDatesList, endDatesList } +// creating a SportDayStartEnd for each day in the cycle +func createEventListFromStartToEndMatchingDay23(days []int, start time.Time, startHour int, startMinute int, end time.Time, endHour int, endMinute int) []model.SportDayStartEnd { + + var weekEvents []model.SportDayStartEnd + + for _, day := range days { + weekEvents = append(weekEvents, model.SportDayStartEnd{ + Start: time.Date(start.Year(), start.Month(), start.Day(), startHour, startMinute, 0, 0, start.Location()), + End: time.Date(end.Year(), end.Month(), end.Day(), endHour, endMinute, 0, 0, end.Location()), + Day: time.Weekday(day), + }) + } + return weekEvents +} + func createEventListFromStartToEndMatchingDay(weekEvent model.SportDayStartEnd) ([]time.Time, []time.Time) { var startDates []time.Time var endDates []time.Time