From d7b92df711e11fa785e9d6cc0d86b1170de9fdd6 Mon Sep 17 00:00:00 2001 From: Ian SEBBAGH Date: Sun, 29 Oct 2023 23:11:27 +0200 Subject: [PATCH] Fix : Schedules missing with same date/times --- .gitignore | 3 +++ pkg/scraper/mada_test.go | 2 +- pkg/scraper/schedule_datawriter.go | 28 +++++++++++----------------- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index cf393be..a3b0dde 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ # GoLand IDE .idea/ +# Fleet IDE +.fleet/ + # Compiled Go programs and executables *.exe *.out diff --git a/pkg/scraper/mada_test.go b/pkg/scraper/mada_test.go index aa8b7b5..5a91c24 100644 --- a/pkg/scraper/mada_test.go +++ b/pkg/scraper/mada_test.go @@ -41,6 +41,7 @@ func setupDatabase() *gorm.DB { if err != nil { panic("failed to connect to test database") } + err = db.AutoMigrate(&api.User{}, &api.Station{}, &api.StationStatus{}, &api.StationSchedule{}) if err != nil { log.Fatalf("Failed to migrate... %+v", err) @@ -127,7 +128,6 @@ func TestScrapeMada(t *testing.T) { if len(scheduledYesterday) > 0 { t.Fatal("no yesterday dates should be present in schedule") } - todaySchedule := schedule.FilterByDate(today) if len(todaySchedule) != 5 { t.Fatal(fmt.Sprintf("today should have 5 schedule points, has: %d", len(todaySchedule))) diff --git a/pkg/scraper/schedule_datawriter.go b/pkg/scraper/schedule_datawriter.go index a0c67fa..c8abd51 100644 --- a/pkg/scraper/schedule_datawriter.go +++ b/pkg/scraper/schedule_datawriter.go @@ -49,6 +49,11 @@ func (p ScheduleDataWriter) processDonationDetails(tx *gorm.DB, donationDetails } station.Address = stationAddress + if err := tx.Save(&station).Error; err != nil { + log.Printf("Error while saving station: %v", err) + return err + } + if !p.isDatePassed(donation.DateDonation) { var schedule = api.StationSchedule{} if err := tx.FirstOrInit(&schedule, api.StationSchedule{ @@ -65,24 +70,13 @@ func (p ScheduleDataWriter) processDonationDetails(tx *gorm.DB, donationDetails schedule.StationStatus = &[]api.StationStatus{{IsOpen: true}} } - if station.StationSchedule == nil { - station.StationSchedule = &[]api.StationSchedule{schedule} - } else { - *station.StationSchedule = append(*station.StationSchedule, schedule) + if err := tx.Save(&schedule).Error; err != nil { + log.Printf("Error while saving schedule: %v", err) + return err } - } - //Gorm save station, schedule, and status at this point. That's why we are taking schedule. ID only after. - if err := tx.Save(&station).Error; err != nil { - log.Printf("Error while saving station: %v", err) - return err - } - - if station.StationSchedule != nil { - for _, schedule := range *station.StationSchedule { - if schedule.Id != nil { - schedulesIdsMap[*schedule.Id] = true - } + if schedule.Id != nil { + schedulesIdsMap[*schedule.Id] = true } } } @@ -93,7 +87,7 @@ func (p ScheduleDataWriter) processDonationDetails(tx *gorm.DB, donationDetails } var otherSchedules []api.StationSchedule - if err := tx.Not("id", schedulesIds).Where("DATE(date) >= CURRENT_DATE").Find(&otherSchedules).Error; err != nil { + if err := tx.Not("id", schedulesIds).Where("DATE(date) >= ?", p.SinceTime.Format("2006-01-02")).Find(&otherSchedules).Error; err != nil { log.Printf("Error while searching other schedules: %v", err) return err }