package data_updater import ( "amocrm/internal/workers_methods" "context" "go.uber.org/zap" "time" ) type Deps struct { Logger *zap.Logger Methods *workers_methods.Methods } type DataUpdater struct { logger *zap.Logger methods *workers_methods.Methods } func NewDataUpdaterWC(deps Deps) *DataUpdater { return &DataUpdater{ logger: deps.Logger, methods: deps.Methods, } } func (wc *DataUpdater) Start(ctx context.Context) { nextStart := calculateTime() ticker := time.NewTicker(time.Second * time.Duration(nextStart)) //ticker := time.NewTicker(10 * time.Second) defer ticker.Stop() for { select { case <-ticker.C: wc.processTasks(ctx) nextStart = calculateTime() ticker.Reset(time.Second * time.Duration(nextStart)) case <-ctx.Done(): return } } } func (wc *DataUpdater) processTasks(ctx context.Context) { // сначала получаем список токенов newTokens, err := wc.methods.UpdateTokens(ctx) if err != nil { wc.logger.Error("error updating tokens and getting new tokens", zap.Error(err)) return } // обновляем информацию о пользователях err = wc.methods.CheckUsers(ctx, newTokens) if err != nil { wc.logger.Error("error update users information", zap.Error(err)) } // обновляем информацию о pipelines и их steps err = wc.methods.CheckPipelinesAndSteps(ctx, newTokens) if err != nil { wc.logger.Error("error updating users pipelines and users pipelines-steps", zap.Error(err)) } // обновляем информацию о tags err = wc.methods.CheckTags(ctx, newTokens) if err != nil { wc.logger.Error("error updating users tags", zap.Error(err)) } // обновляем информацию о fields err = wc.methods.CheckFields(ctx, newTokens) if err != nil { wc.logger.Error("error updating users fields", zap.Error(err)) } } func (wc *DataUpdater) Stop(ctx context.Context) error { return nil }