Skip to content

Commit 360d236

Browse files
committed
feat: move "latest id" upsert logic into own class
1 parent 19a3355 commit 360d236

5 files changed

+80
-24
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
require 'pact_broker/pacts/all_pact_publications'
2+
require 'pact_broker/repositories/helpers'
3+
4+
module PactBroker
5+
module Pacts
6+
class LatestPactPublicationIdForConsumerVersion < Sequel::Model(:latest_pact_publication_ids_for_consumer_versions)
7+
8+
dataset_module do
9+
include PactBroker::Repositories::Helpers
10+
end
11+
12+
def upsert
13+
self.class.upsert(to_hash, [:provider_id, :consumer_version_id])
14+
end
15+
end
16+
end
17+
end
18+
19+
# Table: latest_pact_publications_by_consumer_versions
20+
# Columns:
21+
# id | integer |
22+
# consumer_id | integer |
23+
# consumer_name | text |
24+
# consumer_version_id | integer |
25+
# consumer_version_number | text |
26+
# consumer_version_order | integer |
27+
# provider_id | integer |
28+
# provider_name | text |
29+
# revision_number | integer |
30+
# pact_version_id | integer |
31+
# pact_version_sha | text |
32+
# created_at | timestamp without time zone |

lib/pact_broker/pacts/repository.rb

+3-8
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
require 'pact_broker/domain'
1212
require 'pact_broker/pacts/parse'
1313
require 'pact_broker/matrix/head_row'
14+
require 'pact_broker/pacts/latest_pact_publication_id_by_consumer_version'
1415

1516
module PactBroker
1617
module Pacts
@@ -49,21 +50,15 @@ def update id, params
4950
end
5051

5152
def update_latest_pact_publication_ids(pact_publication)
52-
key = {
53+
params = {
5354
consumer_version_id: pact_publication.consumer_version_id,
5455
provider_id: pact_publication.provider_id,
55-
}
56-
57-
other = {
5856
pact_publication_id: pact_publication.id,
5957
consumer_id: pact_publication.consumer_id,
6058
pact_version_id: pact_publication.pact_version_id
6159
}
6260

63-
row = key.merge(other)
64-
65-
table = AllPactPublications.db[:latest_pact_publication_ids_for_consumer_versions]
66-
PactBroker::Repositories::Helpers.upsert(table, key, other)
61+
LatestPactPublicationIdForConsumerVersion.new(params).upsert
6762
end
6863

6964
def delete params

lib/pact_broker/repositories/helpers.rb

+7-8
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,18 @@ def select_for_subquery column
3636
end
3737
end
3838

39-
# TODO refactor to use proper dataset module
40-
def upsert table, key, other
41-
row = key.merge(other)
39+
def upsert row, key_names
4240
if postgres?
43-
table.insert_conflict(update: other, target: key.keys).insert(row)
41+
insert_conflict(update: row, target: key_names).insert(row)
4442
elsif mysql?
45-
table.on_duplicate_key_update.insert(row)
43+
on_duplicate_key_update.insert(row)
4644
else
4745
# Sqlite
48-
if table.where(key).count == 0
49-
table.insert(row)
46+
key = row.reject{ |k, v| !key_names.include?(k) }
47+
if where(key).count == 0
48+
insert(row)
5049
else
51-
table.where(key).update(row)
50+
where(key).update(row)
5251
end
5352
end
5453
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
require 'pact_broker/domain/verification'
2+
3+
module PactBroker
4+
module Verifications
5+
class LatestVerificationIdForPactVersionAndProviderVersion < Sequel::Model(:latest_verification_id_for_pact_version_and_provider_version)
6+
dataset_module do
7+
include PactBroker::Repositories::Helpers
8+
end
9+
10+
def upsert
11+
self.class.upsert(to_hash, [:pact_version_id, :provider_version_id])
12+
end
13+
end
14+
end
15+
end
16+
17+
# Table: latest_verification_id_for_pact_version_and_provider_version
18+
# Columns:
19+
# consumer_id | integer | NOT NULL
20+
# pact_version_id | integer | NOT NULL
21+
# provider_id | integer | NOT NULL
22+
# provider_version_id | integer | NOT NULL
23+
# verification_id | integer | NOT NULL
24+
# Indexes:
25+
# latest_v_id_for_pv_and_pv_pv_id_pv_id_unq | UNIQUE btree (pact_version_id, provider_version_id)
26+
# latest_v_id_for_pv_and_pv_v_id_unq | UNIQUE btree (verification_id)
27+
# latest_v_id_for_pv_and_pv_pv_id_v_id | btree (pact_version_id, verification_id)
28+
# Foreign key constraints:
29+
# latest_v_id_for_pv_and_pv_consumer_id_fk | (consumer_id) REFERENCES pacticipants(id) ON DELETE CASCADE
30+
# latest_v_id_for_pv_and_pv_pact_version_id_fk | (pact_version_id) REFERENCES pact_versions(id) ON DELETE CASCADE
31+
# latest_v_id_for_pv_and_pv_provider_id_fk | (provider_id) REFERENCES pacticipants(id) ON DELETE CASCADE
32+
# latest_v_id_for_pv_and_pv_provider_version_id_fk | (provider_version_id) REFERENCES versions(id) ON DELETE CASCADE
33+
# latest_v_id_for_pv_and_pv_verification_id_fk | (verification_id) REFERENCES verifications(id) ON DELETE CASCADE

lib/pact_broker/verifications/repository.rb

+5-8
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require 'pact_broker/verifications/latest_verifications_by_consumer_version'
44
require 'pact_broker/verifications/all_verifications'
55
require 'pact_broker/verifications/sequence'
6+
require 'pact_broker/verifications/latest_verification_id_for_pact_version_and_provider_version'
67

78
module PactBroker
89
module Verifications
@@ -33,18 +34,14 @@ def create verification, provider_version_number, pact
3334
end
3435

3536
def update_latest_verification_id verification
36-
key = {
37-
pact_version_id: verification.pact_version_id, provider_version_id: verification.provider_version_id
38-
}
39-
40-
other = {
37+
params = {
38+
pact_version_id: verification.pact_version_id,
39+
provider_version_id: verification.provider_version_id,
4140
provider_id: verification.provider_version.pacticipant_id,
4241
verification_id: verification.id,
4342
consumer_id: verification.consumer_id
4443
}
45-
46-
table = PactBroker::Domain::Verification.db[:latest_verification_id_for_pact_version_and_provider_version]
47-
PactBroker::Repositories::Helpers.upsert(table, key, other)
44+
LatestVerificationIdForPactVersionAndProviderVersion.new(params).upsert
4845
end
4946

5047
def find consumer_name, provider_name, pact_version_sha, verification_number

0 commit comments

Comments
 (0)