database.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. type DatabaseRepository struct {
  8. db *gorm.DB
  9. key *[32]byte
  10. }
  11. func NewDatabaseRepository(db *gorm.DB, key *[32]byte) repository.DatabaseRepository {
  12. return &DatabaseRepository{db, key}
  13. }
  14. func (repo *DatabaseRepository) CreateDatabase(database *models.Database) (*models.Database, error) {
  15. project := &models.Project{}
  16. if err := repo.db.Debug().First(project, database.ProjectID).Error; err != nil {
  17. return nil, err
  18. }
  19. assoc := repo.db.Debug().Model(project).Association("Databases")
  20. if assoc.Error != nil {
  21. return nil, assoc.Error
  22. }
  23. if err := assoc.Append(database); err != nil {
  24. return nil, err
  25. }
  26. return database, nil
  27. }
  28. func (repo *DatabaseRepository) ReadDatabase(projectID, clusterID, databaseID uint) (*models.Database, error) {
  29. database := &models.Database{}
  30. if err := repo.db.Where("project_id = ? AND cluster_id = ? AND id = ?", projectID, clusterID, databaseID).First(&database).Error; err != nil {
  31. return nil, err
  32. }
  33. return database, nil
  34. }
  35. func (repo *DatabaseRepository) ReadDatabaseByInfraID(projectID, infraID uint) (*models.Database, error) {
  36. database := &models.Database{}
  37. if err := repo.db.Where("project_id = ? AND infra_id = ?", projectID, infraID).First(&database).Error; err != nil {
  38. return nil, err
  39. }
  40. return database, nil
  41. }
  42. func (repo *DatabaseRepository) UpdateDatabase(database *models.Database) (*models.Database, error) {
  43. if err := repo.db.Save(database).Error; err != nil {
  44. return nil, err
  45. }
  46. return database, nil
  47. }
  48. func (repo *DatabaseRepository) DeleteDatabase(projectID, clusterID, databaseID uint) error {
  49. if err := repo.db.Where("project_id = ? AND cluster_id = ? AND id = ?", projectID, clusterID, databaseID).Delete(&models.Database{}).Error; err != nil {
  50. return err
  51. }
  52. return nil
  53. }
  54. func (repo *DatabaseRepository) ListDatabases(projectID, clusterID uint) ([]*models.Database, error) {
  55. databases := []*models.Database{}
  56. if err := repo.db.Where("project_id = ? AND cluster_id = ?", projectID, clusterID).Find(&databases).Error; err != nil {
  57. return nil, err
  58. }
  59. return databases, nil
  60. }