Skip to content

Commit 9ac2ba9

Browse files
committed
feat: eager load latest version for /pacticipants resource
1 parent 01dd866 commit 9ac2ba9

File tree

5 files changed

+40
-3
lines changed

5 files changed

+40
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
Sequel.migration do
2+
up do
3+
latest_version_orders = from(:versions)
4+
.select_group(:pacticipant_id)
5+
.select_append{ max(order).as(latest_version_order) }
6+
7+
create_or_replace_view(:latest_version_orders, latest_version_orders)
8+
9+
join = {
10+
Sequel[:versions][:pacticipant_id] => Sequel[:latest_version_orders][:pacticipant_id],
11+
Sequel[:versions][:order] => Sequel[:latest_version_orders][:latest_version_order]
12+
}
13+
14+
latest_versions = from(:versions)
15+
.select(Sequel[:versions].*)
16+
.join(:latest_version_orders, join)
17+
18+
create_or_replace_view(:latest_versions, latest_versions)
19+
end
20+
21+
down do
22+
drop_view(:latest_version_orders)
23+
drop_view(:latest_versions)
24+
end
25+
end

db/pact_broker_database.sqlite3

0 Bytes
Binary file not shown.

lib/pact_broker/domain/pacticipant.rb

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
require 'pact_broker/db'
22
require 'pact_broker/messages'
33
require 'pact_broker/repositories/helpers'
4+
require 'pact_broker/versions/latest_version'
5+
require 'pact_broker/domain/label'
46

57
module PactBroker
6-
78
module Domain
8-
99
class Pacticipant < Sequel::Model
1010

1111
include Messages
@@ -15,6 +15,7 @@ class Pacticipant < Sequel::Model
1515
one_to_many :versions, :order => :order, :reciprocal => :pacticipant
1616
one_to_many :labels, :order => :name, :reciprocal => :pacticipant
1717
one_to_many :pacts
18+
one_to_one :latest_version, :class => "PactBroker::Versions::LatestVersion", primary_key: :id, key: :pacticipant_id
1819

1920
dataset_module do
2021
include PactBroker::Repositories::Helpers

lib/pact_broker/pacticipants/repository.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def find_all
2323
def find options = {}
2424
query = PactBroker::Domain::Pacticipant.select_all_qualified
2525
query = query.label(options[:label_name]) if options[:label_name]
26-
query.order_ignore_case(Sequel[:pacticipants][:name]).eager(:labels).all
26+
query.order_ignore_case(Sequel[:pacticipants][:name]).eager(:labels).eager(:latest_version).all
2727
end
2828

2929
def find_all_pacticipant_versions_in_reverse_order name
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
require 'pact_broker/domain/version'
2+
3+
module PactBroker
4+
module Versions
5+
include PactBroker::Repositories::Helpers
6+
7+
class LatestVersion < PactBroker::Domain::Version
8+
set_dataset(:latest_versions)
9+
end
10+
end
11+
end

0 commit comments

Comments
 (0)