package httpserver import ( // "context" "context" "log" // "time" eventsvc "github.com/SamuelTariku/FortuneBet-Backend/internal/services/event" oddssvc "github.com/SamuelTariku/FortuneBet-Backend/internal/services/odds" resultsvc "github.com/SamuelTariku/FortuneBet-Backend/internal/services/result" "github.com/robfig/cron/v3" ) func StartDataFetchingCrons(eventService eventsvc.Service, oddsService oddssvc.Service, resultService *resultsvc.Service) { c := cron.New(cron.WithSeconds()) schedule := []struct { spec string task func() }{ { spec: "0 0 * * * *", // Every 1 hour task: func() { if err := eventService.FetchUpcomingEvents(context.Background()); err != nil { log.Printf("FetchUpcomingEvents error: %v", err) } }, }, // { // spec: "*/5 * * * * *", // Every 5 seconds // task: func() { // if err := eventService.FetchLiveEvents(context.Background()); err != nil { // log.Printf("FetchLiveEvents error: %v", err) // } // }, // }, { spec: "0 */15 * * * *", // Every 15 minutes task: func() { if err := oddsService.FetchNonLiveOdds(context.Background()); err != nil { log.Printf("FetchNonLiveOdds error: %v", err) } }, }, // { // spec: "0 */15 * * * *", // task: func() { // log.Println("Fetching results for upcoming events...") // upcomingEvents, err := eventService.GetAllUpcomingEvents(context.Background()) // if err != nil { // log.Printf("Failed to fetch upcoming events: %v", err) // return // } // for _, event := range upcomingEvents { // if err := resultService.FetchAndStoreResult(context.Background(), event.ID); err != nil { // log.Printf(" Failed to fetch/store result for event %s: %v", event.ID, err) // } else { // log.Printf(" Successfully stored result for event %s", event.ID) // } // } // }, // }, { spec: "0 */15 * * * *", task: func() { log.Println("Fetching results for upcoming events...") if err := resultService.FetchAndProcessResults(context.Background()); err != nil { log.Printf("Failed to process result: %v", err) } else { log.Printf("Successfully processed all outcomes") } }, }, } for _, job := range schedule { if _, err := c.AddFunc(job.spec, job.task); err != nil { log.Fatalf("Failed to schedule cron job: %v", err) } } c.Start() log.Println("Cron jobs started for event and odds services") }