porter_app.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package gorm
  2. import (
  3. "context"
  4. "github.com/porter-dev/porter/internal/models"
  5. "github.com/porter-dev/porter/internal/repository"
  6. "gorm.io/gorm"
  7. )
  8. // PorterAppRepository uses gorm.DB for querying the database
  9. type PorterAppRepository struct {
  10. db *gorm.DB
  11. }
  12. // NewPorterAppRepository returns a PorterAppRepository which uses
  13. // gorm.DB for querying the database
  14. func NewPorterAppRepository(db *gorm.DB) repository.PorterAppRepository {
  15. return &PorterAppRepository{db}
  16. }
  17. func (repo *PorterAppRepository) CreatePorterApp(a *models.PorterApp) (*models.PorterApp, error) {
  18. if err := repo.db.Create(a).Error; err != nil {
  19. return nil, err
  20. }
  21. return a, nil
  22. }
  23. func (repo *PorterAppRepository) ListPorterAppByClusterID(clusterID uint) ([]*models.PorterApp, error) {
  24. apps := []*models.PorterApp{}
  25. if err := repo.db.Where("cluster_id = ?", clusterID).Find(&apps).Error; err != nil {
  26. return nil, err
  27. }
  28. return apps, nil
  29. }
  30. // ReadPorterAppByID returns a PorterApp by its ID
  31. func (repo *PorterAppRepository) ReadPorterAppByID(ctx context.Context, id uint) (*models.PorterApp, error) {
  32. app := &models.PorterApp{}
  33. if err := repo.db.Where("id = ?", id).Limit(1).Find(&app).Error; err != nil {
  34. return nil, err
  35. }
  36. return app, nil
  37. }
  38. func (repo *PorterAppRepository) ReadPorterAppByName(clusterID uint, name string) (*models.PorterApp, error) {
  39. app := &models.PorterApp{}
  40. if err := repo.db.Where("cluster_id = ? AND name = ?", clusterID, name).Limit(1).Find(&app).Error; err != nil {
  41. return nil, err
  42. }
  43. return app, nil
  44. }
  45. // ReadPorterAppsByProjectIDAndName returns a list of PorterApps by project ID and name. Multiple apps can have the same name and project id
  46. // if they are in different clusters.
  47. func (repo *PorterAppRepository) ReadPorterAppsByProjectIDAndName(projectID uint, name string) ([]*models.PorterApp, error) {
  48. apps := []*models.PorterApp{}
  49. if err := repo.db.Where("project_id = ? AND name = ?", projectID, name).Find(&apps).Error; err != nil {
  50. return nil, err
  51. }
  52. return apps, nil
  53. }
  54. func (repo *PorterAppRepository) UpdatePorterApp(app *models.PorterApp) (*models.PorterApp, error) {
  55. if err := repo.db.Save(app).Error; err != nil {
  56. return nil, err
  57. }
  58. return app, nil
  59. }
  60. func (repo *PorterAppRepository) DeletePorterApp(app *models.PorterApp) (*models.PorterApp, error) {
  61. if err := repo.db.Delete(&app).Error; err != nil {
  62. return nil, err
  63. }
  64. return app, nil
  65. }