4ec1d51a12
Job CRUD + Collector Integration * startedcreate * openapispec * createjobintegration * jobgetcontroller * jobcreateclient * updatejob * job * collector
64 lines
1.2 KiB
Go
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
|
|
}
|