usage.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package test
  2. import (
  3. "errors"
  4. "github.com/porter-dev/porter/internal/models"
  5. "github.com/porter-dev/porter/internal/repository"
  6. "gorm.io/gorm"
  7. )
  8. // ProjectUsageRepository implements repository.ProjectUsageRepository
  9. type ProjectUsageRepository struct {
  10. canQuery bool
  11. usages []*models.ProjectUsage
  12. caches []*models.ProjectUsageCache
  13. }
  14. // NewProjectUsageRepository will return errors if canQuery is false
  15. func NewProjectUsageRepository(canQuery bool) repository.ProjectUsageRepository {
  16. return &ProjectUsageRepository{
  17. canQuery,
  18. []*models.ProjectUsage{},
  19. []*models.ProjectUsageCache{},
  20. }
  21. }
  22. // CreateProjectUsage creates a new project usage limit
  23. func (repo *ProjectUsageRepository) CreateProjectUsage(
  24. usage *models.ProjectUsage,
  25. ) (*models.ProjectUsage, error) {
  26. if !repo.canQuery {
  27. return nil, errors.New("Cannot write database")
  28. }
  29. if usage == nil {
  30. return nil, nil
  31. }
  32. repo.usages = append(repo.usages, usage)
  33. return usage, nil
  34. }
  35. // CreateProjectUsage reads a project usage by project id
  36. func (repo *ProjectUsageRepository) ReadProjectUsage(
  37. projID uint,
  38. ) (*models.ProjectUsage, error) {
  39. if !repo.canQuery {
  40. return nil, errors.New("Cannot read from database")
  41. }
  42. for _, pu := range repo.usages {
  43. if pu != nil && pu.ProjectID == projID {
  44. return pu, nil
  45. }
  46. }
  47. return nil, gorm.ErrRecordNotFound
  48. }
  49. // UpdateProjectUsage modifies an existing ProjectUsage in the database
  50. func (repo *ProjectUsageRepository) UpdateProjectUsage(
  51. usage *models.ProjectUsage,
  52. ) (*models.ProjectUsage, error) {
  53. if !repo.canQuery {
  54. return nil, errors.New("Cannot write database")
  55. }
  56. if int(usage.ID-1) >= len(repo.usages) || repo.usages[usage.ID-1] == nil {
  57. return nil, gorm.ErrRecordNotFound
  58. }
  59. index := int(usage.ID - 1)
  60. repo.usages[index] = usage
  61. return usage, nil
  62. }
  63. // CreateProjectUsageCache creates a new project usage cache
  64. func (repo *ProjectUsageRepository) CreateProjectUsageCache(
  65. cache *models.ProjectUsageCache,
  66. ) (*models.ProjectUsageCache, error) {
  67. if !repo.canQuery {
  68. return nil, errors.New("Cannot write database")
  69. }
  70. if cache == nil {
  71. return nil, nil
  72. }
  73. repo.caches = append(repo.caches, cache)
  74. return cache, nil
  75. }
  76. // CreateProjectUsageCache reads a project usage by project id
  77. func (repo *ProjectUsageRepository) ReadProjectUsageCache(
  78. projID uint,
  79. ) (*models.ProjectUsageCache, error) {
  80. if !repo.canQuery {
  81. return nil, errors.New("Cannot read from database")
  82. }
  83. for _, puc := range repo.caches {
  84. if puc != nil && puc.ProjectID == projID {
  85. return puc, nil
  86. }
  87. }
  88. return nil, gorm.ErrRecordNotFound
  89. }
  90. // UpdateProjectUsageCache modifies an existing ProjectUsageCache in the database
  91. func (repo *ProjectUsageRepository) UpdateProjectUsageCache(
  92. cache *models.ProjectUsageCache,
  93. ) (*models.ProjectUsageCache, error) {
  94. if !repo.canQuery {
  95. return nil, errors.New("Cannot write database")
  96. }
  97. if int(cache.ID-1) >= len(repo.caches) || repo.usages[cache.ID-1] == nil {
  98. return nil, gorm.ErrRecordNotFound
  99. }
  100. index := int(cache.ID - 1)
  101. repo.caches[index] = cache
  102. return cache, nil
  103. }