package parsers import ( "context" log "github.com/sirupsen/logrus" "io" "task-processor/internal/appState" "task-processor/internal/shared" sc "task-processor/proto/surugayaScrapper" ) type SurugayaParser struct { scrapper sc.SurugayaScrapperClient ctx context.Context } func NewSurugayaParser(ctx context.Context, scrapper sc.SurugayaScrapperClient) *SurugayaParser { log.Debug("Surugaya parser init") return &SurugayaParser{ scrapper: scrapper, ctx: ctx, } } func (s *SurugayaParser) HandleTasks(task []shared.Task, sender chan shared.TaskResult, state *appState.State) { log.WithField("count", len(task)).Debug("Handling Surugaya Tasks") stream, err := s.scrapper.ProcessTasks(s.ctx) if err != nil { log.WithField("err", err).Error("Error creating stream") return } for _, t := range task { if err = stream.Send(&sc.Task{ MerchUuid: t.MerchUuid, Link: t.Link, }); err != nil { log.WithField("err", err).Error("Error sending task") return } } if err = stream.CloseSend(); err != nil { log.WithError(err).Warn("Failed to close send stream") } counter := 0 for { result, err := stream.Recv() if err == io.EOF { break } if err != nil { log.WithError(err).Error("Error receiving result") return } sender <- shared.TaskResult{ MerchUuid: result.GetMerchUuid(), Origin: shared.OriginSurugaya, Price: result.GetPrice(), } counter++ } log.WithField("count", counter).Debug("All Surugaya results received") }