Skip to content

Commit 7b8b29a

Browse files
authored
Merge branch 'main' into db-validation-fix
2 parents 6aee7bb + fd1d5bc commit 7b8b29a

File tree

1 file changed

+37
-28
lines changed

1 file changed

+37
-28
lines changed

app/(api)/_utils/csv-ingestion/csvAlgorithm.ts

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@ import trackData from '@data/db_validation_data.json' assert { type: 'json' };
33
import { Readable } from 'stream';
44
import ParsedRecord from '@typeDefs/parsedRecord';
55

6+
const filteredTracks = [
7+
'Best Hack for Social Good',
8+
"Hacker's Choice Award",
9+
'NA',
10+
];
611
const validTracks: string[] = trackData.tracks.filter(
7-
(t) => t !== 'Best Hack for Social Good'
12+
(t) => !filteredTracks.includes(t)
813
);
914

1015
function 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

4255
export 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

Comments
 (0)