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

Commit 2871d5c

Browse files
author
Derik Evangelista
authored
v3(route-bindings): create and get metadata
* v3(route-bindings): create with metadata * v3(route-bindings): get metadata [#175092365](https://www.pivotaltracker.com/story/show/175092365) [#175092364](https://www.pivotaltracker.com/story/show/175092364)
1 parent 0235f71 commit 2871d5c

16 files changed

+246
-31
lines changed

app/actions/service_route_binding_create.rb

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require 'services/service_brokers/service_client_provider'
2+
require 'actions/metadata_update'
23
require 'actions/v3/service_binding_create'
34

45
module VCAP::CloudController
@@ -9,19 +10,23 @@ def initialize(service_event_repository)
910
@service_event_repository = service_event_repository
1011
end
1112

12-
def precursor(service_instance, route)
13+
def precursor(service_instance, route, message:)
1314
validate!(service_instance, route)
1415

15-
RouteBinding.new.save_with_new_operation(
16-
{
17-
service_instance: service_instance,
18-
route: route,
19-
},
20-
{
21-
type: 'create',
22-
state: 'in progress',
23-
}
24-
)
16+
RouteBinding.db.transaction do
17+
b = RouteBinding.new.save_with_new_operation(
18+
{
19+
service_instance: service_instance,
20+
route: route,
21+
},
22+
{
23+
type: 'create',
24+
state: 'in progress',
25+
}
26+
)
27+
MetadataUpdate.update(b, message)
28+
b
29+
end
2530
end
2631

2732
class UnprocessableCreate < StandardError; end

app/controllers/v3/service_route_bindings_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def create
4646

4747
check_parameters_support(service_instance, message)
4848
action = V3::ServiceRouteBindingCreate.new(service_event_repository)
49-
precursor = action.precursor(service_instance, route)
49+
precursor = action.precursor(service_instance, route, message: message)
5050

5151
case service_instance
5252
when ManagedServiceInstance

app/messages/service_route_binding_create_message.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
require 'messages/base_message'
1+
require 'messages/metadata_base_message'
22
require 'utils/hash_utils'
33

44
module VCAP::CloudController
5-
class ServiceRouteBindingCreateMessage < BaseMessage
5+
class ServiceRouteBindingCreateMessage < MetadataBaseMessage
66
register_allowed_keys [:relationships, :parameters]
77

88
validates_with NoAdditionalKeysValidator, RelationshipValidator

app/models.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@
110110
require 'models/services/service_offering_annotation_model'
111111
require 'models/services/service_binding'
112112
require 'models/services/route_binding'
113+
require 'models/services/route_binding_label_model'
114+
require 'models/services/route_binding_annotation_model'
113115
require 'models/services/route_binding_operation'
114116
require 'models/services/service_dashboard_client'
115117
require 'models/services/service_instance'

app/models/services/route_binding.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ class RouteBinding < Sequel::Model
66

77
one_to_one :route_binding_operation
88

9+
one_to_many :labels, class: 'VCAP::CloudController::RouteBindingLabelModel', key: :resource_guid, primary_key: :guid
10+
one_to_many :annotations, class: 'VCAP::CloudController::RouteBindingAnnotationModel', key: :resource_guid, primary_key: :guid
11+
add_association_dependencies labels: :destroy
12+
add_association_dependencies annotations: :destroy
13+
914
many_to_one :route
1015
many_to_one :service_instance
1116

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module VCAP::CloudController
2+
class RouteBindingAnnotationModel < Sequel::Model(:route_binding_annotations)
3+
many_to_one :route_binding,
4+
primary_key: :guid,
5+
key: :resource_guid,
6+
without_guid_generation: true
7+
8+
def_column_alias(:key_name, :key)
9+
end
10+
end
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module VCAP::CloudController
2+
class RouteBindingLabelModel < Sequel::Model(:route_binding_labels)
3+
many_to_one :route_binding,
4+
primary_key: :guid,
5+
key: :resource_guid,
6+
without_guid_generation: true
7+
end
8+
end

app/presenters/v3/service_route_binding_presenter.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
require_relative 'base_presenter'
22
require 'presenters/mixins/last_operation_helper'
3+
require 'presenters/mixins/metadata_presentation_helpers'
34

45
module VCAP
56
module CloudController
67
module Presenters
78
module V3
89
class ServiceRouteBindingPresenter < BasePresenter
910
include VCAP::CloudController::Presenters::Mixins::LastOperationHelper
11+
include VCAP::CloudController::Presenters::Mixins::MetadataPresentationHelpers
1012

1113
def to_hash
1214
base.merge(decorations)
@@ -21,6 +23,10 @@ def base
2123
created_at: binding.created_at,
2224
updated_at: binding.updated_at,
2325
last_operation: last_operation(binding),
26+
metadata: {
27+
labels: hashified_labels(binding.labels),
28+
annotations: hashified_annotations(binding.annotations),
29+
},
2430
relationships: relationships,
2531
links: links
2632
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Sequel.migration do
2+
change do
3+
create_table(:route_binding_labels) do
4+
VCAP::Migration.common(self)
5+
VCAP::Migration.labels_common(self, :route_binding_labels, :route_bindings)
6+
end
7+
8+
create_table(:route_binding_annotations) do
9+
VCAP::Migration.common(self)
10+
VCAP::Migration.annotations_common(self, :route_binding_annotations, :route_bindings)
11+
end
12+
end
13+
end

docs/v3/source/includes/api_resources/_service_route_bindings.erb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@
1111
"updated_at": "2020-03-10T15:49:32Z",
1212
"created_at": "2020-03-10T15:49:29Z"
1313
},
14+
"metadata": {
15+
"annotations": {
16+
"foo": "bar"
17+
},
18+
"labels": {
19+
"baz": "qux"
20+
}
21+
},
1422
"relationships": {
1523
"service_instance": {
1624
"data": {
@@ -60,6 +68,14 @@
6068
"created_at": "2020-09-08T08:55:59Z",
6169
"updated_at": "2020-09-08T08:55:59Z",
6270
"last_operation": null,
71+
"metadata": {
72+
"annotations": {
73+
"foo": "bar"
74+
},
75+
"labels": {
76+
"baz": "qux"
77+
}
78+
},
6379
"relationships": {
6480
"service_instance": {
6581
"data": {
@@ -90,6 +106,14 @@
90106
"created_at": "2020-09-08T09:13:51Z",
91107
"updated_at": "2020-09-08T09:13:51Z",
92108
"last_operation": null,
109+
"metadata": {
110+
"annotations": {
111+
"foo": "bar"
112+
},
113+
"labels": {
114+
"baz": "qux"
115+
}
116+
},
93117
"relationships": {
94118
"service_instance": {
95119
"data": {

0 commit comments

Comments
 (0)