Skip to content

Commit 51485b7

Browse files
author
Andre Turner
committed
revised language engagement seeding for new engagement workflow events
1 parent 6d3473f commit 51485b7

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed
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 uniqueLanguage = 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 uniqueTranslationProject = 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: uniqueTranslationProject,
87+
projectContext: uniqueTranslationProject.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: uniqueLanguage,
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);

0 commit comments

Comments
 (0)