@@ -3,8 +3,13 @@ import trackData from '@data/db_validation_data.json' assert { type: 'json' };
33import { Readable } from 'stream' ;
44import ParsedRecord from '@typeDefs/parsedRecord' ;
55
6+ const filteredTracks = [
7+ 'Best Hack for Social Good' ,
8+ "Hacker's Choice Award" ,
9+ 'NA' ,
10+ ] ;
611const validTracks : string [ ] = trackData . tracks . filter (
7- ( t ) => t !== 'Best Hack for Social Good'
12+ ( t ) => ! filteredTracks . includes ( t )
813) ;
914
1015function sortTracks (
@@ -13,30 +18,38 @@ function sortTracks(
1318 track3 : string ,
1419 chosentracks : string
1520) : string [ ] {
16- let tracksInOrder : string [ ] = [ track1 , track2 , track3 ] ;
21+ const initialTracks = [ track1 , track2 , track3 ]
22+ . map ( ( t ) => t . trim ( ) )
23+ . filter (
24+ ( t ) =>
25+ validTracks . includes ( t ) &&
26+ t !== 'Best Hack for Social Good' &&
27+ t !== "Hacker's Choice Award"
28+ ) ; // explicitly filter it out again
29+
30+ const existingTrackSet = new Set ( initialTracks ) ;
1731
1832 if ( chosentracks . length > 1 ) {
19- const otherTracks = chosentracks
33+ chosentracks
2034 . split ( ',' )
21- . map ( ( track : string ) => track . trim ( ) )
22- . filter (
23- ( track : string ) =>
24- validTracks . includes ( track ) && ! tracksInOrder . includes ( track )
25- ) ;
26-
27- const uniqueTracks = [ ...new Set ( otherTracks ) ] ;
28-
29- tracksInOrder . push ( ...uniqueTracks ) ;
35+ . map ( ( t ) => t . trim ( ) )
36+ . forEach ( ( track ) => {
37+ if (
38+ validTracks . includes ( track ) &&
39+ ! existingTrackSet . has ( track ) &&
40+ track !== 'Best Hack for Social Good' // explicitly filter it out
41+ ) {
42+ initialTracks . push ( track ) ;
43+ existingTrackSet . add ( track ) ;
44+ }
45+ } ) ;
3046 }
3147
32- if ( tracksInOrder . length > 4 ) {
33- tracksInOrder . length = 4 ;
48+ if ( initialTracks . length > 4 ) {
49+ initialTracks . length = 4 ;
3450 }
3551
36- tracksInOrder = tracksInOrder . filter (
37- ( track : string ) => track !== 'NA' && validTracks . includes ( track )
38- ) ;
39- return tracksInOrder ;
52+ return initialTracks ;
4053}
4154
4255export default async function csvAlgorithm (
@@ -49,24 +62,20 @@ export default async function csvAlgorithm(
4962 const parseBlob = async ( ) => {
5063 const buffer = Buffer . from ( await blob . arrayBuffer ( ) ) ;
5164 const stream = Readable . from ( buffer . toString ( ) ) ;
52-
65+ // let i = 0;
5366 stream
5467 . pipe ( csv ( ) )
5568 . on ( 'data' , ( data ) => {
5669 if (
5770 data [ 'Table Number' ] !== '' &&
5871 data [ 'Project Status' ] === 'Submitted (Gallery/Visible)'
5972 ) {
60- const track1 : string = data [ 'Track #1 (Primary Track)' ] . trim ( ) ;
61- const track2 : string = data [ 'Track #2' ] . trim ( ) ;
62- const track3 : string = data [ 'Track #3' ] . trim ( ) ;
73+ const track1 = data [ 'Track #1 (Primary Track)' ] ?? '' ;
74+ const track2 = data [ 'Track #2' ] ?? '' ;
75+ const track3 = data [ 'Track #3' ] ?? '' ;
76+ const optIns = data [ 'Opt-In Prizes' ] ?? '' ;
6377
64- const tracksInOrder : string [ ] = sortTracks (
65- track1 ,
66- track2 ,
67- track3 ,
68- data [ 'Opt-In Prizes' ]
69- ) ;
78+ const tracksInOrder = sortTracks ( track1 , track2 , track3 , optIns ) ;
7079
7180 output . push ( {
7281 name : data [ 'Project Title' ] ,
0 commit comments