diff --git a/lesson_10/libraries/src/loaders/justin_eklund_loader.ts b/lesson_10/libraries/src/loaders/justin_eklund_loader.ts new file mode 100644 index 000000000..e2faf7f40 --- /dev/null +++ b/lesson_10/libraries/src/loaders/justin_eklund_loader.ts @@ -0,0 +1,60 @@ +import csv from 'csv-parser'; +import fs from 'fs'; +import { Credit, MediaItem } from '../models/index.js'; +import { Loader } from './loader.js'; + +export class JustinEklundLoader implements Loader { + getLoaderName(): string { + return 'justineklund'; + } + + async loadData(): Promise { + const credits = await this.loadCredits(); + const mediaItems = await this.loadMediaItems(); + const mediamap = new Map(); + mediaItems.forEach((mediaItem) => { + mediamap.set(mediaItem.getId(), mediaItem); + }); + for (const mediaitem of mediaItems) { + mediamap.set(mediaitem.getId(), mediaitem); + } + for (const credit of credits) { + const mediaItem = mediamap.get(credit.getMediaItemId()); + + if (mediaItem) { + mediaItem.addCredit(credit); + } + } + console.log( + `Loaded ${credits.length} credits and ${mediaItems.length} media items`, + ); + + + return Array.from(mediamap.values()); + } + + async loadMediaItems(): Promise { + const mediaItems = []; + const readable = fs + .createReadStream('data/media_items.csv', 'utf-8') + .pipe(csv()); + for await (const row of readable) { + const { id, type, title, 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; + } +} +// got assistance from ai and copilot aswell as Meiko ,Mercedes and Dillon. diff --git a/lesson_10/libraries/src/loaders/loaders.module.ts b/lesson_10/libraries/src/loaders/loaders.module.ts index 22a993a5d..1c104e8f4 100644 --- a/lesson_10/libraries/src/loaders/loaders.module.ts +++ b/lesson_10/libraries/src/loaders/loaders.module.ts @@ -8,6 +8,7 @@ import { DylanLaffertysLoader } from './dylan_lafferty_loaders.js'; import { MeikoStephensLoader } from './meiko_stephens_loader.js'; import { NiaPackLoader } from './nia_pack_loader.js'; import { JBeyLoader } from './JBey_loader.js'; +import { JustinEklundLoader } from './justin_eklund_loader.js'; import { KarenAlabiLoader } from './karen_alabi_loader.js'; import { MercedesMathewsLoader } from './mercedes_mathews_loader.js'; import { RasheedMillerLoader } from './rasheed_miller_loader.js'; @@ -25,6 +26,7 @@ const LOADER_PROVIDERS = [ DavisDLoader, ChanelHuttLoader, JBeyLoader, + JustinEklundLoader, MercedesMathewsLoader, JasonWatsonLoader, KarenAlabiLoader, @@ -47,3 +49,4 @@ const LOADER_PROVIDERS = [ exports: [Loaders], }) export class LoadersModule {} +// got assistance from ai and copilot aswell as Meiko ,Mercedes and Dillon