From b1db5f4bd966426131254bd9daca81f1cc7ae34b Mon Sep 17 00:00:00 2001 From: jjcapparell <“jjcapparell244@gmail.com> Date: Thu, 17 Oct 2024 19:46:30 +0000 Subject: [PATCH 1/2] feat: added james_capparell_loader.ts and edited loaders.module.ts for lesson_10 Loading the Media Collection assignment. --- .../src/loaders/james_capparell_loader.ts | 45 +++++++++++++++++++ .../libraries/src/loaders/loaders.module.ts | 3 +- 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 lesson_10/libraries/src/loaders/james_capparell_loader.ts diff --git a/lesson_10/libraries/src/loaders/james_capparell_loader.ts b/lesson_10/libraries/src/loaders/james_capparell_loader.ts new file mode 100644 index 000000000..6a7719d3b --- /dev/null +++ b/lesson_10/libraries/src/loaders/james_capparell_loader.ts @@ -0,0 +1,45 @@ +import csv from 'csv-parser'; +import fs from 'fs'; +import { Credit, MediaItem } from '../models/index.js'; +import { Loader } from './loader.js'; + +export class JamesCapparellLoader implements Loader { + getLoaderName(): string { + return 'jamescapparell'; + } + + async loadData(): Promise { + const credits = await this.loadCredits(); + const mediaItems = await this.loadMediaItems(); + + console.log( + `Loaded ${credits.length} credits and ${mediaItems.length} media items`, + ); + + return [...mediaItems.values()]; + } + + async loadMediaItems(): Promise { + const medias = []; + const readable = fs + .createReadStream('data/media_items.csv', 'utf-8') + .pipe(csv()); + for await (const row of readable) { + const {id, title, type, year } = row; + medias.push(new MediaItem(id, title, type, year, [])); + } + return medias; + } + + 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; + } +} diff --git a/lesson_10/libraries/src/loaders/loaders.module.ts b/lesson_10/libraries/src/loaders/loaders.module.ts index fe823555e..0419c270b 100644 --- a/lesson_10/libraries/src/loaders/loaders.module.ts +++ b/lesson_10/libraries/src/loaders/loaders.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; import { AnthonyMaysLoader } from './anthony_mays_loader.js'; +import { JamesCapparellLoader } from './james_capparell_loader.js'; export const Loaders = Symbol.for('Loaders'); // Add your quiz provider here. -const LOADER_PROVIDERS = [AnthonyMaysLoader]; +const LOADER_PROVIDERS = [AnthonyMaysLoader, JamesCapparellLoader]; @Module({ providers: [ From a18c598a3ceec6d2ea405b4e7df9bfcf31859f0b Mon Sep 17 00:00:00 2001 From: jjcapparell <“jjcapparell244@gmail.com> Date: Fri, 18 Oct 2024 16:29:08 +0000 Subject: [PATCH 2/2] feat: combined the credits with the media items by modifying the loadData method --- lesson_10/libraries/src/loaders/james_capparell_loader.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lesson_10/libraries/src/loaders/james_capparell_loader.ts b/lesson_10/libraries/src/loaders/james_capparell_loader.ts index 6a7719d3b..382ee4bd5 100644 --- a/lesson_10/libraries/src/loaders/james_capparell_loader.ts +++ b/lesson_10/libraries/src/loaders/james_capparell_loader.ts @@ -15,7 +15,15 @@ export class JamesCapparellLoader implements Loader { console.log( `Loaded ${credits.length} credits and ${mediaItems.length} media items`, ); + credits.forEach((credit) => { + const mediaItem = mediaItems.find( + (media) => media.getId() === credit.getMediaItemId(), + ); + if (mediaItem) { + mediaItem.addCredit(credit); + } + }); return [...mediaItems.values()]; }