Files
query-orchestration/internal/document/service.go
T

75 lines
1.8 KiB
Go
Raw Normal View History

2024-12-18 18:54:48 +00:00
package document
import (
"context"
2024-12-24 17:13:48 +00:00
"queryorchestration/internal/collector"
"queryorchestration/internal/database"
"queryorchestration/internal/database/repository"
2025-01-07 16:30:45 +00:00
queryqueue "queryorchestration/internal/queryQueue"
2024-12-24 17:13:48 +00:00
"queryorchestration/internal/result"
"github.com/google/uuid"
2024-12-18 18:54:48 +00:00
)
type Document struct {
2024-12-23 16:49:53 +00:00
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"`
2024-12-18 18:54:48 +00:00
}
2024-12-20 17:35:33 +00:00
type Service struct {
2025-01-06 12:26:28 +00:00
db *database.Connection
2024-12-19 19:49:40 +00:00
}
2025-01-06 12:26:28 +00:00
func New(db *database.Connection) *Service {
2024-12-18 18:54:48 +00:00
return &Service{
2025-01-06 12:26:28 +00:00
db,
2024-12-18 18:54:48 +00:00
}
}
2024-12-20 17:35:33 +00:00
func (s *Service) Sync(ctx context.Context, doc *Document) error {
collector, err := collector.NewByJobId(ctx, s.db, doc.JobID)
if err != nil {
return err
}
2024-12-23 18:13:57 +00:00
results, err := s.getResults(ctx, doc.ID, collector)
if err != nil {
return err
}
2025-01-07 16:30:45 +00:00
queue, err := queryqueue.New(ctx, s.db, collector, results, doc.ID, doc.CleanVersion, doc.TextVersion)
2024-12-19 19:49:40 +00:00
if err != nil {
2024-12-20 17:35:33 +00:00
return err
2024-12-19 19:49:40 +00:00
}
2024-12-20 17:35:33 +00:00
err = queue.Execute(ctx)
2024-12-19 19:49:40 +00:00
if err != nil {
2024-12-20 17:35:33 +00:00
return err
2024-12-19 19:49:40 +00:00
}
2024-12-20 17:35:33 +00:00
return nil
}
2024-12-19 19:49:40 +00:00
2025-01-06 15:31:39 +00:00
func (s *Service) getResults(ctx context.Context, id uuid.UUID, coll *collector.Collector) ([]*result.Result, error) {
2024-12-23 18:13:57 +00:00
docID := database.MustToDBUUID(id)
2025-01-06 12:26:28 +00:00
results, err := s.db.Queries.ListResultsByDocumentID(ctx, repository.ListResultsByDocumentIDParams{
2024-12-19 19:49:40 +00:00
Documentid: docID,
2024-12-20 17:35:33 +00:00
Textversion: coll.MinTextVersion,
Cleanversion: coll.MinCleanVersion,
2024-12-19 19:49:40 +00:00
})
if err != nil {
2024-12-19 19:49:40 +00:00
return nil, err
}
2025-01-06 15:31:39 +00:00
cleanResults := make([]*result.Result, len(results))
2024-12-20 17:35:33 +00:00
for index, dbResult := range results {
2025-01-06 15:31:39 +00:00
cleanResults[index] = result.Parse(&dbResult)
2024-12-19 19:49:40 +00:00
}
2025-01-06 15:31:39 +00:00
return cleanResults, nil
2024-12-19 19:49:40 +00:00
}