delete.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package datastore
  2. import (
  3. "context"
  4. "github.com/google/uuid"
  5. "github.com/porter-dev/porter/internal/models"
  6. "github.com/porter-dev/porter/internal/repository"
  7. "github.com/porter-dev/porter/internal/telemetry"
  8. )
  9. // DeleteRecordInput is the input type for DeleteDatastoreRecord
  10. type DeleteRecordInput struct {
  11. ProjectID uint
  12. Name string
  13. DatastoreRepository repository.DatastoreRepository
  14. }
  15. // DeleteRecord deletes a datastore record by name
  16. func DeleteRecord(ctx context.Context, inp DeleteRecordInput) (*models.Datastore, error) {
  17. ctx, span := telemetry.NewSpan(ctx, "delete-datastore-record")
  18. defer span.End()
  19. telemetry.WithAttributes(span,
  20. telemetry.AttributeKV{Key: "project-id", Value: inp.ProjectID},
  21. telemetry.AttributeKV{Key: "name", Value: inp.Name},
  22. )
  23. datastore, err := inp.DatastoreRepository.GetByProjectIDAndName(ctx, inp.ProjectID, inp.Name)
  24. if err != nil {
  25. return datastore, telemetry.Error(ctx, span, err, "error reading datastore by project id and name")
  26. }
  27. if datastore == nil || datastore.ID == uuid.Nil {
  28. return datastore, telemetry.Error(ctx, span, nil, "datastore not found in table")
  29. }
  30. datastore, err = inp.DatastoreRepository.Delete(ctx, datastore)
  31. if err != nil {
  32. return datastore, telemetry.Error(ctx, span, err, "error deleting datastore")
  33. }
  34. return datastore, nil
  35. }