From 75e3ede36a5a4d79ab4c0b11511574b2ed9c6f99 Mon Sep 17 00:00:00 2001 From: Meiko-S22 Date: Thu, 27 Mar 2025 17:36:05 +0000 Subject: [PATCH 1/2] feat: add Meiko lesson 10 --- .../libraries/src/loaders/loaders.module.ts | 3 +- .../src/loaders/meiko_stephens_loader.ts | 49 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 lesson_10/libraries/src/loaders/meiko_stephens_loader.ts diff --git a/lesson_10/libraries/src/loaders/loaders.module.ts b/lesson_10/libraries/src/loaders/loaders.module.ts index 0b2db8214..1cc1ff365 100644 --- a/lesson_10/libraries/src/loaders/loaders.module.ts +++ b/lesson_10/libraries/src/loaders/loaders.module.ts @@ -2,10 +2,11 @@ import { Module } from '@nestjs/common'; import { AnthonyMaysLoader } from './anthony_mays_loader.js'; import { DylanLaffertysLoader } from './dylan_lafferty_loaders.js'; +import { MeikoStephensLoader } from './meiko_stephens_loader.js'; export const Loaders = Symbol.for('Loaders'); -const LOADER_PROVIDERS = [AnthonyMaysLoader, DylanLaffertysLoader]; +const LOADER_PROVIDERS = [AnthonyMaysLoader, DylanLaffertysLoader,MeikoStephensLoader]; @Module({ providers: [ diff --git a/lesson_10/libraries/src/loaders/meiko_stephens_loader.ts b/lesson_10/libraries/src/loaders/meiko_stephens_loader.ts new file mode 100644 index 000000000..b0c6ea3b6 --- /dev/null +++ b/lesson_10/libraries/src/loaders/meiko_stephens_loader.ts @@ -0,0 +1,49 @@ +import csv from 'csv-parser'; +import fs from 'fs'; +import { Credit, MediaItem } from '../models/index.js'; +import { Loader } from './loader.js'; + +export class MeikoStephensLoader implements Loader { + getLoaderName(): string { + return 'meikostephens'; + } + + 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); + }); + + + console.log(`Loaded ${credits.length} credits and ${mediaItems.length} media items`, ); + + return [...mediaItems.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, 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; + } +} \ No newline at end of file From b9c3e34ded0b67b13acb25ebe5c9cc350b063455 Mon Sep 17 00:00:00 2001 From: Meiko-S22 Date: Thu, 27 Mar 2025 18:09:14 +0000 Subject: [PATCH 2/2] fix: updated lesson 10 --- .../src/loaders/meiko_stephens_loader.ts | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/lesson_10/libraries/src/loaders/meiko_stephens_loader.ts b/lesson_10/libraries/src/loaders/meiko_stephens_loader.ts index b0c6ea3b6..888e09e24 100644 --- a/lesson_10/libraries/src/loaders/meiko_stephens_loader.ts +++ b/lesson_10/libraries/src/loaders/meiko_stephens_loader.ts @@ -11,30 +11,38 @@ export class MeikoStephensLoader implements Loader { async loadData(): Promise { const credits = await this.loadCredits(); const mediaItems = await this.loadMediaItems(); - const mediaMap = new Map(); - mediaItems.forEach((mediaItem) => { + const mediaMap = new Map(); + + 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`, ); + console.log( + `Loaded ${credits.length} credits and ${mediaItems.length} media items`, + ); - return [...mediaItems.values( )]; + return Array.from(mediaMap.values()); } async loadMediaItems(): Promise { const mediaItems = []; const readable = fs - .createReadStream('data/media_items.csv', 'utf-8') - .pipe(csv()); + .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,[])); + const { id, title, type, year } = row; + mediaItems.push(new MediaItem(id, title, type, year, [])); } return mediaItems; } - async loadCredits(): Promise { const credits = []; const readable = fs @@ -46,4 +54,4 @@ export class MeikoStephensLoader implements Loader { } return credits; } -} \ No newline at end of file +}