diff --git a/bin/pinned_message b/bin/pinned_message index 5c2fd72..33c7c01 100755 Binary files a/bin/pinned_message and b/bin/pinned_message differ diff --git a/bin/pinned_message_macos_arm64 b/bin/pinned_message_macos_arm64 index 5c2fd72..33c7c01 100755 Binary files a/bin/pinned_message_macos_arm64 and b/bin/pinned_message_macos_arm64 differ diff --git a/internal/services/schedule_parser/service.go b/internal/services/schedule_parser/service.go index 834eb8e..10c6bc8 100644 --- a/internal/services/schedule_parser/service.go +++ b/internal/services/schedule_parser/service.go @@ -7,6 +7,7 @@ import ( "pinned_message/internal/modules/data_parser" "pinned_message/internal/modules/date_parser" "pinned_message/internal/services/schedule_storage" + "sort" "strings" "time" ) @@ -76,23 +77,32 @@ func (p *ScheduleParser) parseSchedule(ctx context.Context, sheetURL string) (*m } func (p *ScheduleParser) mapSchedule(performances []performance) *models.Schedule { - days := []*models.Day{} - currentDay := &models.Day{} - for i, performance := range performances { + days := map[time.Time]*models.Day{} + var currentDate time.Time + var prevDate time.Time + for _, performance := range performances { if performance.Name == "" || performance.Name == "-" { continue } + if performance.Date != "" { - if i > 0 { - days = append(days, currentDay) - currentDay = &models.Day{} - } date, err := p.mapDate(performance.Date) if err != nil { panic(err) } - currentDay.Date = date + currentDate = date } + if performance.Date == "" { + currentDate = prevDate + } + + if _, ok := days[currentDate]; !ok { + days[currentDate] = &models.Day{ + Date: currentDate, + } + } + currentDay := days[currentDate] + currentDay.Performances = append( currentDay.Performances, &models.DayPerformance{ @@ -104,11 +114,12 @@ func (p *ScheduleParser) mapSchedule(performances []performance) *models.Schedul Costumes: performance.Costumes, }, ) + prevDate = currentDate } - days = append(days, currentDay) + return &models.Schedule{ UpdateTime: time.Now().String(), - Days: days, + Days: p.mapToSortedArray(days), } } @@ -132,3 +143,17 @@ func (p *ScheduleParser) mapNumbers(numbers string) []*models.Number { } return res } + +func (p *ScheduleParser) mapToSortedArray(m map[time.Time]*models.Day) []*models.Day { + result := make([]*models.Day, 0, len(m)) + + for _, day := range m { + result = append(result, day) + } + + sort.Slice(result, func(i, j int) bool { + return result[i].Date.Before(result[j].Date) + }) + + return result +}