gitrepo.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. // GitRepoRepository uses gorm.DB for querying the database
  8. type GitRepoRepository struct {
  9. db *gorm.DB
  10. key *[32]byte
  11. }
  12. // NewGitRepoRepository returns a GitRepoRepository which uses
  13. // gorm.DB for querying the database. It accepts an encryption key to encrypt
  14. // sensitive data
  15. func NewGitRepoRepository(db *gorm.DB, key *[32]byte) repository.GitRepoRepository {
  16. return &GitRepoRepository{db, key}
  17. }
  18. // CreateGitRepo creates a new git repo
  19. func (repo *GitRepoRepository) CreateGitRepo(gr *models.GitRepo) (*models.GitRepo, error) {
  20. project := &models.Project{}
  21. if err := repo.db.Where("id = ?", gr.ProjectID).First(&project).Error; err != nil {
  22. return nil, err
  23. }
  24. assoc := repo.db.Model(&project).Association("GitRepos")
  25. if assoc.Error != nil {
  26. return nil, assoc.Error
  27. }
  28. if err := assoc.Append(gr); err != nil {
  29. return nil, err
  30. }
  31. return gr, nil
  32. }
  33. // ReadGitRepo gets a git repo specified by a unique id
  34. func (repo *GitRepoRepository) ReadGitRepo(id uint) (*models.GitRepo, error) {
  35. gr := &models.GitRepo{}
  36. if err := repo.db.Where("id = ?", id).First(&gr).Error; err != nil {
  37. return nil, err
  38. }
  39. return gr, nil
  40. }
  41. // ListGitReposByProjectID finds all git repos
  42. // for a given project id
  43. func (repo *GitRepoRepository) ListGitReposByProjectID(
  44. projectID uint,
  45. ) ([]*models.GitRepo, error) {
  46. grs := []*models.GitRepo{}
  47. if err := repo.db.Where("project_id = ?", projectID).Find(&grs).Error; err != nil {
  48. return nil, err
  49. }
  50. return grs, nil
  51. }
  52. // UpdateGitRepo modifies an existing GitRepo in the database
  53. func (repo *GitRepoRepository) UpdateGitRepo(
  54. gr *models.GitRepo,
  55. ) (*models.GitRepo, error) {
  56. if err := repo.db.Save(gr).Error; err != nil {
  57. return nil, err
  58. }
  59. return gr, nil
  60. }
  61. // DeleteGitRepo removes a git repo from the db
  62. func (repo *GitRepoRepository) DeleteGitRepo(
  63. gr *models.GitRepo,
  64. ) error {
  65. if err := repo.db.Where("id = ?", gr.ID).Delete(&models.GitRepo{}).Error; err != nil {
  66. return err
  67. }
  68. return nil
  69. }