Skip to content

Commit cceaf88

Browse files
Andre TurnerCarsonF
authored andcommitted
Revised engagement seeding for new engagement workflow events
1 parent d5f1ff8 commit cceaf88

File tree

4 files changed

+254
-117
lines changed

4 files changed

+254
-117
lines changed

dbschema/seeds/011.language-engagements.edgeql

Lines changed: 0 additions & 56 deletions
This file was deleted.
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
import type { SeedFn } from '~/core/edgedb/seeds.run';
2+
import { EngagementStatus } from '../../src/components/engagement/dto';
3+
4+
const engagementsInput: Input[] = [
5+
{
6+
project: 'Misty Mountains',
7+
language: 'English',
8+
status: 'InDevelopment',
9+
startDateOverride: '2020-04-01',
10+
endDateOverride: '2020-06-30',
11+
},
12+
{
13+
project: 'Arnor Lake',
14+
language: 'Quenya',
15+
status: 'FinalizingCompletion',
16+
startDateOverride: '2016-04-01',
17+
endDateOverride: '2017-06-30',
18+
},
19+
{
20+
project: 'Lothlorien',
21+
language: 'Sindarin',
22+
status: 'Active',
23+
},
24+
{
25+
project: 'Emyn Muil',
26+
language: 'Khuzdul',
27+
status: 'Active',
28+
},
29+
{
30+
project: 'South Downs',
31+
language: 'Westron',
32+
status: 'FinalizingCompletion',
33+
paratextRegistryId: '1234567890',
34+
},
35+
];
36+
37+
interface Input {
38+
project: string;
39+
language: string;
40+
status: string;
41+
startDateOverride?: string;
42+
endDateOverride?: string;
43+
paratextRegistryId?: string;
44+
}
45+
46+
export default (async function ({ e, db, print }) {
47+
const existingLanguageEngagements = await e
48+
.select(e.LanguageEngagement, () => ({
49+
project: {
50+
name: true,
51+
},
52+
language: {
53+
name: true,
54+
},
55+
}))
56+
.run(db);
57+
const newEngagements = engagementsInput.filter(
58+
(engagementSeed) =>
59+
!existingLanguageEngagements.some(
60+
(engagementData) =>
61+
engagementData.project.name === engagementSeed.project &&
62+
engagementData.language.name === engagementSeed.language,
63+
),
64+
);
65+
66+
if (newEngagements.length === 0) {
67+
return;
68+
}
69+
70+
for (const { language, project, status, ...engagement } of newEngagements) {
71+
const languageQ = e.assert_exists(
72+
e.select(e.Language, (item) => ({
73+
filter_single: e.op(item.displayName, '=', language),
74+
...e.Language['*'],
75+
})),
76+
);
77+
78+
const translationProjectQ = e.assert_exists(
79+
e.select(e.TranslationProject, (item) => ({
80+
filter_single: e.op(item.name, '=', project),
81+
...e.TranslationProject['*'],
82+
})),
83+
);
84+
85+
const insertQ = e.insert(e.LanguageEngagement, {
86+
project: translationProjectQ,
87+
projectContext: translationProjectQ.projectContext,
88+
startDateOverride: engagement.startDateOverride
89+
? e.cal.local_date(engagement.startDateOverride)
90+
: undefined,
91+
endDateOverride: engagement.endDateOverride
92+
? e.cal.local_date(engagement.endDateOverride)
93+
: undefined,
94+
language: languageQ,
95+
paratextRegistryId: engagement.paratextRegistryId,
96+
});
97+
const query = e.select(insertQ, () => ({ id: true, projectContext: true }));
98+
const inserted = await query.run(db);
99+
100+
const engagementRef = e.cast(e.Engagement, e.uuid(inserted.id));
101+
102+
if (status !== 'InDevelopment') {
103+
await e
104+
.insert(e.Engagement.WorkflowEvent, {
105+
engagement: engagementRef,
106+
projectContext: engagementRef.projectContext,
107+
to: status as EngagementStatus,
108+
})
109+
.run(db);
110+
}
111+
}
112+
print({
113+
'Added LanguageEngagments': newEngagements.map(
114+
(engagement) => engagement.project + ' - ' + engagement.language,
115+
),
116+
});
117+
} satisfies SeedFn);

dbschema/seeds/012.internship-engagements.edgeql

Lines changed: 0 additions & 61 deletions
This file was deleted.
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
import type { SeedFn } from '~/core/edgedb/seeds.run';
2+
import { EngagementStatus } from '../../src/components/engagement/dto';
3+
4+
const engagementsInput: Input[] = [
5+
{
6+
project: 'Arwen Evenstar Intern',
7+
intern: 'Samwise',
8+
status: 'Completed',
9+
mentor: 'Gandalf',
10+
countryOfOrigin: 'New Zealand',
11+
startDateOverride: '2019-04-01',
12+
endDateOverride: '2020-06-30',
13+
},
14+
{
15+
project: 'Glorfindel - Exegetical Facilitator',
16+
intern: 'Frodo',
17+
status: 'DiscussingChangeToPlan',
18+
mentor: 'Bilbo',
19+
countryOfOrigin: 'New Zealand',
20+
startDateOverride: '2023-01-01',
21+
endDateOverride: '2024-07-22',
22+
},
23+
{
24+
project: 'Cohort of the Ents',
25+
intern: 'Meriadoc',
26+
status: 'Active',
27+
},
28+
{
29+
project: 'Barliman Butterbur Intern',
30+
intern: 'Peregrin',
31+
status: 'Suspended',
32+
},
33+
{
34+
project: 'Eomer of Rohan Intern',
35+
intern: 'Aragorn',
36+
status: 'FinalizingCompletion',
37+
countryOfOrigin: 'New Zealand',
38+
},
39+
];
40+
41+
interface Input {
42+
project: string;
43+
intern: string;
44+
status: string;
45+
mentor?: string;
46+
countryOfOrigin?: string;
47+
startDateOverride?: string;
48+
endDateOverride?: string;
49+
}
50+
51+
export default (async function ({ e, db, print }) {
52+
const existingInternshipEngagements = await e
53+
.select(e.InternshipEngagement, () => ({
54+
project: {
55+
name: true,
56+
},
57+
intern: {
58+
realFirstName: true,
59+
},
60+
}))
61+
.run(db);
62+
const newEngagements = engagementsInput.filter(
63+
(engagementSeed) =>
64+
!existingInternshipEngagements.some(
65+
(engagementData) =>
66+
engagementData.project.name === engagementSeed.project &&
67+
engagementData.intern.realFirstName === engagementSeed.intern,
68+
),
69+
);
70+
71+
if (newEngagements.length === 0) {
72+
return;
73+
}
74+
75+
for (const { intern, project, status, ...engagement } of newEngagements) {
76+
const internQ = e.assert_exists(
77+
e.select(e.User, (item) => ({
78+
filter_single: e.op(item.realFirstName, '=', intern),
79+
...e.User['*'],
80+
})),
81+
);
82+
83+
const intershipProjectQ = e.assert_exists(
84+
e.select(e.InternshipProject, (item) => ({
85+
filter_single: e.op(item.name, '=', project),
86+
...e.InternshipProject['*'],
87+
})),
88+
);
89+
90+
const insertQ = e.insert(e.InternshipEngagement, {
91+
project: intershipProjectQ,
92+
projectContext: intershipProjectQ.projectContext,
93+
intern: internQ,
94+
startDateOverride: engagement.startDateOverride
95+
? e.cal.local_date(engagement.startDateOverride)
96+
: undefined,
97+
endDateOverride: engagement.endDateOverride
98+
? e.cal.local_date(engagement.endDateOverride)
99+
: undefined,
100+
mentor: engagement.mentor
101+
? e.assert_exists(
102+
e.select(e.User, (user) => ({
103+
filter_single: e.op(user.realFirstName, '=', engagement.mentor!),
104+
...e.User['*'],
105+
})),
106+
)
107+
: undefined,
108+
countryOfOrigin: engagement.countryOfOrigin
109+
? e.assert_exists(
110+
e.select(e.Location, () => ({
111+
filter_single: { name: engagement.countryOfOrigin! },
112+
...e.Location['*'],
113+
})),
114+
)
115+
: undefined,
116+
});
117+
const query = e.select(insertQ, () => ({ id: true, projectContext: true }));
118+
const inserted = await query.run(db);
119+
120+
const engagementRef = e.cast(e.Engagement, e.uuid(inserted.id));
121+
122+
if (status !== 'InDevelopment') {
123+
await e
124+
.insert(e.Engagement.WorkflowEvent, {
125+
engagement: engagementRef,
126+
projectContext: engagementRef.projectContext,
127+
to: status as EngagementStatus,
128+
})
129+
.run(db);
130+
}
131+
}
132+
print({
133+
'Added InternshipEngagments': newEngagements.map(
134+
(engagement) => engagement.project + ' - ' + engagement.intern,
135+
),
136+
});
137+
} satisfies SeedFn);

0 commit comments

Comments
 (0)