@@ -30,6 +30,13 @@ const validateBoolean = (value) => {
3030 return null
3131}
3232
33+ const validateStringArray = ( value ) => {
34+ if ( Array . isArray ( value ) ) {
35+ return value . filter ( s => typeof s === 'string' && s ) ;
36+ }
37+ return null
38+ }
39+
3340const getGuardianEmails = ( user ) => {
3441 try {
3542 return [ ...new Set ( [ user ?. guardianEmail , ...( user ?. emails ?. filter ( e => e ?. type === 'guardian' ) . map ( e => e ?. email ) || [ ] ) ] ) ] . filter ( s => typeof s === 'string' && s )
@@ -39,6 +46,15 @@ const getGuardianEmails = (user) => {
3946 }
4047}
4148
49+ const getAdditionalStudentEmails = ( user ) => {
50+ try {
51+ return [ ...new Set ( [ ...( user ?. emails ?. filter ( e => e ?. type === 'student' ) . map ( e => e ?. email ) || [ ] ) ] ) ] . filter ( s => typeof s === 'string' && s )
52+ } catch ( error ) {
53+ console . error ( 'Error getting student emails:' , error ) ;
54+ return [ ] ;
55+ }
56+ }
57+
4258// This data gets passed through Graphql
4359// As firebase data is set client side, it can't always be trusted
4460// If a value is wrong type, it will be set to null
@@ -51,15 +67,15 @@ const getTypeSafeUser = (user) => {
5167 uid : validateString ( user . uid ) ,
5268 first : validateString ( user . first ) ,
5369 last : validateString ( user . last ) ,
54- teacherCode : validateString ( user . teacherCode ) ,
70+ teacherCode : null , // deprecated - use teacherCodes array instead
5571 code : validateString ( user . code ) ,
5672 level : validateString ( user . level ) ,
5773 birthMonth : validateNumber ( user . birthMonth ) ,
5874 birthYear : validateNumber ( user . birthYear ) ,
5975 schoolName : validateString ( user . schoolName ) ,
6076 phoneNumber : validateString ( user . phoneNumber ) ,
6177 postCode : validateString ( user . postCode ) ,
62- guardianEmail : validateString ( user . guardianEmail ) ,
78+ guardianEmail : null , // deprecated - use guardianEmails array instead
6379 guardianEmails : getGuardianEmails ( user ) ,
6480 privacy : user . privacy ,
6581 privacyDebug : user . privacyDebug ,
@@ -75,6 +91,16 @@ const getTypeSafeUser = (user) => {
7591 acceptedEuclidTerms : validateBoolean ( user . acceptedEuclidTerms ) ,
7692 euclidEnrolYearGroup : validateString ( user . euclidEnrolYearGroup ) ,
7793 euclidEnrolTimestamp : validateNumber ( user . euclidEnrolTimestamp ) ,
94+
95+ teacherCodes : validateStringArray ( user . teacherCode ) ,
96+ additionalStudentEmails : getAdditionalStudentEmails ( user ) ,
97+ ethnicity : validateString ( user . ethnicity ) ,
98+ country : validateString ( user . country ) ,
99+ ukCountry : validateString ( user . ukCountry ) ,
100+ homeEducated : validateBoolean ( user . homeEducated ) ,
101+ homeEducatedConfirm : validateBoolean ( user . homeEducatedConfirm ) ,
102+ schoolEmail : validateString ( user . schoolEmail ) ,
103+
78104 privacyDebug : {
79105 firstSeen : validateNumber ( user [ firstSeenKey ] ) ,
80106 latestTouch : validateNumber ( user [ latestTouchKey ] ) ,
0 commit comments