diff --git a/lesson_10/libraries/src/loaders/khayla_saunders_loaders.ts b/lesson_10/libraries/src/loaders/khayla_saunders_loaders.ts new file mode 100644 index 000000000..0c5a6afdf --- /dev/null +++ b/lesson_10/libraries/src/loaders/khayla_saunders_loaders.ts @@ -0,0 +1,57 @@ +import csv from 'csv-parser'; +import fs from 'fs'; +import { Credit, MediaItem } from '../models/index.js'; +import { Loader } from './loader.js'; + +export class KhaylaSaundersLoader implements Loader { + getLoaderName(): string { + return 'khaylasaunders'; + } + //TA Help/Chatgpt to complete Extra Credit + async loadData(): Promise { + const mediaItems = await this.loadMediaItems(); + const credits = await this.loadCredits(); + + for (const credit of credits) { + const mediaItem = mediaItems.find( + (item) => item.getId() === credit.getMediaItemId(), + ); + + if (mediaItem) { + mediaItem.addCredit(credit); + } + } + + console.log( + `Loaded ${credits.length} credits and ${mediaItems.length} media items`, + ); + + return mediaItems; + } + + async loadMediaItems(): Promise { + // TODO: Implement this method. + const mediaItems = []; + const readable = fs + .createReadStream('data/media_items.csv', 'utf-8') + .pipe(csv()); + for await (const row of readable) { + const { id, title, type, year } = row; + mediaItems.push(new MediaItem(id, title, type, year, [])); + } + return mediaItems; + } + + async loadCredits(): Promise { + const credits = []; + const readable = fs + .createReadStream('data/credits.csv', 'utf-8') + .pipe(csv()); + for await (const row of readable) { + const { media_item_id, role, name } = row; + credits.push(new Credit(media_item_id, name, role)); + } + return credits; + } +} +