task-processor/internal/parsers/surugaya.go

71 lines
1.5 KiB
Go
Raw Normal View History

2025-10-02 20:35:53 +03:00
package parsers
import (
2025-10-03 19:17:01 +03:00
"context"
2025-10-02 20:35:53 +03:00
log "github.com/sirupsen/logrus"
2025-10-03 19:17:01 +03:00
"io"
"task-processor/internal/appState"
"task-processor/internal/shared"
sc "task-processor/proto/surugayaScrapper"
2025-10-02 20:35:53 +03:00
)
2025-10-03 19:17:01 +03:00
type SurugayaParser struct {
scrapper sc.SurugayaScrapperClient
ctx context.Context
}
2025-10-02 20:35:53 +03:00
2025-10-03 19:17:01 +03:00
func NewSurugayaParser(ctx context.Context, scrapper sc.SurugayaScrapperClient) *SurugayaParser {
log.Debug("Surugaya parser init")
return &SurugayaParser{
scrapper: scrapper,
ctx: ctx,
}
2025-10-02 20:35:53 +03:00
}
2025-10-03 19:17:01 +03:00
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")
2025-10-02 20:35:53 +03:00
}