release.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package gorm
  2. import (
  3. "github.com/porter-dev/porter/internal/models"
  4. "github.com/porter-dev/porter/internal/repository"
  5. "gorm.io/gorm"
  6. )
  7. // ReleaseRepository uses gorm.DB for querying the database
  8. type ReleaseRepository struct {
  9. db *gorm.DB
  10. }
  11. // NewReleaseRepository returns a DefaultReleaseRepository which uses
  12. // gorm.DB for querying the database
  13. func NewReleaseRepository(db *gorm.DB) repository.ReleaseRepository {
  14. return &ReleaseRepository{db}
  15. }
  16. // CreateRelease adds a new Release row to the Releases table in the database
  17. func (repo *ReleaseRepository) CreateRelease(release *models.Release) (*models.Release, error) {
  18. if err := repo.db.Create(release).Error; err != nil {
  19. return nil, err
  20. }
  21. return release, nil
  22. }
  23. // ReadRelease finds a single release based on their unique name and namespace pair.
  24. func (repo *ReleaseRepository) ReadRelease(clusterID uint, name, namespace string) (*models.Release, error) {
  25. release := &models.Release{}
  26. if err := repo.db.Preload("GitActionConfig").Preload("Tags").Order("id desc").Where("cluster_id = ? AND name = ? AND namespace = ?", clusterID, name, namespace).First(&release).Error; err != nil {
  27. return nil, err
  28. }
  29. return release, nil
  30. }
  31. // ReadRelease finds a single release based on their unique name and namespace pair.
  32. func (repo *ReleaseRepository) ListReleasesByImageRepoURI(clusterID uint, imageRepoURI string) ([]*models.Release, error) {
  33. releases := make([]*models.Release, 0)
  34. if imageRepoURI == "" {
  35. return releases, nil
  36. }
  37. if err := repo.db.Preload("GitActionConfig").Preload("Tags").Where("cluster_id = ?", clusterID).Where("image_repo_uri = ?", imageRepoURI).Find(&releases).Error; err != nil {
  38. return nil, err
  39. }
  40. return releases, nil
  41. }
  42. // ReadReleaseByWebhookToken finds a single release based on their unique webhook token.
  43. func (repo *ReleaseRepository) ReadReleaseByWebhookToken(token string) (*models.Release, error) {
  44. release := &models.Release{}
  45. if err := repo.db.Preload("GitActionConfig").Preload("Tags").Where("webhook_token = ?", token).First(&release).Error; err != nil {
  46. return nil, err
  47. }
  48. return release, nil
  49. }
  50. // UpdateRelease modifies an existing Release in the database
  51. func (repo *ReleaseRepository) UpdateRelease(release *models.Release) (*models.Release, error) {
  52. if err := repo.db.Save(release).Error; err != nil {
  53. return nil, err
  54. }
  55. return release, nil
  56. }
  57. // DeleteRelease deletes a single user using their unique name and namespace pair
  58. func (repo *ReleaseRepository) DeleteRelease(release *models.Release) (*models.Release, error) {
  59. if err := repo.db.Delete(&release).Error; err != nil {
  60. return nil, err
  61. }
  62. return release, nil
  63. }