Skip to content

Commit d0f210d

Browse files
yoganandanessCopilotCopilotCopilotjekabs-karklins
authored
chore: workflow generalization of proposal and experiment. added status action and event log for experiment.
Co-authored-by: Copilot <copilot@github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Jekabs Karklins <58165815+jekabs-karklins@users.noreply.github.com>
1 parent 479d8f4 commit d0f210d

71 files changed

Lines changed: 3967 additions & 1174 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
DO
2+
$$
3+
DECLARE
4+
exp_safety_review_template_id_var int;
5+
BEGIN
6+
IF register_patch(
7+
'ActivateExperimentSafetyReviewTemplate.sql',
8+
'Yoganandan Pandiyan',
9+
'Mark an experiment safety review template as active when none is active.',
10+
'2026-06-08'
11+
) THEN
12+
13+
SELECT template_id
14+
INTO exp_safety_review_template_id_var
15+
FROM templates
16+
WHERE group_id = 'EXPERIMENT_SAFETY_REVIEW_TEMPLATE'
17+
AND NOT EXISTS (
18+
SELECT 1
19+
FROM active_templates
20+
WHERE group_id = 'EXPERIMENT_SAFETY_REVIEW_TEMPLATE'
21+
)
22+
ORDER BY template_id
23+
LIMIT 1;
24+
25+
IF exp_safety_review_template_id_var IS NOT NULL THEN
26+
INSERT INTO active_templates(group_id, template_id)
27+
VALUES (
28+
'EXPERIMENT_SAFETY_REVIEW_TEMPLATE',
29+
exp_safety_review_template_id_var
30+
)
31+
ON CONFLICT (group_id) DO NOTHING;
32+
END IF;
33+
34+
END IF;
35+
END;
36+
$$
37+
LANGUAGE plpgsql;

apps/backend/db_patches/db_seeds/0001_ProposalForScheduling.sql

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ BEGIN
8080
, comment_for_management
8181
, comment_for_user
8282
, notified
83-
, management_decision_submitted
83+
, management_decision_submitted
8484
, submitted
8585
)
8686
VALUES
@@ -98,11 +98,11 @@ BEGIN
9898
, NULL
9999
, NULL
100100
, true
101-
, true
102-
, true
101+
, true
102+
, true
103103
);
104104

105-
INSERT INTO instrument_has_proposals(instrument_id, proposal_pk) VALUES (1, 1);
105+
INSERT INTO instrument_has_proposals(instrument_id, proposal_pk, management_time_allocation) VALUES (1, 1, 100);
106106

107107
INSERT INTO technical_review(proposal_pk, comment, time_allocation, status, public_comment, reviewer_id, technical_review_assignee_id, instrument_id, questionary_id)
108108
VALUES (1, '', 2, 0, '', 0, 0, 1, technical_review_questionary_id_var);
@@ -122,7 +122,7 @@ BEGIN
122122
, comment_for_management
123123
, comment_for_user
124124
, notified
125-
, management_decision_submitted
125+
, management_decision_submitted
126126
, submitted
127127
)
128128
VALUES
@@ -140,11 +140,11 @@ BEGIN
140140
, NULL
141141
, NULL
142142
, true
143-
, true
144-
, true
143+
, true
144+
, true
145145
);
146146

147-
INSERT INTO instrument_has_proposals(instrument_id, proposal_pk) VALUES (2, 2);
147+
INSERT INTO instrument_has_proposals(instrument_id, proposal_pk, management_time_allocation) VALUES (2, 2, 100);
148148

149149
END;
150150
$DO$

apps/backend/db_patches/db_seeds/0004_Experiments.sql

Lines changed: 283 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ DECLARE
77
instrument_id_1_var int;
88
instrument_id_2_var int;
99
experiment_workflow_id_var int;
10+
awaiting_esf_workflow_status_id_var int;
11+
esf_is_review_workflow_status_id_var int;
12+
esf_esr_review_workflow_status_id_var int;
13+
esf_approved_workflow_status_id_var int;
14+
esf_rejected_workflow_status_id_var int;
15+
workflow_status_connection_id_var int;
16+
email_action_id_var int;
17+
rabbitmq_action_id_var int;
1018
BEGIN
1119
-- Get instrument ids
1220
SELECT instrument_id INTO instrument_id_1_var FROM instruments WHERE name='Instrument 1' limit 1;
@@ -18,8 +26,277 @@ DECLARE
1826

1927
UPDATE call SET experiment_workflow_id = experiment_workflow_id_var;
2028

21-
INSERT INTO workflow_has_statuses(workflow_id, status_id)
22-
VALUES (experiment_workflow_id_var, (SELECT status_id FROM statuses WHERE status_id='AWAITING_ESF'));
29+
SELECT workflow_status_action_id
30+
INTO email_action_id_var
31+
FROM workflow_status_actions
32+
WHERE type = 'EMAIL'
33+
LIMIT 1;
34+
35+
SELECT workflow_status_action_id
36+
INTO rabbitmq_action_id_var
37+
FROM workflow_status_actions
38+
WHERE type = 'RABBITMQ'
39+
LIMIT 1;
40+
41+
INSERT INTO workflow_has_statuses(workflow_id, status_id, pos_x, pos_y)
42+
VALUES (experiment_workflow_id_var, 'AWAITING_ESF', -191, -117)
43+
RETURNING workflow_status_id INTO awaiting_esf_workflow_status_id_var;
44+
45+
INSERT INTO workflow_has_statuses(workflow_id, status_id, pos_x, pos_y)
46+
VALUES (experiment_workflow_id_var, 'ESF_IS_REVIEW', -190, 5)
47+
RETURNING workflow_status_id INTO esf_is_review_workflow_status_id_var;
48+
49+
INSERT INTO workflow_has_statuses(workflow_id, status_id, pos_x, pos_y)
50+
VALUES (experiment_workflow_id_var, 'ESF_ESR_REVIEW', -189, 189)
51+
RETURNING workflow_status_id INTO esf_esr_review_workflow_status_id_var;
52+
53+
INSERT INTO workflow_has_statuses(workflow_id, status_id, pos_x, pos_y)
54+
VALUES (experiment_workflow_id_var, 'ESF_APPROVED', 303, 135)
55+
RETURNING workflow_status_id INTO esf_approved_workflow_status_id_var;
56+
57+
INSERT INTO workflow_has_statuses(workflow_id, status_id, pos_x, pos_y)
58+
VALUES (experiment_workflow_id_var, 'ESF_REJECTED', -187, 361)
59+
RETURNING workflow_status_id INTO esf_rejected_workflow_status_id_var;
60+
61+
INSERT INTO workflow_status_connections(
62+
workflow_id,
63+
prev_workflow_status_id,
64+
next_workflow_status_id,
65+
source_handle,
66+
target_handle
67+
)
68+
VALUES (
69+
experiment_workflow_id_var,
70+
awaiting_esf_workflow_status_id_var,
71+
esf_is_review_workflow_status_id_var,
72+
'bottom-source',
73+
'top-target'
74+
)
75+
RETURNING workflow_status_connection_id INTO workflow_status_connection_id_var;
76+
77+
INSERT INTO workflow_status_connection_has_events(
78+
workflow_status_connection_id,
79+
status_changing_event
80+
)
81+
VALUES (workflow_status_connection_id_var, 'EXPERIMENT_ESF_SUBMITTED');
82+
83+
INSERT INTO workflow_status_connection_has_actions(
84+
workflow_status_connection_id,
85+
workflow_status_action_id,
86+
workflow_id,
87+
config
88+
)
89+
VALUES (
90+
workflow_status_connection_id_var,
91+
email_action_id_var,
92+
experiment_workflow_id_var,
93+
'{"recipientsWithEmailTemplate":[{"recipient":{"name":"INSTRUMENT_SCIENTISTS","description":"Instrument scientists including the manager on the instrument related to the proposal"},"emailTemplate":{"id":"instrument-scientist-esf-review","name":"Instrument Scientist ESF Review"}}]}'
94+
);
95+
96+
INSERT INTO workflow_status_connection_has_actions(
97+
workflow_status_connection_id,
98+
workflow_status_action_id,
99+
workflow_id,
100+
config
101+
)
102+
VALUES (
103+
workflow_status_connection_id_var,
104+
rabbitmq_action_id_var,
105+
experiment_workflow_id_var,
106+
'{"exchanges":["user_office_backend.fanout"]}'
107+
);
108+
109+
INSERT INTO workflow_status_connections(
110+
workflow_id,
111+
prev_workflow_status_id,
112+
next_workflow_status_id,
113+
source_handle,
114+
target_handle
115+
)
116+
VALUES (
117+
experiment_workflow_id_var,
118+
esf_is_review_workflow_status_id_var,
119+
esf_approved_workflow_status_id_var,
120+
'right-source',
121+
'top-target'
122+
)
123+
RETURNING workflow_status_connection_id INTO workflow_status_connection_id_var;
124+
125+
INSERT INTO workflow_status_connection_has_events(
126+
workflow_status_connection_id,
127+
status_changing_event
128+
)
129+
VALUES (workflow_status_connection_id_var, 'EXPERIMENT_ESF_APPROVED_BY_IS');
130+
131+
INSERT INTO workflow_status_connection_has_actions(
132+
workflow_status_connection_id,
133+
workflow_status_action_id,
134+
workflow_id,
135+
config
136+
)
137+
VALUES (
138+
workflow_status_connection_id_var,
139+
email_action_id_var,
140+
experiment_workflow_id_var,
141+
'{"recipientsWithEmailTemplate":[{"recipient":{"name":"PI","description":"Principal investigator on the proposal"},"emailTemplate":{"id":"esf-approved","name":"ESF Approved"}}]}'
142+
);
143+
144+
INSERT INTO workflow_status_connection_has_actions(
145+
workflow_status_connection_id,
146+
workflow_status_action_id,
147+
workflow_id,
148+
config
149+
)
150+
VALUES (
151+
workflow_status_connection_id_var,
152+
rabbitmq_action_id_var,
153+
experiment_workflow_id_var,
154+
'{"exchanges":["user_office_backend.fanout"]}'
155+
);
156+
157+
INSERT INTO workflow_status_connections(
158+
workflow_id,
159+
prev_workflow_status_id,
160+
next_workflow_status_id,
161+
source_handle,
162+
target_handle
163+
)
164+
VALUES (
165+
experiment_workflow_id_var,
166+
esf_esr_review_workflow_status_id_var,
167+
esf_rejected_workflow_status_id_var,
168+
'bottom-source',
169+
'top-target'
170+
)
171+
RETURNING workflow_status_connection_id INTO workflow_status_connection_id_var;
172+
173+
INSERT INTO workflow_status_connection_has_events(
174+
workflow_status_connection_id,
175+
status_changing_event
176+
)
177+
VALUES (workflow_status_connection_id_var, 'EXPERIMENT_ESF_REJECTED_BY_ESR');
178+
179+
INSERT INTO workflow_status_connection_has_actions(
180+
workflow_status_connection_id,
181+
workflow_status_action_id,
182+
workflow_id,
183+
config
184+
)
185+
VALUES (
186+
workflow_status_connection_id_var,
187+
email_action_id_var,
188+
experiment_workflow_id_var,
189+
'{"recipientsWithEmailTemplate":[{"recipient":{"name":"PI","description":"Principal investigator on the proposal"},"emailTemplate":{"id":"esf-rejected","name":"ESF Rejected"}}]}'
190+
);
191+
192+
INSERT INTO workflow_status_connection_has_actions(
193+
workflow_status_connection_id,
194+
workflow_status_action_id,
195+
workflow_id,
196+
config
197+
)
198+
VALUES (
199+
workflow_status_connection_id_var,
200+
rabbitmq_action_id_var,
201+
experiment_workflow_id_var,
202+
'{"exchanges":["user_office_backend.fanout"]}'
203+
);
204+
205+
INSERT INTO workflow_status_connections(
206+
workflow_id,
207+
prev_workflow_status_id,
208+
next_workflow_status_id,
209+
source_handle,
210+
target_handle
211+
)
212+
VALUES (
213+
experiment_workflow_id_var,
214+
esf_is_review_workflow_status_id_var,
215+
esf_esr_review_workflow_status_id_var,
216+
'bottom-source',
217+
'top-target'
218+
)
219+
RETURNING workflow_status_connection_id INTO workflow_status_connection_id_var;
220+
221+
INSERT INTO workflow_status_connection_has_events(
222+
workflow_status_connection_id,
223+
status_changing_event
224+
)
225+
VALUES (workflow_status_connection_id_var, 'EXPERIMENT_ESF_REJECTED_BY_IS');
226+
227+
INSERT INTO workflow_status_connection_has_actions(
228+
workflow_status_connection_id,
229+
workflow_status_action_id,
230+
workflow_id,
231+
config
232+
)
233+
VALUES (
234+
workflow_status_connection_id_var,
235+
email_action_id_var,
236+
experiment_workflow_id_var,
237+
'{"recipientsWithEmailTemplate":[{"recipient":{"name":"EXPERIMENT_SAFETY_REVIEWERS","description":"The Experiment Safety email address"},"emailTemplate":{"id":"esr-esf-review","name":"ESR ESF Review"}}]}'
238+
);
239+
240+
INSERT INTO workflow_status_connection_has_actions(
241+
workflow_status_connection_id,
242+
workflow_status_action_id,
243+
workflow_id,
244+
config
245+
)
246+
VALUES (
247+
workflow_status_connection_id_var,
248+
rabbitmq_action_id_var,
249+
experiment_workflow_id_var,
250+
'{"exchanges":["user_office_backend.fanout"]}'
251+
);
252+
253+
INSERT INTO workflow_status_connections(
254+
workflow_id,
255+
prev_workflow_status_id,
256+
next_workflow_status_id,
257+
source_handle,
258+
target_handle
259+
)
260+
VALUES (
261+
experiment_workflow_id_var,
262+
esf_esr_review_workflow_status_id_var,
263+
esf_is_review_workflow_status_id_var,
264+
'right-source',
265+
'right-target'
266+
)
267+
RETURNING workflow_status_connection_id INTO workflow_status_connection_id_var;
268+
269+
INSERT INTO workflow_status_connection_has_events(
270+
workflow_status_connection_id,
271+
status_changing_event
272+
)
273+
VALUES (workflow_status_connection_id_var, 'EXPERIMENT_ESF_APPROVED_BY_ESR');
274+
275+
INSERT INTO workflow_status_connection_has_actions(
276+
workflow_status_connection_id,
277+
workflow_status_action_id,
278+
workflow_id,
279+
config
280+
)
281+
VALUES (
282+
workflow_status_connection_id_var,
283+
email_action_id_var,
284+
experiment_workflow_id_var,
285+
'{"recipientsWithEmailTemplate":[{"recipient":{"name":"INSTRUMENT_SCIENTISTS","description":"Instrument scientists including the manager on the instrument related to the proposal"},"combineEmails":null,"emailTemplate":{"id":"instrument-scientist-esf-review","name":"Instrument Scientist ESF Review"},"otherRecipientEmails":null}]}'
286+
);
287+
288+
INSERT INTO workflow_status_connection_has_actions(
289+
workflow_status_connection_id,
290+
workflow_status_action_id,
291+
workflow_id,
292+
config
293+
)
294+
VALUES (
295+
workflow_status_connection_id_var,
296+
rabbitmq_action_id_var,
297+
experiment_workflow_id_var,
298+
'{"exchanges":["user_office_backend.fanout"]}'
299+
);
23300

24301
INSERT INTO experiments(
25302
experiment_pk, experiment_id, scheduled_event_id, starts_at, ends_at, proposal_pk, status, local_contact_id, instrument_id)
@@ -47,6 +324,10 @@ DECLARE
47324
INTO exp_safety_review_template_id_var
48325
from templates
49326
where group_id = 'EXPERIMENT_SAFETY_REVIEW_TEMPLATE' limit 1;
327+
328+
INSERT INTO active_templates(group_id, template_id)
329+
VALUES ('EXPERIMENT_SAFETY_REVIEW_TEMPLATE', exp_safety_review_template_id_var)
330+
ON CONFLICT (group_id) DO NOTHING;
50331

51332
select topics.topic_id
52333
INTO exp_safety_review_template_topic_id_var

0 commit comments

Comments
 (0)