Skip to content

Commit 60cdce0

Browse files
committed
feat(hasura): add author relationships to all hierarchy levels
Add author_id column and junction tables (software_author, version_author, configuration_author) to Software, SoftwareVersion, and ModelConfiguration. Track all relationships and permissions in Hasura metadata.
1 parent 2c7ed9a commit 60cdce0

3 files changed

Lines changed: 219 additions & 0 deletions

File tree

metadata/tables.yaml

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2877,6 +2877,10 @@
28772877
- table:
28782878
name: modelcatalog_software
28792879
schema: public
2880+
object_relationships:
2881+
- name: author
2882+
using:
2883+
foreign_key_constraint_on: author_id
28802884
array_relationships:
28812885
- name: versions
28822886
using:
@@ -2885,6 +2889,13 @@
28852889
table:
28862890
name: modelcatalog_software_version
28872891
schema: public
2892+
- name: authors
2893+
using:
2894+
foreign_key_constraint_on:
2895+
column: software_id
2896+
table:
2897+
name: modelcatalog_software_author
2898+
schema: public
28882899
select_permissions:
28892900
- role: anonymous
28902901
permission:
@@ -2900,6 +2911,7 @@
29002911
- has_documentation
29012912
- has_download_url
29022913
- has_purpose
2914+
- author_id
29032915
filter: {}
29042916
- role: user
29052917
permission:
@@ -2915,6 +2927,7 @@
29152927
- has_documentation
29162928
- has_download_url
29172929
- has_purpose
2930+
- author_id
29182931
filter: {}
29192932
- table:
29202933
name: modelcatalog_software_version
@@ -2923,6 +2936,9 @@
29232936
- name: software
29242937
using:
29252938
foreign_key_constraint_on: software_id
2939+
- name: author
2940+
using:
2941+
foreign_key_constraint_on: author_id
29262942
array_relationships:
29272943
- name: configurations
29282944
using:
@@ -2973,6 +2989,13 @@
29732989
table:
29742990
name: modelcatalog_software_version_output_variable
29752991
schema: public
2992+
- name: authors
2993+
using:
2994+
foreign_key_constraint_on:
2995+
column: software_version_id
2996+
table:
2997+
name: modelcatalog_version_author
2998+
schema: public
29762999
select_permissions:
29773000
- role: anonymous
29783001
permission:
@@ -2991,6 +3014,7 @@
29913014
- parameterization
29923015
- runtime_estimation
29933016
- theoretical_basis
3017+
- author_id
29943018
filter: {}
29953019
- role: user
29963020
permission:
@@ -3009,6 +3033,7 @@
30093033
- parameterization
30103034
- runtime_estimation
30113035
- theoretical_basis
3036+
- author_id
30123037
filter: {}
30133038
- table:
30143039
name: modelcatalog_model_configuration
@@ -3017,6 +3042,9 @@
30173042
- name: software_version
30183043
using:
30193044
foreign_key_constraint_on: software_version_id
3045+
- name: author
3046+
using:
3047+
foreign_key_constraint_on: author_id
30203048
array_relationships:
30213049
- name: setups
30223050
using:
@@ -3067,6 +3095,13 @@
30673095
table:
30683096
name: modelcatalog_configuration_region
30693097
schema: public
3098+
- name: authors
3099+
using:
3100+
foreign_key_constraint_on:
3101+
column: configuration_id
3102+
table:
3103+
name: modelcatalog_configuration_author
3104+
schema: public
30703105
select_permissions:
30713106
- role: anonymous
30723107
permission:
@@ -3081,6 +3116,7 @@
30813116
- has_implementation_script_location
30823117
- has_software_image
30833118
- has_model_result_table
3119+
- author_id
30843120
filter: {}
30853121
- role: user
30863122
permission:
@@ -3095,6 +3131,7 @@
30953131
- has_implementation_script_location
30963132
- has_software_image
30973133
- has_model_result_table
3134+
- author_id
30983135
filter: {}
30993136
- table:
31003137
name: modelcatalog_model_configuration_setup
@@ -3433,13 +3470,55 @@
34333470
name: modelcatalog_person
34343471
schema: public
34353472
array_relationships:
3473+
- name: authored_software
3474+
using:
3475+
foreign_key_constraint_on:
3476+
column: author_id
3477+
table:
3478+
name: modelcatalog_software
3479+
schema: public
3480+
- name: authored_versions
3481+
using:
3482+
foreign_key_constraint_on:
3483+
column: author_id
3484+
table:
3485+
name: modelcatalog_software_version
3486+
schema: public
3487+
- name: authored_configurations
3488+
using:
3489+
foreign_key_constraint_on:
3490+
column: author_id
3491+
table:
3492+
name: modelcatalog_model_configuration
3493+
schema: public
34363494
- name: authored_setups
34373495
using:
34383496
foreign_key_constraint_on:
34393497
column: author_id
34403498
table:
34413499
name: modelcatalog_model_configuration_setup
34423500
schema: public
3501+
- name: software_authors
3502+
using:
3503+
foreign_key_constraint_on:
3504+
column: person_id
3505+
table:
3506+
name: modelcatalog_software_author
3507+
schema: public
3508+
- name: version_authors
3509+
using:
3510+
foreign_key_constraint_on:
3511+
column: person_id
3512+
table:
3513+
name: modelcatalog_version_author
3514+
schema: public
3515+
- name: configuration_authors
3516+
using:
3517+
foreign_key_constraint_on:
3518+
column: person_id
3519+
table:
3520+
name: modelcatalog_configuration_author
3521+
schema: public
34433522
- name: setup_authors
34443523
using:
34453524
foreign_key_constraint_on:
@@ -4087,3 +4166,72 @@
40874166
- part_id
40884167
- part_type
40894168
filter: {}
4169+
- table:
4170+
name: modelcatalog_software_author
4171+
schema: public
4172+
object_relationships:
4173+
- name: software
4174+
using:
4175+
foreign_key_constraint_on: software_id
4176+
- name: person
4177+
using:
4178+
foreign_key_constraint_on: person_id
4179+
select_permissions:
4180+
- role: anonymous
4181+
permission:
4182+
columns:
4183+
- software_id
4184+
- person_id
4185+
filter: {}
4186+
- role: user
4187+
permission:
4188+
columns:
4189+
- software_id
4190+
- person_id
4191+
filter: {}
4192+
- table:
4193+
name: modelcatalog_version_author
4194+
schema: public
4195+
object_relationships:
4196+
- name: software_version
4197+
using:
4198+
foreign_key_constraint_on: software_version_id
4199+
- name: person
4200+
using:
4201+
foreign_key_constraint_on: person_id
4202+
select_permissions:
4203+
- role: anonymous
4204+
permission:
4205+
columns:
4206+
- software_version_id
4207+
- person_id
4208+
filter: {}
4209+
- role: user
4210+
permission:
4211+
columns:
4212+
- software_version_id
4213+
- person_id
4214+
filter: {}
4215+
- table:
4216+
name: modelcatalog_configuration_author
4217+
schema: public
4218+
object_relationships:
4219+
- name: configuration
4220+
using:
4221+
foreign_key_constraint_on: configuration_id
4222+
- name: person
4223+
using:
4224+
foreign_key_constraint_on: person_id
4225+
select_permissions:
4226+
- role: anonymous
4227+
permission:
4228+
columns:
4229+
- configuration_id
4230+
- person_id
4231+
filter: {}
4232+
- role: user
4233+
permission:
4234+
columns:
4235+
- configuration_id
4236+
- person_id
4237+
filter: {}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
-- Drop junction tables
2+
DROP TABLE IF EXISTS modelcatalog_configuration_author;
3+
DROP TABLE IF EXISTS modelcatalog_version_author;
4+
DROP TABLE IF EXISTS modelcatalog_software_author;
5+
6+
-- Drop indexes on author_id columns
7+
DROP INDEX IF EXISTS idx_mc_config_author;
8+
DROP INDEX IF EXISTS idx_mc_version_author;
9+
DROP INDEX IF EXISTS idx_mc_software_author;
10+
11+
-- Drop author_id columns
12+
ALTER TABLE modelcatalog_model_configuration DROP COLUMN IF EXISTS author_id;
13+
ALTER TABLE modelcatalog_software_version DROP COLUMN IF EXISTS author_id;
14+
ALTER TABLE modelcatalog_software DROP COLUMN IF EXISTS author_id;
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
BEGIN;
2+
3+
-- ============================================================================
4+
-- Add sd:author support to Software, SoftwareVersion, and ModelConfiguration
5+
-- ============================================================================
6+
-- sd:author is multi-valued across all 4 hierarchy levels. ModelConfigurationSetup
7+
-- already has author_id + setup_author junction. This migration adds the same
8+
-- pattern to the remaining 3 levels.
9+
10+
-- SECTION 1: Add author_id FK columns to 3 entity tables
11+
-- ============================================================================
12+
13+
ALTER TABLE modelcatalog_software
14+
ADD COLUMN author_id TEXT REFERENCES modelcatalog_person(id) ON DELETE SET NULL;
15+
16+
ALTER TABLE modelcatalog_software_version
17+
ADD COLUMN author_id TEXT REFERENCES modelcatalog_person(id) ON DELETE SET NULL;
18+
19+
ALTER TABLE modelcatalog_model_configuration
20+
ADD COLUMN author_id TEXT REFERENCES modelcatalog_person(id) ON DELETE SET NULL;
21+
22+
-- SECTION 2: Junction tables for multi-valued authors
23+
-- ============================================================================
24+
25+
CREATE TABLE modelcatalog_software_author (
26+
software_id TEXT REFERENCES modelcatalog_software(id) ON DELETE CASCADE,
27+
person_id TEXT REFERENCES modelcatalog_person(id) ON DELETE CASCADE,
28+
PRIMARY KEY (software_id, person_id)
29+
);
30+
31+
CREATE TABLE modelcatalog_version_author (
32+
software_version_id TEXT REFERENCES modelcatalog_software_version(id) ON DELETE CASCADE,
33+
person_id TEXT REFERENCES modelcatalog_person(id) ON DELETE CASCADE,
34+
PRIMARY KEY (software_version_id, person_id)
35+
);
36+
37+
CREATE TABLE modelcatalog_configuration_author (
38+
configuration_id TEXT REFERENCES modelcatalog_model_configuration(id) ON DELETE CASCADE,
39+
person_id TEXT REFERENCES modelcatalog_person(id) ON DELETE CASCADE,
40+
PRIMARY KEY (configuration_id, person_id)
41+
);
42+
43+
-- SECTION 3: Indexes
44+
-- ============================================================================
45+
46+
CREATE INDEX idx_mc_software_author ON modelcatalog_software(author_id);
47+
CREATE INDEX idx_mc_version_author ON modelcatalog_software_version(author_id);
48+
CREATE INDEX idx_mc_config_author ON modelcatalog_model_configuration(author_id);
49+
50+
CREATE INDEX idx_mc_sw_auth_sw ON modelcatalog_software_author(software_id);
51+
CREATE INDEX idx_mc_sw_auth_person ON modelcatalog_software_author(person_id);
52+
CREATE INDEX idx_mc_ver_auth_ver ON modelcatalog_version_author(software_version_id);
53+
CREATE INDEX idx_mc_ver_auth_person ON modelcatalog_version_author(person_id);
54+
CREATE INDEX idx_mc_cfg_auth_cfg ON modelcatalog_configuration_author(configuration_id);
55+
CREATE INDEX idx_mc_cfg_auth_person ON modelcatalog_configuration_author(person_id);
56+
57+
COMMIT;

0 commit comments

Comments
 (0)