invite.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. // InviteRepository uses gorm.DB for querying the database
  8. type InviteRepository struct {
  9. db *gorm.DB
  10. }
  11. // NewInviteRepository returns a InviteRepository which uses
  12. // gorm.DB for querying the database
  13. func NewInviteRepository(db *gorm.DB) repository.InviteRepository {
  14. return &InviteRepository{db}
  15. }
  16. // CreateInvite creates a new invite
  17. func (repo *InviteRepository) CreateInvite(invite *models.Invite) (*models.Invite, error) {
  18. project := &models.Project{}
  19. if err := repo.db.Where("id = ?", invite.ProjectID).First(&project).Error; err != nil {
  20. return nil, err
  21. }
  22. assoc := repo.db.Model(&project).Association("Invites")
  23. if assoc.Error != nil {
  24. return nil, assoc.Error
  25. }
  26. if err := assoc.Append(invite); err != nil {
  27. return nil, err
  28. }
  29. return invite, nil
  30. }
  31. // ReadInvite gets an invite specified by a unique id
  32. func (repo *InviteRepository) ReadInvite(projectID, inviteID uint) (*models.Invite, error) {
  33. invite := &models.Invite{}
  34. if err := repo.db.Where("project_id = ? AND id = ?", projectID, inviteID).First(&invite).Error; err != nil {
  35. return nil, err
  36. }
  37. return invite, nil
  38. }
  39. // ReadInviteByToken gets an invite specified by a unique token
  40. func (repo *InviteRepository) ReadInviteByToken(token string) (*models.Invite, error) {
  41. invite := &models.Invite{}
  42. if err := repo.db.Where("token = ?", token).First(&invite).Error; err != nil {
  43. return nil, err
  44. }
  45. return invite, nil
  46. }
  47. // ListInvitesByProjectID finds all invites
  48. // for a given project id
  49. func (repo *InviteRepository) ListInvitesByProjectID(
  50. projectID uint,
  51. ) ([]*models.Invite, error) {
  52. invites := []*models.Invite{}
  53. if err := repo.db.Where("project_id = ?", projectID).Find(&invites).Error; err != nil {
  54. return nil, err
  55. }
  56. return invites, nil
  57. }
  58. // UpdateInvite updates an invitation in the DB
  59. func (repo *InviteRepository) UpdateInvite(
  60. invite *models.Invite,
  61. ) (*models.Invite, error) {
  62. if err := repo.db.Save(invite).Error; err != nil {
  63. return nil, err
  64. }
  65. return invite, nil
  66. }
  67. // DeleteInvite removes a registry from the db
  68. func (repo *InviteRepository) DeleteInvite(
  69. invite *models.Invite,
  70. ) error {
  71. // clear TokenCache association
  72. if err := repo.db.Where("id = ?", invite.ID).Delete(&models.Invite{}).Error; err != nil {
  73. return err
  74. }
  75. return nil
  76. }