Merged in feature/jobcrud (pull request #35)
Job CRUD + Collector Integration * startedcreate * openapispec * createjobintegration * jobgetcontroller * jobcreateclient * updatejob * job * collector
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user