82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
package document
|
|
|
|
import (
|
|
"context"
|
|
"gotemplate/internal/collector"
|
|
"gotemplate/internal/database"
|
|
"gotemplate/internal/database/repository"
|
|
"gotemplate/internal/query"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type Document struct {
|
|
ID uuid.UUID `json:"id" validate:"required,uuid"`
|
|
JobID uuid.UUID `json:"jobId" validate:"required,uuid"`
|
|
Name string `json:"name" validate:"required"`
|
|
CleanVersion int32 `json:"cleanVersion" validate:"required,gt=0"`
|
|
TextVersion int32 `json:"textVersion" validate:"required,gt=0"`
|
|
}
|
|
|
|
type Service struct {
|
|
db *repository.Queries
|
|
}
|
|
|
|
func New(db *repository.Queries) *Service {
|
|
return &Service{
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
func (s *Service) Sync(ctx context.Context, doc *Document) error {
|
|
collector, err := collector.NewByJobId(ctx, s.db, doc.JobID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
results, err := s.getResults(ctx, doc.ID, collector)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
queue, err := query.NewQueue(ctx, s.db, collector, results, doc.ID, doc.CleanVersion, doc.TextVersion)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = queue.Execute(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *Service) getResults(ctx context.Context, id uuid.UUID, coll *collector.Collector) (*[]query.Result, error) {
|
|
docID := database.MustToDBUUID(id)
|
|
|
|
results, err := s.db.ListResultsByDocumentID(ctx, repository.ListResultsByDocumentIDParams{
|
|
Documentid: docID,
|
|
Textversion: coll.MinTextVersion,
|
|
Cleanversion: coll.MinCleanVersion,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
cleanResults := make([]query.Result, len(results))
|
|
for index, dbResult := range results {
|
|
cleanResults[index] = *s.parseResult(&dbResult)
|
|
}
|
|
|
|
return &cleanResults, nil
|
|
}
|
|
|
|
func (s *Service) parseResult(dbQuery *repository.ListResultsByDocumentIDRow) *query.Result {
|
|
return &query.Result{
|
|
ID: database.MustToUUID(dbQuery.ID),
|
|
QueryID: database.MustToUUID(dbQuery.Queryid),
|
|
QueryVersion: dbQuery.Queryversion,
|
|
}
|
|
}
|