Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/(api)/_actions/logic/ingestCSV.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ export default async function ingestCSV(formData: FormData) {
return res;
}

return csvRes;
return JSON.parse(JSON.stringify(csvRes));
}
4 changes: 2 additions & 2 deletions app/(api)/_data/2024_data.csv
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Project Title,Table Number,Submission Url,Project Status,Judging Status,Highest Step Completed,Project Created At,About The Project,"""Try it out"" Links",Video Demo Link,Opt-In Prizes,Built With,Submitter First Name,Submitter Last Name,Submitter Email,Notes,Technical Focus,Design Focus,Track #1,Track #2,Team Colleges/Universities,Additional Team Member Count,Team Member 1 First Name,Team Member 1 Last Name,Team Member 1 Email,...
Project Title,Table Number,Submission Url,Project Status,Judging Status,Highest Step Completed,Project Created At,About The Project,"""Try it out"" Links",Video Demo Link,Opt-In Prizes,Built With,Submitter First Name,Submitter Last Name,Submitter Email,Notes,Technical Focus,Design Focus,Track #1,Track #2,Track #3,Team Colleges/Universities,Additional Team Member Count,Team Member 1 First Name,Team Member 1 Last Name,Team Member 1 Email,...
dummy,10,https://hackdavis-2024.devpost.com/submissions/509367-dummy,Submitted (Gallery/Visible),Pending,Submit,04/24/2024 16:46:12,"What's next for dummy

blah blah blah
",http://www.hackdavis.io,,"Best Beginner Hack, Most Technically Challenging Hack, Best Use of .Tech Domain Name",java,Anjali,Jain,[email protected],,10,1,Best Beginner Hack,Most Technically Challenging Hack,University of California - Davis,0
",http://www.hackdavis.io,,"Best Beginner Hack, Most Technically Challenging Hack, Best Use of .Tech Domain Name",java,Anjali,Jain,[email protected],,10,1,Best Beginner Hack,Most Technically Challenging Hack,Best Hardware Hack,University of California - Davis,0
47 changes: 37 additions & 10 deletions app/(api)/_utils/csv-ingestion/csvAlgorithm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,13 @@ const validTracks: string[] = trackData.tracks.filter(
(t) => t !== 'Best Hack for Social Good'
);

function sortTracks(track1: string, track2: string, chosentracks: string) {
let tracksInOrder: string[] = [track1, track2];
function sortTracks(
track1: string,
track2: string,
track3: string,
chosentracks: string
): string[] {
let tracksInOrder: string[] = [track1, track2, track3];

if (chosentracks.length > 1) {
const otherTracks = chosentracks
Expand All @@ -29,12 +34,14 @@ function sortTracks(track1: string, track2: string, chosentracks: string) {
}

tracksInOrder = tracksInOrder.filter(
(track) => track !== 'NA' && validTracks.includes(track)
(track: string) => track !== 'NA' && validTracks.includes(track)
);
return tracksInOrder;
}

export default async function csvAlgorithm(blob: Blob) {
export default async function csvAlgorithm(
blob: Blob
): Promise<{ ok: boolean; body: ParsedRecord[] | null; error: string | null }> {
try {
const parsePromise = new Promise<ParsedRecord[]>((resolve, reject) => {
const output: ParsedRecord[] = [];
Expand All @@ -46,32 +53,52 @@ export default async function csvAlgorithm(blob: Blob) {
stream
.pipe(csv())
.on('data', (data) => {
if (data['Table Number'] !== '') {
const track1 = data['Track #1'].trim();
const track2 = data['Track #2'].trim();
if (
data['Table Number'] !== '' &&
data['Project Status'] === 'Submitted (Gallery/Visible)'
) {
const track1: string = data['Track #1 (Primary Track)'].trim();
const track2: string = data['Track #2'].trim();
const track3: string = data['Track #3'].trim();

const tracksInOrder: string[] = sortTracks(
track1,
track2,
track3,
data['Opt-In Prizes']
);

output.push({
name: data['Project Title'],
number: parseInt(data['Table Number']),
teamNumber: parseInt(data['Table Number']),
tableNumber: 0, // doing it later (on end)
tracks: tracksInOrder,
active: true,
});
}
})
.on('end', () => {
resolve(output);
const bestHardwareTeams = output.filter((team) =>
team.tracks.includes('Best Hardware Hack')
);
const otherTeams = output.filter(
(team) => !team.tracks.includes('Best Hardware Hack')
);

const orderedTeams = [...bestHardwareTeams, ...otherTeams];

orderedTeams.forEach((team, index) => {
team.tableNumber = index + 1;
});

resolve(orderedTeams);
})
.on('error', (error) => reject(error));
};
parseBlob().catch(reject);
});

const results = await parsePromise;
const results: ParsedRecord[] = await parsePromise;

return { ok: true, body: results, error: null };
} catch (e) {
Expand Down
4 changes: 3 additions & 1 deletion app/_types/parsedRecord.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
interface ParsedRecord {
name: string;
number: number;
teamNumber: number;
tableNumber: number;
tracks: string[];
active: boolean;
}

export default ParsedRecord;