porter_app_event.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package gorm
  2. import (
  3. "context"
  4. "errors"
  5. "strconv"
  6. "time"
  7. "github.com/google/uuid"
  8. "github.com/porter-dev/porter/internal/models"
  9. "github.com/porter-dev/porter/internal/repository"
  10. "github.com/porter-dev/porter/internal/repository/gorm/helpers"
  11. "gorm.io/gorm"
  12. )
  13. // PorterAppEventRepository uses gorm.DB for querying the database
  14. type PorterAppEventRepository struct {
  15. db *gorm.DB
  16. }
  17. // NewPorterAppEventRepository returns a PorterAppEventRepository which uses
  18. // gorm.DB for querying the database
  19. func NewPorterAppEventRepository(db *gorm.DB) repository.PorterAppEventRepository {
  20. return &PorterAppEventRepository{db}
  21. }
  22. func (repo *PorterAppEventRepository) ListEventsByPorterAppID(ctx context.Context, porterAppID uint, opts ...helpers.QueryOption) ([]*models.PorterAppEvent, helpers.PaginatedResult, error) {
  23. apps := []*models.PorterAppEvent{}
  24. paginatedResult := helpers.PaginatedResult{}
  25. id := strconv.Itoa(int(porterAppID))
  26. if id == "" {
  27. return nil, paginatedResult, errors.New("invalid porter app id supplied")
  28. }
  29. db := repo.db.Model(&models.PorterAppEvent{})
  30. resultDB := db.Where("porter_app_id = ?", id).Order("created_at DESC")
  31. resultDB = resultDB.Scopes(helpers.Paginate(db, &paginatedResult, opts...))
  32. if err := resultDB.Find(&apps).Error; err != nil {
  33. if !errors.Is(err, gorm.ErrRecordNotFound) {
  34. return nil, paginatedResult, err
  35. }
  36. }
  37. return apps, paginatedResult, nil
  38. }
  39. func (repo *PorterAppEventRepository) CreateEvent(ctx context.Context, appEvent *models.PorterAppEvent) error {
  40. if appEvent.ID == uuid.Nil {
  41. appEvent.ID = uuid.New()
  42. }
  43. if appEvent.CreatedAt.IsZero() {
  44. appEvent.CreatedAt = time.Now().UTC()
  45. }
  46. if appEvent.UpdatedAt.IsZero() {
  47. appEvent.UpdatedAt = time.Now().UTC()
  48. }
  49. if appEvent.PorterAppID == 0 {
  50. return errors.New("invalid porter app id supplied")
  51. }
  52. if err := repo.db.Create(appEvent).Error; err != nil {
  53. return err
  54. }
  55. return nil
  56. }
  57. func (repo *PorterAppEventRepository) UpdateEvent(ctx context.Context, appEvent *models.PorterAppEvent) error {
  58. if appEvent.ID == uuid.Nil {
  59. appEvent.ID = uuid.New()
  60. }
  61. if appEvent.UpdatedAt.IsZero() {
  62. appEvent.UpdatedAt = time.Now().UTC()
  63. }
  64. if appEvent.PorterAppID == 0 {
  65. return errors.New("invalid porter app id supplied")
  66. }
  67. if appEvent.Status == "" {
  68. return errors.New("invalid status supplied")
  69. }
  70. if err := repo.db.Model(appEvent).Updates(models.PorterAppEvent{Status: appEvent.Status}).Error; err != nil {
  71. return err
  72. }
  73. return nil
  74. }
  75. func (repo *PorterAppEventRepository) ReadEvent(ctx context.Context, id uuid.UUID) (models.PorterAppEvent, error) {
  76. appEvent := models.PorterAppEvent{}
  77. if id == uuid.Nil {
  78. return appEvent, errors.New("invalid porter app event id supplied")
  79. }
  80. strID := id.String()
  81. if err := repo.db.Where("id = ?", strID).First(&appEvent).Error; err != nil {
  82. return appEvent, err
  83. }
  84. return appEvent, nil
  85. }