github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/api/quotas/quotas.go (about) 1 package quotas 2 3 import ( 4 "fmt" 5 "net/url" 6 "strings" 7 8 "github.com/cloudfoundry/cli/cf/api/resources" 9 "github.com/cloudfoundry/cli/cf/configuration/core_config" 10 "github.com/cloudfoundry/cli/cf/errors" 11 "github.com/cloudfoundry/cli/cf/models" 12 "github.com/cloudfoundry/cli/cf/net" 13 ) 14 15 type QuotaRepository interface { 16 FindAll() (quotas []models.QuotaFields, apiErr error) 17 FindByName(name string) (quota models.QuotaFields, apiErr error) 18 19 AssignQuotaToOrg(orgGuid, quotaGuid string) error 20 21 // CRUD ahoy 22 Create(quota models.QuotaFields) error 23 Update(quota models.QuotaFields) error 24 Delete(quotaGuid string) error 25 } 26 27 type CloudControllerQuotaRepository struct { 28 config core_config.Reader 29 gateway net.Gateway 30 } 31 32 func NewCloudControllerQuotaRepository(config core_config.Reader, gateway net.Gateway) (repo CloudControllerQuotaRepository) { 33 repo.config = config 34 repo.gateway = gateway 35 return 36 } 37 38 func (repo CloudControllerQuotaRepository) findAllWithPath(path string) ([]models.QuotaFields, error) { 39 var quotas []models.QuotaFields 40 apiErr := repo.gateway.ListPaginatedResources( 41 repo.config.ApiEndpoint(), 42 path, 43 resources.QuotaResource{}, 44 func(resource interface{}) bool { 45 if qr, ok := resource.(resources.QuotaResource); ok { 46 quotas = append(quotas, qr.ToFields()) 47 } 48 return true 49 }) 50 return quotas, apiErr 51 } 52 53 func (repo CloudControllerQuotaRepository) FindAll() (quotas []models.QuotaFields, apiErr error) { 54 return repo.findAllWithPath("/v2/quota_definitions") 55 } 56 57 func (repo CloudControllerQuotaRepository) FindByName(name string) (quota models.QuotaFields, apiErr error) { 58 path := fmt.Sprintf("/v2/quota_definitions?q=%s", url.QueryEscape("name:"+name)) 59 quotas, apiErr := repo.findAllWithPath(path) 60 if apiErr != nil { 61 return 62 } 63 64 if len(quotas) == 0 { 65 apiErr = errors.NewModelNotFoundError("Quota", name) 66 return 67 } 68 69 quota = quotas[0] 70 return 71 } 72 73 func (repo CloudControllerQuotaRepository) Create(quota models.QuotaFields) error { 74 return repo.gateway.CreateResourceFromStruct(repo.config.ApiEndpoint(), "/v2/quota_definitions", quota) 75 } 76 77 func (repo CloudControllerQuotaRepository) Update(quota models.QuotaFields) error { 78 path := fmt.Sprintf("/v2/quota_definitions/%s", quota.Guid) 79 return repo.gateway.UpdateResourceFromStruct(repo.config.ApiEndpoint(), path, quota) 80 } 81 82 func (repo CloudControllerQuotaRepository) AssignQuotaToOrg(orgGuid, quotaGuid string) (apiErr error) { 83 path := fmt.Sprintf("/v2/organizations/%s", orgGuid) 84 data := fmt.Sprintf(`{"quota_definition_guid":"%s"}`, quotaGuid) 85 return repo.gateway.UpdateResource(repo.config.ApiEndpoint(), path, strings.NewReader(data)) 86 } 87 88 func (repo CloudControllerQuotaRepository) Delete(quotaGuid string) (apiErr error) { 89 path := fmt.Sprintf("/v2/quota_definitions/%s", quotaGuid) 90 return repo.gateway.DeleteResource(repo.config.ApiEndpoint(), path) 91 }