@@ -3,6 +3,8 @@ import * as O from 'fp-ts/Option';
33
44import { Logger } from 'pino' ;
55import { GoogleSpreadsheetDataForSheet } from '../init-dependencies/google/pull_sheet_data' ;
6+ import { array } from 'fp-ts' ;
7+ import { pipe } from 'fp-ts/lib/function' ;
68
79const EMAIL_COLUMN_NAMES = [ 'email address' , 'email' ] ;
810
@@ -37,22 +39,29 @@ export const extractGoogleSheetMetadata =
3739 firstRowData : GoogleSpreadsheetDataForSheet
3840 ) : O . Option < GoogleSheetMetadata > => {
3941 logger = logger . child ( { sheetName : initialMeta . properties . title } ) ;
40- const columnNames = firstRowData . sheets [ 0 ] . data [ 0 ] . rowData [ 0 ] . values . map (
41- col => col . formattedValue
42+ const columnNames : O . Option < string [ ] > = pipe (
43+ firstRowData . sheets [ 0 ] . data ,
44+ array . lookup ( 0 ) ,
45+ O . flatMap ( sheetData => O . fromNullable ( sheetData . rowData ) ) ,
46+ O . flatMap ( array . lookup ( 0 ) ) ,
47+ O . flatMap ( firstRowData =>
48+ O . some ( firstRowData . values . map ( col => col . formattedValue ) )
49+ )
4250 ) ;
51+ if ( O . isNone ( columnNames ) ) {
52+ logger . error ( 'Found no column names for sheet, skipping sheet' ) ;
53+ return O . none ;
54+ }
4355 logger . trace ( 'Found column names for sheet: %o' , columnNames ) ;
4456 const timestamp = RA . findIndex < string > (
4557 val => val . toLowerCase ( ) === 'timestamp'
46- ) ( columnNames ) ;
58+ ) ( columnNames . value ) ;
4759 if ( O . isNone ( timestamp ) ) {
48- logger . warn (
49- 'Failed to find timestamp column, skipping sheet: %s' ,
50- initialMeta . properties . title
51- ) ;
60+ logger . warn ( 'Failed to find timestamp column, skipping sheet' ) ;
5261 return O . none ;
5362 }
5463 const score = RA . findIndex < string > ( val => val . toLowerCase ( ) === 'score' ) (
55- columnNames
64+ columnNames . value
5665 ) ;
5766 if ( O . isNone ( score ) ) {
5867 logger . warn (
@@ -63,10 +72,10 @@ export const extractGoogleSheetMetadata =
6372 }
6473 const memberNumber = RA . findIndex < string > (
6574 val => val . toLowerCase ( ) === 'membership number'
66- ) ( columnNames ) ;
75+ ) ( columnNames . value ) ;
6776 const email = RA . findIndex < string > ( val =>
6877 EMAIL_COLUMN_NAMES . includes ( val . toLowerCase ( ) )
69- ) ( columnNames ) ;
78+ ) ( columnNames . value ) ;
7079
7180 return O . some ( {
7281 name : initialMeta . properties . title ,
0 commit comments