environment.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package gorm
  2. import (
  3. "strings"
  4. "github.com/porter-dev/porter/internal/models"
  5. "github.com/porter-dev/porter/internal/repository"
  6. "gorm.io/gorm"
  7. )
  8. // EnvironmentRepository uses gorm.DB for querying the database
  9. type EnvironmentRepository struct {
  10. db *gorm.DB
  11. }
  12. // NewEnvironmentRepository returns a DefaultEnvironmentRepository which uses
  13. // gorm.DB for querying the database
  14. func NewEnvironmentRepository(db *gorm.DB) repository.EnvironmentRepository {
  15. return &EnvironmentRepository{db}
  16. }
  17. func (repo *EnvironmentRepository) CreateEnvironment(env *models.Environment) (*models.Environment, error) {
  18. if err := repo.db.Create(env).Error; err != nil {
  19. return nil, err
  20. }
  21. return env, nil
  22. }
  23. func (repo *EnvironmentRepository) ReadEnvironment(projectID, clusterID, gitInstallationID uint, gitRepoOwner, gitRepoName string) (*models.Environment, error) {
  24. env := &models.Environment{}
  25. if err := repo.db.Order("id desc").Where(
  26. "project_id = ? AND cluster_id = ? AND git_installation_id = ? AND git_repo_owner = ? AND git_repo_name = ?",
  27. projectID, clusterID, gitInstallationID,
  28. gitRepoOwner, gitRepoName,
  29. ).First(&env).Error; err != nil {
  30. return nil, err
  31. }
  32. return env, nil
  33. }
  34. func (repo *EnvironmentRepository) ReadEnvironmentByID(projectID, clusterID, envID uint) (*models.Environment, error) {
  35. env := &models.Environment{}
  36. if err := repo.db.Order("id desc").Where(
  37. "project_id = ? AND cluster_id = ? AND id = ?",
  38. projectID, clusterID, envID,
  39. ).First(&env).Error; err != nil {
  40. return nil, err
  41. }
  42. return env, nil
  43. }
  44. func (repo *EnvironmentRepository) ListEnvironments(projectID, clusterID uint) ([]*models.Environment, error) {
  45. envs := make([]*models.Environment, 0)
  46. if err := repo.db.Order("id asc").Where("project_id = ? AND cluster_id = ?", projectID, clusterID).Find(&envs).Error; err != nil {
  47. return nil, err
  48. }
  49. return envs, nil
  50. }
  51. func (repo *EnvironmentRepository) DeleteEnvironment(env *models.Environment) (*models.Environment, error) {
  52. if err := repo.db.Delete(&env).Error; err != nil {
  53. return nil, err
  54. }
  55. return env, nil
  56. }
  57. func (repo *EnvironmentRepository) CreateDeployment(deployment *models.Deployment) (*models.Deployment, error) {
  58. if err := repo.db.Create(deployment).Error; err != nil {
  59. return nil, err
  60. }
  61. return deployment, nil
  62. }
  63. func (repo *EnvironmentRepository) UpdateDeployment(deployment *models.Deployment) (*models.Deployment, error) {
  64. if err := repo.db.Save(deployment).Error; err != nil {
  65. return nil, err
  66. }
  67. return deployment, nil
  68. }
  69. func (repo *EnvironmentRepository) ReadDeployment(environmentID uint, namespace string) (*models.Deployment, error) {
  70. depl := &models.Deployment{}
  71. if err := repo.db.Order("id desc").Where("environment_id = ? AND namespace = ?", environmentID, namespace).First(&depl).Error; err != nil {
  72. return nil, err
  73. }
  74. return depl, nil
  75. }
  76. func (repo *EnvironmentRepository) ReadDeploymentByCluster(projectID, clusterID uint, namespace string) (*models.Deployment, error) {
  77. depl := &models.Deployment{}
  78. if err := repo.db.
  79. Order("deployments.id asc").
  80. Joins("INNER JOIN environments ON environments.id = deployments.environment_id").
  81. Where("environments.project_id = ? AND environments.cluster_id = ? AND environments.deleted_at IS NULL AND namespace = ?", projectID, clusterID, depl.Namespace).
  82. Find(&depl).Error; err != nil {
  83. return nil, err
  84. }
  85. return depl, nil
  86. }
  87. func (repo *EnvironmentRepository) ListDeploymentsByCluster(projectID, clusterID uint, states ...string) ([]*models.Deployment, error) {
  88. query := repo.db.
  89. Order("deployments.updated_at desc").
  90. Joins("INNER JOIN environments ON environments.id = deployments.environment_id").
  91. Where("environments.project_id = ? AND environments.cluster_id = ? AND environments.deleted_at IS NULL", projectID, clusterID)
  92. if len(states) > 0 {
  93. queryArr := make([]string, len(states))
  94. stateInterArr := make([]interface{}, len(states))
  95. for i, state := range states {
  96. queryArr[i] = "deployments.status = ?"
  97. stateInterArr[i] = state
  98. }
  99. query = query.Where(strings.Join(queryArr, " OR "), stateInterArr...)
  100. }
  101. depls := make([]*models.Deployment, 0)
  102. if err := query.Find(&depls).Error; err != nil {
  103. return nil, err
  104. }
  105. return depls, nil
  106. }
  107. func (repo *EnvironmentRepository) ListDeployments(environmentID uint, states ...string) ([]*models.Deployment, error) {
  108. query := repo.db.Debug().Order("deployments.updated_at desc").Where("environment_id = ?", environmentID)
  109. if len(states) > 0 {
  110. queryArr := make([]string, len(states))
  111. stateInterArr := make([]interface{}, len(states))
  112. for i, state := range states {
  113. queryArr[i] = "deployments.status = ?"
  114. stateInterArr[i] = state
  115. }
  116. query = query.Where(strings.Join(queryArr, " OR "), stateInterArr...)
  117. }
  118. depls := make([]*models.Deployment, 0)
  119. if err := query.Find(&depls).Error; err != nil {
  120. return nil, err
  121. }
  122. return depls, nil
  123. }
  124. func (repo *EnvironmentRepository) DeleteDeployment(deployment *models.Deployment) (*models.Deployment, error) {
  125. if err := repo.db.Delete(deployment).Error; err != nil {
  126. return nil, err
  127. }
  128. return deployment, nil
  129. }