Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit 55ad581

Browse files
reidmitTeal Stannardreneighborselzocmonamohebbi
committed
Expand filtering by created_ats and updated_ats
The following resources can now be filtered by these values: * Buildpacks * Deployments * Domains * Droplets * ServiceUsageEvents * Builds We also moved the logic for `created_ats` and `updated_ats` into the `ListMessage` and `BaseListFetcher` classes so as not to duplicate it in every class that inherits from these. Co-authored-by: Teal Stannard <tstannard@pivotal.io> Co-authored-by: Renee Chu <rchu@pivotal.io> Co-authored-by: Chris Selzo <cselzo@pivotal.io> Co-authored-by: Mona Mohebbi <mmohebbi@pivotal.io>
1 parent f56021c commit 55ad581

66 files changed

Lines changed: 534 additions & 450 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/controllers/v3/apps_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ def builds
226226
app, space, org = AppFetcher.new.fetch(hashed_params[:guid])
227227
app_not_found! unless app && permission_queryer.can_read_from_space?(space.guid, org.guid)
228228

229-
dataset = AppBuildsListFetcher.new(app.guid, message).fetch_all
229+
dataset = AppBuildsListFetcher.fetch_all(app.guid, message)
230230
render status: :ok, json: Presenters::V3::PaginatedListPresenter.new(
231231
presenter: Presenters::V3::BuildPresenter,
232232
paginated_result: SequelPaginator.new.get_page(dataset, message.try(:pagination_options)),

app/controllers/v3/buildpacks_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def index
2424
message: message
2525
)
2626
else
27-
dataset = BuildpackListFetcher.new.fetch_all(message, eager_loaded_associations: Presenters::V3::BuildpackPresenter.associated_resources)
27+
dataset = BuildpackListFetcher.fetch_all(message, eager_loaded_associations: Presenters::V3::BuildpackPresenter.associated_resources)
2828
render status: :ok, json: Presenters::V3::PaginatedListPresenter.new(
2929
presenter: Presenters::V3::BuildpackPresenter,
3030
paginated_result: SequelPaginator.new.get_page(dataset, message.try(:pagination_options)),

app/controllers/v3/builds_controller.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@ class BuildsController < ApplicationController
1111
def index
1212
message = BuildsListMessage.from_params(query_params)
1313
invalid_param!(message.errors.full_messages) unless message.valid?
14-
build_list_fetcher = BuildListFetcher.new(message: message)
1514
dataset = if permission_queryer.can_read_globally?
16-
build_list_fetcher.fetch_all(eager_loaded_associations: Presenters::V3::BuildPresenter.associated_resources)
15+
BuildListFetcher.fetch_all(message, eager_loaded_associations: Presenters::V3::BuildPresenter.associated_resources)
1716
else
18-
build_list_fetcher.fetch_for_spaces(space_guids: permission_queryer.readable_space_guids,
17+
BuildListFetcher.fetch_for_spaces(message, space_guids: permission_queryer.readable_space_guids,
1918
eager_loaded_associations: Presenters::V3::BuildPresenter.associated_resources)
2019
end
2120

app/controllers/v3/deployments_controller.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ class DeploymentsController < ApplicationController
1212
def index
1313
message = DeploymentsListMessage.from_params(query_params)
1414
invalid_param!(message.errors.full_messages) unless message.valid?
15-
deployment_list_fetcher = DeploymentListFetcher.new(message: message)
1615
dataset = if permission_queryer.can_read_globally?
17-
deployment_list_fetcher.fetch_all
16+
DeploymentListFetcher.fetch_all(message)
1817
else
19-
deployment_list_fetcher.fetch_for_spaces(space_guids: permission_queryer.readable_space_guids)
18+
DeploymentListFetcher.fetch_for_spaces(message, space_guids: permission_queryer.readable_space_guids)
2019
end
2120

2221
render status: :ok, json: Presenters::V3::PaginatedListPresenter.new(

app/controllers/v3/droplets_controller.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,16 @@ def index
3030
invalid_param!(message.errors.full_messages) unless message.valid?
3131

3232
if app_nested?
33-
app, dataset = DropletListFetcher.new(message: message).fetch_for_app
33+
app, dataset = DropletListFetcher.fetch_for_app(message)
3434
app_not_found! unless app && permission_queryer.can_read_from_space?(app.space.guid, app.organization.guid)
3535
elsif package_nested?
36-
package, dataset = DropletListFetcher.new(message: message).fetch_for_package
36+
package, dataset = DropletListFetcher.fetch_for_package(message)
3737
package_not_found! unless package && permission_queryer.can_read_from_space?(package.space.guid, package.space.organization.guid)
3838
else
3939
dataset = if permission_queryer.can_read_globally?
40-
DropletListFetcher.new(message: message).fetch_all
40+
DropletListFetcher.fetch_all(message)
4141
else
42-
DropletListFetcher.new(message: message).fetch_for_spaces(space_guids: permission_queryer.readable_space_guids)
42+
DropletListFetcher.fetch_for_spaces(message, permission_queryer.readable_space_guids)
4343
end
4444
end
4545

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,33 @@
1+
require 'fetchers/base_list_fetcher'
2+
13
module VCAP::CloudController
2-
class AppBuildsListFetcher
3-
def initialize(app_guid, message)
4-
@app_guid = app_guid
5-
@message = message
6-
end
4+
class AppBuildsListFetcher < BaseListFetcher
5+
class << self
6+
def fetch_all(app_guid, message)
7+
dataset = BuildModel.dataset.where(app_guid: app_guid)
8+
filter(message, dataset)
9+
end
710

8-
def fetch_all
9-
dataset = BuildModel.dataset.where(app_guid: app_guid)
11+
private
1012

11-
if message.requested?(:label_selector)
12-
dataset = LabelSelectorQueryGenerator.add_selector_queries(
13-
label_klass: BuildLabelModel,
14-
resource_dataset: dataset,
15-
requirements: message.requirements,
16-
resource_klass: BuildModel,
17-
)
18-
end
13+
def filter(message, dataset)
14+
if message.requested?(:label_selector)
15+
dataset = LabelSelectorQueryGenerator.add_selector_queries(
16+
label_klass: BuildLabelModel,
17+
resource_dataset: dataset,
18+
requirements: message.requirements,
19+
resource_klass: BuildModel,
20+
)
21+
end
1922

20-
if message.requested? :states
21-
dataset = dataset.where(state: message.states)
23+
if message.requested? :states
24+
dataset = dataset.where(state: message.states)
25+
end
26+
27+
super(message, dataset, BuildModel)
2228
end
2329

24-
dataset
30+
attr_reader :app_guid, :message
2531
end
26-
27-
private
28-
29-
attr_reader :app_guid, :message
3032
end
3133
end

app/fetchers/build_list_fetcher.rb

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,47 @@
11
module VCAP::CloudController
2-
class BuildListFetcher
3-
def initialize(message:)
4-
@message = message
5-
end
6-
7-
def fetch_all(eager_loaded_associations: [])
8-
filter(AppModel.dataset, eager_loaded_associations: eager_loaded_associations)
9-
end
2+
class BuildListFetcher < BaseListFetcher
3+
class << self
4+
def fetch_all(message, eager_loaded_associations: [])
5+
filter(message, AppModel.dataset, eager_loaded_associations: eager_loaded_associations)
6+
end
107

11-
def fetch_for_spaces(space_guids:, eager_loaded_associations: [])
12-
app_dataset = AppModel.select(:id).where(space_guid: space_guids)
13-
filter(app_dataset, eager_loaded_associations: eager_loaded_associations)
14-
end
8+
def fetch_for_spaces(message, space_guids:, eager_loaded_associations: [])
9+
app_dataset = AppModel.select(:id).where(space_guid: space_guids)
10+
filter(message, app_dataset, eager_loaded_associations: eager_loaded_associations)
11+
end
1512

16-
private
13+
private
1714

18-
attr_reader :message
15+
def filter(message, app_dataset, eager_loaded_associations: [])
16+
dataset = BuildModel.dataset
1917

20-
def filter(app_dataset, eager_loaded_associations: [])
21-
dataset = BuildModel.dataset
18+
if message.requested?(:label_selector)
19+
dataset = LabelSelectorQueryGenerator.add_selector_queries(
20+
label_klass: BuildLabelModel,
21+
resource_dataset: dataset,
22+
requirements: message.requirements,
23+
resource_klass: BuildModel,
24+
)
25+
end
2226

23-
if message.requested?(:label_selector)
24-
dataset = LabelSelectorQueryGenerator.add_selector_queries(
25-
label_klass: BuildLabelModel,
26-
resource_dataset: dataset,
27-
requirements: message.requirements,
28-
resource_klass: BuildModel,
29-
)
30-
end
27+
if message.requested?(:states)
28+
dataset = dataset.where(state: message.states)
29+
end
3130

32-
if message.requested?(:states)
33-
dataset = dataset.where(state: message.states)
34-
end
31+
if message.requested?(:package_guids)
32+
dataset = dataset.where(package_guid: message.package_guids)
33+
end
3534

36-
if message.requested?(:package_guids)
37-
dataset = dataset.where(package_guid: message.package_guids)
35+
dataset = dataset.where(app_guid: filter_app_dataset(message, app_dataset).select(:guid)).eager(eager_loaded_associations).qualify
36+
super(message, dataset, BuildModel)
3837
end
3938

40-
dataset.where(app_guid: filter_app_dataset(app_dataset).select(:guid)).eager(eager_loaded_associations).qualify
41-
end
42-
43-
def filter_app_dataset(app_dataset)
44-
if message.requested? :app_guids
45-
app_dataset = app_dataset.where(guid: message.app_guids)
39+
def filter_app_dataset(message, app_dataset)
40+
if message.requested? :app_guids
41+
app_dataset = app_dataset.where(guid: message.app_guids)
42+
end
43+
app_dataset
4644
end
47-
app_dataset
4845
end
4946
end
5047
end
Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,39 @@
11
require 'cloud_controller/paging/sequel_paginator'
22
require 'cloud_controller/paging/paginated_result'
33
require 'fetchers/null_filter_query_generator'
4+
require 'fetchers/base_list_fetcher'
45

56
module VCAP::CloudController
6-
class BuildpackListFetcher
7-
def fetch_all(message, eager_loaded_associations: [])
8-
filter(message, buildpacks_dataset(eager_loaded_associations))
9-
end
10-
11-
def buildpacks_dataset(eager_loaded_associations)
12-
Buildpack.dataset.eager(eager_loaded_associations)
13-
end
14-
15-
def filter(message, dataset)
16-
if message.requested?(:names)
17-
dataset = dataset.where(name: message.names)
7+
class BuildpackListFetcher < BaseListFetcher
8+
class << self
9+
def fetch_all(message, eager_loaded_associations: [])
10+
filter(message, buildpacks_dataset(eager_loaded_associations))
1811
end
1912

20-
if message.requested?(:stacks)
21-
dataset = NullFilterQueryGenerator.add_filter(dataset, :stack, message.stacks)
13+
def buildpacks_dataset(eager_loaded_associations)
14+
Buildpack.dataset.eager(eager_loaded_associations)
2215
end
2316

24-
if message.requested?(:label_selector)
25-
dataset = LabelSelectorQueryGenerator.add_selector_queries(
26-
label_klass: BuildpackLabelModel,
27-
resource_dataset: dataset,
28-
requirements: message.requirements,
29-
resource_klass: Buildpack,
30-
)
31-
end
17+
def filter(message, dataset)
18+
if message.requested?(:names)
19+
dataset = dataset.where(name: message.names)
20+
end
21+
22+
if message.requested?(:stacks)
23+
dataset = NullFilterQueryGenerator.add_filter(dataset, :stack, message.stacks)
24+
end
3225

33-
dataset
26+
if message.requested?(:label_selector)
27+
dataset = LabelSelectorQueryGenerator.add_selector_queries(
28+
label_klass: BuildpackLabelModel,
29+
resource_dataset: dataset,
30+
requirements: message.requirements,
31+
resource_klass: Buildpack,
32+
)
33+
end
34+
35+
super(message, dataset, Buildpack)
36+
end
3437
end
3538
end
3639
end
Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,55 @@
1-
module VCAP::CloudController
2-
class DeploymentListFetcher
3-
def initialize(message:)
4-
@message = message
5-
end
6-
7-
def fetch_all
8-
filter(AppModel.select(:id))
9-
end
10-
11-
def fetch_for_spaces(space_guids:)
12-
app_dataset = AppModel.where(space_guid: space_guids)
13-
filter(app_dataset)
14-
end
15-
16-
private
17-
18-
attr_reader :message
1+
require 'fetchers/base_list_fetcher'
192

20-
def filter(app_dataset)
21-
dataset = filter_deployment_dataset(DeploymentModel.dataset)
3+
module VCAP::CloudController
4+
class DeploymentListFetcher < BaseListFetcher
5+
class << self
6+
def fetch_all(message)
7+
filter(message, AppModel.select(:id))
8+
end
229

23-
if message.requested? :app_guids
24-
app_dataset = app_dataset.where(guid: message.app_guids)
10+
def fetch_for_spaces(message, space_guids:)
11+
app_dataset = AppModel.where(space_guid: space_guids)
12+
filter(message, app_dataset)
2513
end
2614

27-
dataset.where(app: app_dataset)
28-
end
15+
private
2916

30-
def filter_deployment_dataset(dataset)
31-
if message.requested? :states
32-
dataset = dataset.where(state: message.states)
33-
end
17+
attr_reader :message
3418

35-
if message.requested? :status_reasons
36-
dataset = NullFilterQueryGenerator.add_filter(dataset, :status_reason, message.status_reasons)
37-
end
19+
def filter(message, app_dataset)
20+
dataset = filter_deployment_dataset(message, DeploymentModel.dataset)
3821

39-
if message.requested? :status_values
40-
dataset = dataset.where(status_value: message.status_values)
41-
end
22+
if message.requested? :app_guids
23+
app_dataset = app_dataset.where(guid: message.app_guids)
24+
end
4225

43-
if message.requested?(:label_selector)
44-
dataset = LabelSelectorQueryGenerator.add_selector_queries(
45-
label_klass: DeploymentLabelModel,
46-
resource_dataset: dataset,
47-
requirements: message.requirements,
48-
resource_klass: DeploymentModel,
49-
)
26+
dataset = dataset.where(app: app_dataset)
27+
super(message, dataset, DeploymentModel)
5028
end
5129

52-
dataset
30+
def filter_deployment_dataset(message, dataset)
31+
if message.requested? :states
32+
dataset = dataset.where(state: message.states)
33+
end
34+
35+
if message.requested? :status_reasons
36+
dataset = NullFilterQueryGenerator.add_filter(dataset, :status_reason, message.status_reasons)
37+
end
38+
39+
if message.requested? :status_values
40+
dataset = dataset.where(status_value: message.status_values)
41+
end
42+
43+
if message.requested?(:label_selector)
44+
dataset = LabelSelectorQueryGenerator.add_selector_queries(
45+
label_klass: DeploymentLabelModel,
46+
resource_dataset: dataset,
47+
requirements: message.requirements,
48+
resource_klass: DeploymentModel,
49+
)
50+
end
51+
dataset
52+
end
5353
end
5454
end
5555
end

app/fetchers/domain_fetcher.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module VCAP::CloudController
2-
class DomainFetcher
2+
class DomainFetcher < BaseListFetcher
33
class << self
44
def fetch_all_for_orgs(readable_org_guids)
55
# Q: The "Domain" in Domain.dataset is arbitrary -- just a way to get access to any database table.
@@ -53,7 +53,7 @@ def filter(message, dataset)
5353
)
5454
end
5555

56-
dataset
56+
super(message, dataset, Domain)
5757
end
5858
end
5959
end

0 commit comments

Comments
 (0)