Skip to content

Commit 863d92f

Browse files
committed
fix: add econciliate plugin
1 parent a593103 commit 863d92f

2 files changed

Lines changed: 78 additions & 5 deletions

File tree

  • packages
    • forest_admin_datasource_rpc/lib/forest_admin_datasource_rpc
    • forest_admin_rpc_agent/lib/forest_admin_rpc_agent
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
module ForestAdminDatasourceRpc
2+
class ReconciliateRpc < ForestAdminDatasourceCustomizer::Plugins::Plugin
3+
def run(datasource_customizer, _collection_customizer = nil, _options = {})
4+
datasource_customizer.datasources.each do |datasource|
5+
next unless datasource.is_a?(ForestAdminDatasourceRpc::Datasource)
6+
7+
# Disable search for non-searchable collections
8+
datasource.collections.each do |_name, collection|
9+
unless collection.schema[:searchable]
10+
cz = datasource_customizer.get_collection(collection.name)
11+
cz.disable_search
12+
end
13+
end
14+
15+
# Add relations from rpc_relations
16+
(datasource.rpc_relations || {}).each do |collection_name, relations|
17+
cz = datasource_customizer.get_collection(collection_name)
18+
19+
relations.each do |relation_name, relation_definition|
20+
add_relation(cz, relation_name, relation_definition)
21+
end
22+
end
23+
end
24+
end
25+
26+
private
27+
28+
def add_relation(collection_customizer, relation_name, relation_definition)
29+
type = relation_definition[:type] || relation_definition['type']
30+
foreign_collection = relation_definition[:foreign_collection] || relation_definition['foreign_collection']
31+
32+
case type
33+
when 'ManyToMany'
34+
through_collection = relation_definition[:through_collection] || relation_definition['through_collection']
35+
collection_customizer.add_many_to_many_relation(
36+
relation_name,
37+
foreign_collection,
38+
through_collection,
39+
{
40+
foreign_key: relation_definition[:foreign_key] || relation_definition['foreign_key'],
41+
foreign_key_target: relation_definition[:foreign_key_target] || relation_definition['foreign_key_target'],
42+
origin_key: relation_definition[:origin_key] || relation_definition['origin_key'],
43+
origin_key_target: relation_definition[:origin_key_target] || relation_definition['origin_key_target']
44+
}
45+
)
46+
when 'OneToMany'
47+
collection_customizer.add_one_to_many_relation(
48+
relation_name,
49+
foreign_collection,
50+
{
51+
origin_key: relation_definition[:origin_key] || relation_definition['origin_key'],
52+
origin_key_target: relation_definition[:origin_key_target] || relation_definition['origin_key_target']
53+
}
54+
)
55+
when 'OneToOne'
56+
collection_customizer.add_one_to_one_relation(
57+
relation_name,
58+
foreign_collection,
59+
{
60+
origin_key: relation_definition[:origin_key] || relation_definition['origin_key'],
61+
origin_key_target: relation_definition[:origin_key_target] || relation_definition['origin_key_target']
62+
}
63+
)
64+
else # ManyToOne
65+
collection_customizer.add_many_to_one_relation(
66+
relation_name,
67+
foreign_collection,
68+
{
69+
foreign_key: relation_definition[:foreign_key] || relation_definition['foreign_key'],
70+
foreign_key_target: relation_definition[:foreign_key_target] || relation_definition['foreign_key_target']
71+
}
72+
)
73+
end
74+
end
75+
end
76+
end

packages/forest_admin_rpc_agent/lib/forest_admin_rpc_agent/agent.rb

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,19 +94,16 @@ def build_and_cache_rpc_schema_from_datasource
9494
def build_rpc_schema_from_datasource(datasource)
9595
schema = customizer.schema
9696

97-
schema = agent.customizer.schema
98-
rpc_collections = agent.rpc_collections || []
99-
10097
rpc_relations = {}
10198
collections = []
10299

103100
datasource.collections.each do |_name, collection|
104-
if rpc_collections.include?(collection.name)
101+
if @rpc_collections.include?(collection.name)
105102
# RPC collection → extract relations to non-RPC collections
106103
relations = {}
107104
collection.schema[:fields].each do |field_name, field|
108105
next if field.type == 'Column'
109-
next if rpc_collections.include?(field.foreign_collection)
106+
next if @rpc_collections.include?(field.foreign_collection)
110107

111108
relations[field_name] = field
112109
end

0 commit comments

Comments
 (0)