diff --git a/lesson_10/libraries/src/loaders/loaders.module.ts b/lesson_10/libraries/src/loaders/loaders.module.ts index 5e0de30d6..44229f4df 100644 --- a/lesson_10/libraries/src/loaders/loaders.module.ts +++ b/lesson_10/libraries/src/loaders/loaders.module.ts @@ -15,12 +15,12 @@ import { PabloLimonParedesLoader } from './pablo_limon_paredes_loader.js'; import { ShawnDunsmoreLoader } from './shawn_dunsmore_loader.js'; import { TommyTranLoader } from './tommy_tran_loader.js'; import { XavierCruzLoader } from './xavier_cruz_loader.js'; +import { YafiahAbdullahLoader } from './yafiah_abdullah_loader.js'; import { ZionBuchananLoader } from './zion_buchanan_loader.js'; export const Loaders = Symbol.for('Loaders'); // Add your quiz provider here. - const LOADER_PROVIDERS = [ AmiyahJonesLoader, AngelicaCastilloLoader, @@ -37,6 +37,7 @@ const LOADER_PROVIDERS = [ ShawnDunsmoreLoader, TommyTranLoader, XavierCruzLoader, + YafiahAbdullahLoader, ZionBuchananLoader, ]; diff --git a/lesson_10/libraries/src/loaders/yafiah_abdullah_loader.ts b/lesson_10/libraries/src/loaders/yafiah_abdullah_loader.ts new file mode 100644 index 000000000..3f05b0a70 --- /dev/null +++ b/lesson_10/libraries/src/loaders/yafiah_abdullah_loader.ts @@ -0,0 +1,47 @@ +import csv from 'csv-parser'; +import fs from 'fs'; +import { Credit, MediaItem } from '../models/index.js'; +import { Loader } from './loader.js'; + +export class YafiahAbdullahLoader implements Loader { + getLoaderName(): string { + return 'yafiahabdullah'; + } + + async loadData(): Promise { + const [credits, mediaItems] = await Promise.all([ + this.loadCredits(), + this.loadMediaItems(), + ]); + + console.log( + `Loaded ${credits.length} credits and ${mediaItems.length} media items`, + ); + + return [...mediaItems.values()]; + } + + async loadMediaItems(): Promise { + const media = []; + const readable = fs + .createReadStream('data/media_items.csv', 'utf-8') + .pipe(csv()); + for await (const row of readable) { + const { id, type, title, year } = row; + media.push(new MediaItem(id, title, type, year, [])); + } + return media; + } + + 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; + } +}