deployment_target.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package gorm
  2. import (
  3. "errors"
  4. "time"
  5. "github.com/google/uuid"
  6. "github.com/porter-dev/porter/internal/models"
  7. "github.com/porter-dev/porter/internal/repository"
  8. "gorm.io/gorm"
  9. )
  10. // DeploymentTargetRepository uses gorm.DB for querying the database
  11. type DeploymentTargetRepository struct {
  12. db *gorm.DB
  13. }
  14. // NewDeploymentTargetRepository returns a DeploymentTargetRepository which uses
  15. // gorm.DB for querying the database
  16. func NewDeploymentTargetRepository(db *gorm.DB) repository.DeploymentTargetRepository {
  17. return &DeploymentTargetRepository{db}
  18. }
  19. // DeploymentTargetBySelectorAndSelectorType finds a deployment target for a projectID and clusterID by its selector and selector type
  20. func (repo *DeploymentTargetRepository) DeploymentTargetBySelectorAndSelectorType(projectID uint, clusterID uint, selector, selectorType string) (*models.DeploymentTarget, error) {
  21. deploymentTarget := &models.DeploymentTarget{}
  22. if err := repo.db.Where("project_id = ? AND cluster_id = ? AND selector = ? AND selector_type = ?", projectID, clusterID, selector, selectorType).Limit(1).Find(&deploymentTarget).Error; err != nil {
  23. return nil, err
  24. }
  25. return deploymentTarget, nil
  26. }
  27. // ListForCluster finds all deployment targets for a given project
  28. func (repo *DeploymentTargetRepository) ListForCluster(projectID uint, clusterID uint, preview bool) ([]*models.DeploymentTarget, error) {
  29. deploymentTargets := []*models.DeploymentTarget{}
  30. if err := repo.db.Where("project_id = ? AND cluster_id = ? AND preview = ?", projectID, clusterID, preview).Find(&deploymentTargets).Error; err != nil {
  31. return nil, err
  32. }
  33. return deploymentTargets, nil
  34. }
  35. // List finds all deployment targets for a given project
  36. func (repo *DeploymentTargetRepository) List(projectID uint, preview bool) ([]*models.DeploymentTarget, error) {
  37. deploymentTargets := []*models.DeploymentTarget{}
  38. if err := repo.db.Where("project_id = ? AND preview = ?", projectID, preview).Find(&deploymentTargets).Error; err != nil {
  39. return nil, err
  40. }
  41. return deploymentTargets, nil
  42. }
  43. // DeploymentTarget finds all deployment targets for a given project
  44. func (repo *DeploymentTargetRepository) DeploymentTarget(projectID uint, deploymentTargetIdentifier string) (*models.DeploymentTarget, error) {
  45. if deploymentTargetIdentifier == "" {
  46. return nil, errors.New("deployment target identifier is empty")
  47. }
  48. whereArg := "project_id = ? AND id = ?"
  49. _, err := uuid.Parse(deploymentTargetIdentifier)
  50. if err != nil {
  51. whereArg = "project_id = ? AND vanity_name = ?"
  52. }
  53. deploymentTarget := &models.DeploymentTarget{}
  54. if err := repo.db.Where(whereArg, projectID, deploymentTargetIdentifier).Find(deploymentTarget).Error; err != nil {
  55. return nil, err
  56. }
  57. return deploymentTarget, nil
  58. }
  59. // DeploymentTargetById finds a deployment target by its uuid
  60. func (repo *DeploymentTargetRepository) DeploymentTargetById(id string) (*models.DeploymentTarget, error) {
  61. if id == "" {
  62. return nil, errors.New("deployment target id is empty")
  63. }
  64. deploymentTarget := &models.DeploymentTarget{}
  65. if err := repo.db.Where("id = ?", id).Find(deploymentTarget).Error; err != nil {
  66. return nil, err
  67. }
  68. return deploymentTarget, nil
  69. }
  70. // CreateDeploymentTarget creates a new deployment target
  71. func (repo *DeploymentTargetRepository) CreateDeploymentTarget(deploymentTarget *models.DeploymentTarget) (*models.DeploymentTarget, error) {
  72. if deploymentTarget == nil {
  73. return nil, errors.New("deployment target is nil")
  74. }
  75. if deploymentTarget.Selector == "" {
  76. return nil, errors.New("deployment target selector is empty")
  77. }
  78. if deploymentTarget.SelectorType == "" {
  79. return nil, errors.New("deployment target selector type is empty")
  80. }
  81. if deploymentTarget.ClusterID == 0 {
  82. return nil, errors.New("deployment target cluster id is empty")
  83. }
  84. if deploymentTarget.ProjectID == 0 {
  85. return nil, errors.New("deployment target project id is empty")
  86. }
  87. if deploymentTarget.ID == uuid.Nil {
  88. deploymentTarget.ID = uuid.New()
  89. }
  90. if deploymentTarget.CreatedAt.IsZero() {
  91. deploymentTarget.CreatedAt = time.Now().UTC()
  92. }
  93. if deploymentTarget.UpdatedAt.IsZero() {
  94. deploymentTarget.UpdatedAt = time.Now().UTC()
  95. }
  96. if err := repo.db.Create(deploymentTarget).Error; err != nil {
  97. return nil, err
  98. }
  99. return deploymentTarget, nil
  100. }