-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathupdate-colleges.ts
152 lines (120 loc) · 4.88 KB
/
update-colleges.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import 'dotenv/config'
import config from "./src/config";
import { createOrUpdateCollegeGroup, getCollegeGroupByExtRef } from "./src/qualtrics/college-group-service";
import { createCollege, getCollegeByExtRef } from "./src/qualtrics/college-service";
import { College } from "./src/types";
import axios from 'axios';
import { exit } from 'process';
import { getPostcodeData } from './src/postcodes-io';
const write = true;
const overwriteGroupEmails = false;
const resetGroupStatus = false;
const collegeGroupsUrl = config.dataSourceUrlCollegeGroups;
const collegesUrl = config.dataSourceUrlColleges;
type SourceCollegeCampus = {
campusName: string,
address: string,
postcode: string,
};
type SourceCollege = {
id: string,
collegeName: string,
URN?: string,
website?: string,
parentId?: string,
campuses: SourceCollegeCampus[],
};
type SourceCollegeGroup = {
groupId: string,
name: string,
URN?: string,
website?: string,
}
// const createEmailAddress = (collegeGroup: CollegeGroup) => `${collegeGroup.extRef}@${config.mailinatorDomain}`;
const createEmailAddress = (collegeGroup: SourceCollegeGroup) => `college.match+${collegeGroup.name.toLowerCase().trim().substring(0, 25).trim().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '')}@education.gov.uk`;
const getSourceCollegeGroupId = (college: SourceCollege, collegeGroups: SourceCollegeGroup[]) : string => {
if(college.parentId) {
return getCollegeGroupReference(college.parentId);
}
const newSourceCollegeGroup = {
groupId: `college-${college.id}`,
name: college.collegeName,
}
collegeGroups.push(newSourceCollegeGroup);
return getCollegeGroupReference(newSourceCollegeGroup.groupId);
}
const getCollegeReference = (collegeId: string) => `tife-college-${collegeId}`;
const getCollegeGroupReference = (collegeGroupId: string) => `tife-college-group-${collegeGroupId}`;
(async () => {
const colleges: SourceCollege[] = [...(await axios.get(collegesUrl)).data];
const collegeGroups: SourceCollegeGroup[] = [...(await axios.get(collegeGroupsUrl)).data];
const qualtricsColleges : College[] = [];
for(const college of colleges) {
const extRef = getCollegeReference(college.id);
let qualtricsCollege = await getCollegeByExtRef(extRef);
const name = college.collegeName;
const groupId = getSourceCollegeGroupId(college, collegeGroups);
if(!qualtricsCollege) {
qualtricsCollege = {
extRef: extRef,
firstName: name,
embeddedData: {
groupId
}
};
} else {
qualtricsCollege.firstName = name;
}
if(college.campuses.length != 1) {
console.error("College with other than 1 campus. This is not currently supported.", college);
exit(1);
}
try {
const postcodeResponse = await getPostcodeData(college.campuses[0].postcode);
qualtricsCollege.embeddedData.lat = postcodeResponse.latitude;
qualtricsCollege.embeddedData.long = postcodeResponse.longitude;
} catch(e) {
console.error("Invalid college postcode", college);
}
qualtricsColleges.push(qualtricsCollege);
}
for(const collegeGroup of collegeGroups) {
const extRef = getCollegeGroupReference(collegeGroup.groupId);
let qualtricsCollegeGroup = await getCollegeGroupByExtRef(extRef);
const name = collegeGroup.name;
const email = createEmailAddress(collegeGroup);
if(!qualtricsCollegeGroup) {
qualtricsCollegeGroup = {
extRef: extRef,
email,
embeddedData: {
groupName: name,
groupStatus: 'Unregistered',
}
}
} else {
qualtricsCollegeGroup.embeddedData.groupName = name;
if(overwriteGroupEmails) {
qualtricsCollegeGroup.email = email;
}
if(resetGroupStatus) {
qualtricsCollegeGroup.embeddedData.groupStatus = 'Unregistered';
qualtricsCollegeGroup.embeddedData.invitationAttempt = null;
}
}
if(write) {
console.log(`Writing college group ${qualtricsCollegeGroup.extRef} - ${qualtricsCollegeGroup.embeddedData.groupName}`);
createOrUpdateCollegeGroup(qualtricsCollegeGroup);
} else {
console.log("Creating/updating college group", qualtricsCollegeGroup);
}
}
for(const qualtricsCollege of qualtricsColleges) {
if(write) {
console.log(`Writing college ${qualtricsCollege.extRef} - ${qualtricsCollege.firstName}`);
createCollege(qualtricsCollege);
} else {
console.log("Creating/updating college", qualtricsCollege);
}
}
})().then()