From 127e14dc8a37369e3c2b1834fc2d0b602b6fa273 Mon Sep 17 00:00:00 2001 From: Cogobonnia <244cogbonnia@gmail.com> Date: Thu, 17 Oct 2024 18:47:18 +0000 Subject: [PATCH 1/3] fix: added name and loader file for Chelsea --- .../src/loaders/chelsea_ogbonnia_loader.ts | 68 +++++++++++++++++++ .../libraries/src/loaders/loaders.module.ts | 3 +- 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts diff --git a/lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts b/lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts new file mode 100644 index 000000000..a8cf4074b --- /dev/null +++ b/lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts @@ -0,0 +1,68 @@ +import csv from 'csv-parser'; +import fs from 'fs'; +import { Credit, MediaItem, MediaType } from '../models/index.js'; +import { Loader } from './loader.js'; + +export class ChelseaOgbonniaLoader implements Loader { + getLoaderName(): string { + return 'chesleaogbonnia'; + } + + 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; + } + + async loadMediaItems(): Promise { + const mediaItems: MediaItem[] = []; + const readable = fs + .createReadStream('data/media_items.csv', 'utf-8') + .pipe(csv()); + + for await (const row of readable) { + const { id, type, title, year } = row; + let mediaType: MediaType | undefined; + switch (type) { + case 'movie': + mediaType = MediaType.Movie; + break; + case 'tv_show': + mediaType = MediaType.TVShow; + break; + case 'documentary': + mediaType = MediaType.Documentary; + break; + default: + throw new Error(`Unknown media type: ${type}`); + } + const releaseYear = Number(year); + const mediaItem = new MediaItem( + String(id), + title, + mediaType, + releaseYear, + [], + ); + mediaItems.push(mediaItem); + } + 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: mediaItemId, role, name } = row; + credits.push({ mediaItemId, 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..2fd2d2ed0 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 { ChelseaOgbonniaLoader } from './chelsea_ogbonnia_loader.js'; export const Loaders = Symbol.for('Loaders'); // Add your quiz provider here. -const LOADER_PROVIDERS = [AnthonyMaysLoader]; +const LOADER_PROVIDERS = [AnthonyMaysLoader, ChelseaOgbonniaLoader]; @Module({ providers: [ From ef71f5421f3fa9a78e292cf5c263a133a0011c15 Mon Sep 17 00:00:00 2001 From: Cogobonnia <244cogbonnia@gmail.com> Date: Thu, 17 Oct 2024 19:10:18 +0000 Subject: [PATCH 2/3] fix: changed return to include credits --- lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts b/lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts index a8cf4074b..960aa0711 100644 --- a/lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts +++ b/lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts @@ -61,7 +61,8 @@ export class ChelseaOgbonniaLoader implements Loader { .pipe(csv()); for await (const row of readable) { const { media_item_id: mediaItemId, role, name } = row; - credits.push({ mediaItemId, name, role }); + const credit = new Credit(mediaItemId, name, role); + credits.push(credit); } return credits; } From a6e7ed73f7bd808d93609ab7de6ed814911949a6 Mon Sep 17 00:00:00 2001 From: Cogobonnia <244cogbonnia@gmail.com> Date: Fri, 18 Oct 2024 13:55:04 +0000 Subject: [PATCH 3/3] fix: added Xavier's loader and extra credit attempt --- .../src/loaders/chelsea_ogbonnia_loader.ts | 17 +++++++++++++++++ .../libraries/src/loaders/loaders.module.ts | 9 +++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts b/lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts index 960aa0711..b2fa6b3ff 100644 --- a/lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts +++ b/lesson_10/libraries/src/loaders/chelsea_ogbonnia_loader.ts @@ -12,6 +12,23 @@ export class ChelseaOgbonniaLoader implements Loader { const credits = await this.loadCredits(); const mediaItems = await this.loadMediaItems(); + const creditsMap: Record = {}; + + credits.forEach((credit) => { + const mediaItemId = credit.getMediaItemId(); + if (!creditsMap[mediaItemId]) { + creditsMap[mediaItemId] = []; + } + creditsMap[mediaItemId].push(credit); + }); + + mediaItems.forEach((mediaItem) => { + const mediaItemId = mediaItem.getId(); + const associatedCredits = creditsMap[mediaItemId] || []; + + associatedCredits.forEach((credit) => mediaItem.addCredit(credit)); + }); + console.log( `Loaded ${credits.length} credits and ${mediaItems.length} media items`, ); diff --git a/lesson_10/libraries/src/loaders/loaders.module.ts b/lesson_10/libraries/src/loaders/loaders.module.ts index 36fe88373..eda74f718 100644 --- a/lesson_10/libraries/src/loaders/loaders.module.ts +++ b/lesson_10/libraries/src/loaders/loaders.module.ts @@ -1,11 +1,16 @@ import { Module } from '@nestjs/common'; import { AnthonyMaysLoader } from './anthony_mays_loader.js'; import { ChelseaOgbonniaLoader } from './chelsea_ogbonnia_loader.js'; +import { XavierCruzLoader } from './xavier_cruz_loader.js'; export const Loaders = Symbol.for('Loaders'); // Add your quiz provider here. -const LOADER_PROVIDERS = [AnthonyMaysLoader, ChelseaOgbonniaLoader]; +const LOADER_PROVIDERS = [ + AnthonyMaysLoader, + ChelseaOgbonniaLoader, + XavierCruzLoader, +]; @Module({ providers: [ @@ -18,4 +23,4 @@ const LOADER_PROVIDERS = [AnthonyMaysLoader, ChelseaOgbonniaLoader]; ], exports: [Loaders], }) -export class LoadersModule {} \ No newline at end of file +export class LoadersModule {}