From d6f8a0b19a1ab8e9655b7b7530e2d5473fa79d44 Mon Sep 17 00:00:00 2001 From: txtran224 Date: Fri, 18 Oct 2024 04:07:45 +0000 Subject: [PATCH 1/3] feat:lesson 10 added Tommy Tran loader solution --- .../libraries/src/loaders/loaders.module.ts | 3 +- .../src/loaders/tommy_tran_loarder.ts | 45 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 lesson_10/libraries/src/loaders/tommy_tran_loarder.ts diff --git a/lesson_10/libraries/src/loaders/loaders.module.ts b/lesson_10/libraries/src/loaders/loaders.module.ts index 33ccc5d13..5ff7d40d1 100644 --- a/lesson_10/libraries/src/loaders/loaders.module.ts +++ b/lesson_10/libraries/src/loaders/loaders.module.ts @@ -3,8 +3,8 @@ import { AngelicaCastilloLoader } from './angelica_castillo_loader.js'; import { AnthonyMaysLoader } from './anthony_mays_loader.js'; import { JamesCapparellLoader } from './james_capparell_loader.js'; import { NileJacksonLoader } from './nile_jackson_loader.js'; +import { TommyTranLoader } from './tommy_tran_loarder.js'; import { XavierCruzLoader } from './xavier_cruz_loader.js'; - export const Loaders = Symbol.for('Loaders'); // Add your quiz provider here. @@ -14,6 +14,7 @@ const LOADER_PROVIDERS = [ JamesCapparellLoader, NileJacksonLoader, XavierCruzLoader, + TommyTranLoader, ]; @Module({ diff --git a/lesson_10/libraries/src/loaders/tommy_tran_loarder.ts b/lesson_10/libraries/src/loaders/tommy_tran_loarder.ts new file mode 100644 index 000000000..593107d33 --- /dev/null +++ b/lesson_10/libraries/src/loaders/tommy_tran_loarder.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 TommyTranLoader implements Loader { + getLoaderName(): string { + return 'tommytran'; + } + + 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 mediaitems: MediaItem[] = []; + 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, [])); // help from xavier to instatiate the class + } + 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(new Credit(mediaItemId, name, role)); + } + return credits; + } +} From ca40c1bf50d8d48d063b3fd12fc812bb5e8b7105 Mon Sep 17 00:00:00 2001 From: txtran224 Date: Sat, 19 Oct 2024 14:07:56 +0000 Subject: [PATCH 2/3] chore: rename loader file --- .../src/loaders/{tommy_tran_loarder.ts => tommy_tran_loader.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename lesson_10/libraries/src/loaders/{tommy_tran_loarder.ts => tommy_tran_loader.ts} (100%) diff --git a/lesson_10/libraries/src/loaders/tommy_tran_loarder.ts b/lesson_10/libraries/src/loaders/tommy_tran_loader.ts similarity index 100% rename from lesson_10/libraries/src/loaders/tommy_tran_loarder.ts rename to lesson_10/libraries/src/loaders/tommy_tran_loader.ts From c5110575cf4ea9b028dbb83087ce49e1f30a2ab1 Mon Sep 17 00:00:00 2001 From: txtran224 Date: Sat, 19 Oct 2024 14:13:32 +0000 Subject: [PATCH 3/3] chore: update loader module --- lesson_10/libraries/src/loaders/loaders.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson_10/libraries/src/loaders/loaders.module.ts b/lesson_10/libraries/src/loaders/loaders.module.ts index 5ff7d40d1..7ea609721 100644 --- a/lesson_10/libraries/src/loaders/loaders.module.ts +++ b/lesson_10/libraries/src/loaders/loaders.module.ts @@ -3,7 +3,7 @@ import { AngelicaCastilloLoader } from './angelica_castillo_loader.js'; import { AnthonyMaysLoader } from './anthony_mays_loader.js'; import { JamesCapparellLoader } from './james_capparell_loader.js'; import { NileJacksonLoader } from './nile_jackson_loader.js'; -import { TommyTranLoader } from './tommy_tran_loarder.js'; +import { TommyTranLoader } from './tommy_tran_loader.js'; import { XavierCruzLoader } from './xavier_cruz_loader.js'; export const Loaders = Symbol.for('Loaders');