Files
query-orchestration/internal/job/update.go
T
Michael McGuinness 4ec1d51a12 Merged in feature/jobcrud (pull request #35)
Job CRUD + Collector Integration

* startedcreate

* openapispec

* createjobintegration

* jobgetcontroller

* jobcreateclient

* updatejob

* job

* collector
2025-01-24 14:52:56 +00:00

64 lines
1.2 KiB
Go

package job
import (
"context"
"errors"
"queryorchestration/internal/database"
"queryorchestration/internal/database/repository"
"github.com/google/uuid"
)
type Update struct {
ID uuid.UUID
CanSync *bool
}
func (s *Service) Update(ctx context.Context, update *Update) error {
if update == nil {
return errors.New("Update required")
}
current, err := s.Get(ctx, update.ID)
if err != nil {
return err
}
err = s.normalizeCanSync(ctx, current, update)
if err != nil {
return err
}
if update.CanSync == nil {
return errors.New("no changes")
}
err = s.db.Queries.UpdateJob(ctx, &repository.UpdateJobParams{
ID: database.MustToDBUUID(update.ID),
Cansync: *update.CanSync,
})
if err != nil {
return err
}
return nil
}
func (s *Service) normalizeCanSync(ctx context.Context, current *Job, update *Update) error {
if update.CanSync == nil {
return nil
} else if current.CanSync == *update.CanSync {
update.CanSync = nil
return nil
}
client, err := s.svc.Client.Get(ctx, current.ClientID)
if err != nil {
return err
} else if !client.CanSync && *update.CanSync {
return errors.New("client not allowing sync")
}
return nil
}