api_contract.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package gorm
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "github.com/google/uuid"
  7. "github.com/porter-dev/porter/internal/models"
  8. "github.com/porter-dev/porter/internal/repository"
  9. "gorm.io/gorm"
  10. )
  11. // APIContractRepository uses gorm.DB for querying the database
  12. type APIContractRepository struct {
  13. db *gorm.DB
  14. }
  15. // NewAPIContractRevisioner creates an APIRevision connection
  16. func NewAPIContractRevisioner(db *gorm.DB) repository.APIContractRevisioner {
  17. return &APIContractRepository{db}
  18. }
  19. // Insert creates a new record in the api_contract_revisions table
  20. func (cr APIContractRepository) Insert(ctx context.Context, conf models.APIContractRevision) (models.APIContractRevision, error) {
  21. if conf.ID == uuid.Nil {
  22. conf.ID = uuid.New()
  23. }
  24. tx := cr.db.Create(&conf)
  25. if tx.Error != nil {
  26. return conf, tx.Error
  27. }
  28. return conf, nil
  29. }
  30. // List returns a list of api contract revisions sorted by created date for a given projectID.
  31. // If clusterID is not specified (set to 0), this will return all revisions for a given project
  32. func (cr APIContractRepository) List(ctx context.Context, projectID uint, clusterID uint) ([]*models.APIContractRevision, error) {
  33. var confs []*models.APIContractRevision
  34. if clusterID == 0 {
  35. tx := cr.db.Where("project_id = ?", projectID).Find(&confs).Order("created_at desc")
  36. if tx.Error != nil {
  37. return nil, tx.Error
  38. }
  39. return confs, nil
  40. }
  41. tx := cr.db.Where("project_id = ? and cluster_id = ?", projectID, clusterID).Find(&confs).Order("created_at desc")
  42. if tx.Error != nil {
  43. return nil, tx.Error
  44. }
  45. return confs, nil
  46. }
  47. // Delete deleted a record in the api_contract_revisions table
  48. func (cr APIContractRepository) Delete(ctx context.Context, projectID uint, clusterID uint, revisionID uuid.UUID) error {
  49. conf := models.APIContractRevision{
  50. ID: revisionID,
  51. ProjectID: int(projectID),
  52. }
  53. if clusterID != 0 {
  54. conf.ClusterID = int(clusterID)
  55. }
  56. tx := cr.db.Delete(&conf)
  57. if tx.Error != nil {
  58. return tx.Error
  59. }
  60. return nil
  61. }
  62. // Get returns a record in the api_contract_revisions table
  63. func (cr APIContractRepository) Get(ctx context.Context, revisionID uuid.UUID) (models.APIContractRevision, error) {
  64. if revisionID == uuid.Nil {
  65. return models.APIContractRevision{}, errors.New("invalid contract revision id supplied")
  66. }
  67. var acr models.APIContractRevision
  68. tx := cr.db.Find(&acr, "id = ?", revisionID.String())
  69. if tx.Error != nil {
  70. return models.APIContractRevision{}, fmt.Errorf("no contract revision found for id %s: %w", revisionID, tx.Error)
  71. }
  72. return acr, nil
  73. }