package savewc import ( "context" "encoding/json" "fmt" "github.com/go-redis/redis/v8" "github.com/themakers/hlog" "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "time" ) type DepsForResp struct { WorkerRespondentCh chan []model.Answer Redis *redis.Client } type SaveForRespondent struct { deps DepsForResp errChan chan<- error logger hlog.Logger } func NewSaveRespWorker(deps DepsForResp, errChan chan<- error, logger hlog.Logger) *SaveForRespondent { return &SaveForRespondent{ deps: deps, errChan: errChan, logger: logger, } } func (w *SaveForRespondent) Start(ctx context.Context) { for { select { case answer, ok := <-w.deps.WorkerRespondentCh: if !ok { return } fmt.Println("SAVERESP") err := w.saveAnswers(ctx, answer) if err != nil { w.logger.Module("Error save answers") w.errChan <- err } case <-ctx.Done(): w.logger.Module("Save for respondent worker terminated") return } } } func (w *SaveForRespondent) saveAnswers(ctx context.Context, answers []model.Answer) error { for _, answer := range answers { answerJSON, err := json.Marshal(answer) if err != nil { fmt.Println("Error marshal answer", err) w.errChan <- err } key := fmt.Sprintf("toRespondent:%d", time.Now().UnixNano()) err = w.deps.Redis.Set(ctx, key, answerJSON, 0).Err() if err != nil { fmt.Println("Error setting to redis", err) w.errChan <- err } } return nil }