package documenttext import ( "context" "fmt" "io" "log/slog" "strings" documenttypes "queryorchestration/internal/document/types" ) func (s *Service) getDocumentText(ctx context.Context, doc documenttypes.File) (io.Reader, error) { pagesNum, err := doc.GetPageCount(ctx) if err != nil { return nil, err } group := s.cfg.GetThreadPool().NewGroup() textPages := make([]string, pagesNum) for i := range pagesNum { index := i group.SubmitErr(func() error { slog.Debug("extracting page text", "index", index) text, err := s.getPageText(ctx, doc, index) if err != nil { slog.Error("error extracting page text", "index", index, "error", err) return err } textPages[index] = text return nil }) } err = group.Wait() if err != nil { return nil, err } text, err := s.mergeDocument(textPages) if err != nil { return nil, err } return text, nil } func (s *Service) mergeDocument(pages []string) (io.Reader, error) { var builder strings.Builder for i, page := range pages { builder.WriteString(fmt.Sprintf("Start of Page No. = %d\n\n", i+1)) builder.WriteString(page) builder.WriteString("\n\n") } return strings.NewReader(builder.String()), nil }