| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package gorm
- import (
- "context"
- "errors"
- "fmt"
- "github.com/google/uuid"
- "github.com/porter-dev/porter/internal/models"
- "github.com/porter-dev/porter/internal/repository"
- "gorm.io/gorm"
- )
- // APIContractRepository uses gorm.DB for querying the database
- type APIContractRepository struct {
- db *gorm.DB
- }
- // NewAPIContractRevisioner creates an APIRevision connection
- func NewAPIContractRevisioner(db *gorm.DB) repository.APIContractRevisioner {
- return &APIContractRepository{db}
- }
- // Insert creates a new record in the api_contract_revisions table
- func (cr APIContractRepository) Insert(ctx context.Context, conf models.APIContractRevision) (models.APIContractRevision, error) {
- if conf.ID == uuid.Nil {
- conf.ID = uuid.New()
- }
- tx := cr.db.Create(&conf)
- if tx.Error != nil {
- return conf, tx.Error
- }
- return conf, nil
- }
- // List returns a list of api contract revisions sorted by created date for a given projectID.
- // If clusterID is not specified (set to 0), this will return all revisions for a given project
- func (cr APIContractRepository) List(ctx context.Context, projectID uint, clusterID uint) ([]*models.APIContractRevision, error) {
- var confs []*models.APIContractRevision
- if clusterID == 0 {
- tx := cr.db.Where("project_id = ?", projectID).Find(&confs).Order("created_at desc")
- if tx.Error != nil {
- return nil, tx.Error
- }
- return confs, nil
- }
- tx := cr.db.Where("project_id = ? and cluster_id = ?", projectID, clusterID).Find(&confs).Order("created_at desc")
- if tx.Error != nil {
- return nil, tx.Error
- }
- return confs, nil
- }
- // Delete deleted a record in the api_contract_revisions table
- func (cr APIContractRepository) Delete(ctx context.Context, projectID uint, clusterID uint, revisionID uuid.UUID) error {
- conf := models.APIContractRevision{
- ID: revisionID,
- ProjectID: int(projectID),
- }
- if clusterID != 0 {
- conf.ClusterID = int(clusterID)
- }
- tx := cr.db.Delete(&conf)
- if tx.Error != nil {
- return tx.Error
- }
- return nil
- }
- // Get returns a record in the api_contract_revisions table
- func (cr APIContractRepository) Get(ctx context.Context, revisionID uuid.UUID) (models.APIContractRevision, error) {
- if revisionID == uuid.Nil {
- return models.APIContractRevision{}, errors.New("invalid contract revision id supplied")
- }
- var acr models.APIContractRevision
- tx := cr.db.Find(&acr, "id = ?", revisionID.String())
- if tx.Error != nil {
- return models.APIContractRevision{}, fmt.Errorf("no contract revision found for id %s: %w", revisionID, tx.Error)
- }
- return acr, nil
- }
|