collectscollector

This commit is contained in:
Michael McGuinness
2024-12-19 19:49:40 +00:00
parent e5f59539df
commit 6b07844d46
9 changed files with 117 additions and 47 deletions
+59 -14
View File
@@ -19,6 +19,19 @@ type Document struct {
Name string `json:"name"`
}
type QueryType int
const (
QueryTypeJsonExtractor = iota
)
type query struct {
ID uuid.UUID
Type QueryType
RequiredQueryID uuid.UUID
Version int
}
func New(ctx context.Context, db *repository.Queries) *Service {
return &Service{
db: db,
@@ -26,46 +39,78 @@ func New(ctx context.Context, db *repository.Queries) *Service {
}
func (s *Service) Sync(ctx context.Context, doc Document) error {
jobID, err := database.ToDBUUID(doc.JobID)
queries, err := s.getUnsyncedOrderedQueries(ctx, doc)
if err != nil {
return err
}
queries, err := s.db.GetQueriesFromJobID(ctx, jobID)
err = s.executeQueries(queries)
if err != nil {
return err
}
return nil
}
func (s *Service) getUnsyncedOrderedQueries(ctx context.Context, doc Document) ([]query, error) {
jobID, err := database.ToDBUUID(doc.JobID)
if err != nil {
return nil, err
}
collector, err := s.db.GetCollectorFromJobID(ctx, jobID)
if err != nil {
return nil, err
}
queries, err := s.db.GetCollectorQueries(ctx, collector.ID)
if err != nil {
return nil, err
}
docID, err := database.ToDBUUID(doc.ID)
if err != nil {
return err
return nil, err
}
// TODO grab only the results with the latest clean and text version
results, err := s.db.ListResultsByDocumentID(ctx, docID, minCleanVersion, minTextVersion)
results, err := s.db.ListResultsByDocumentID(ctx, repository.ListResultsByDocumentIDParams{
Documentid: docID,
Textversion: collector.Mintextversion,
Cleanversion: collector.Mincleanversion,
})
if err != nil {
return err
return nil, err
}
queue := []query{}
for _, query := range queries {
isSynced := false
for _, result := range results {
if result.Queryid != query.ID && result.Queryversion != query.Queryversion {
if result.Queryid != query.Queryid || int(result.Queryversion) != int(query.Queryversion.Int32) {
continue
}
if result.Cleanversion > query.Mincleanversion && result.Textversion > query.Mintextversion {
isSynced = true
}
isSynced = true
break
}
if isSynced {
continue
}
log.Print("TODO sync me pls")
// Check if exists and synced
// IF NOT synced then add to queue, as well as all dependents recursively
// TODO add query to beginning, add all dependents until one that is already in the queue
}
return queue, nil
}
func (s *Service) executeQueries(queries []query) error {
// TODO - get all results?
for _, query := range queries {
log.Print(query)
// TODO - get required field
// execute query
// store result fully
}
// TODO what to do with results that are not used
return nil
}