package main import ( "chatapp-cron/internal/config" "chatapp-cron/internal/integration" "chatapp-cron/internal/repo" "chatapp-cron/internal/service" "context" "log" "os/signal" "syscall" "time" ) func main() { cfg := config.Load() repository, err := repo.New(cfg) if err != nil { log.Fatalf("init repository failed: %v", err) } ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := repository.Ping(ctx); err != nil { log.Fatalf("ping dependencies failed: %v", err) } javaClient := integration.New(cfg) settlementService := service.NewWeekStarSettlementService(cfg, repository, javaClient) roomTurnoverRewardService := service.NewRoomTurnoverRewardSettlementService(cfg, repository, javaClient) workerCtx, workerCancel := context.WithCancel(context.Background()) defer workerCancel() settlementService.Start(workerCtx) roomTurnoverRewardService.Start(workerCtx) log.Printf( "week-star-job started. weekStarInterval=%s roomTurnoverInterval=%s timezone=%s javaOther=%s javaWallet=%s", cfg.WeekStarSettleInterval, cfg.RoomTurnoverSettleInterval, cfg.WeekStarTimezone, cfg.JavaOtherBaseURL, cfg.JavaWalletBaseURL, ) shutdownSignal, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) defer stop() <-shutdownSignal.Done() log.Printf("week-star-job shutdown signal received") workerCancel() time.Sleep(300 * time.Millisecond) }