From 5ad4219bf3f035933b48aa07d198a27bab9fb602 Mon Sep 17 00:00:00 2001 From: Dasiame Date: Thu, 17 Oct 2024 15:09:28 +0000 Subject: [PATCH 1/2] feat: adding Dasias loader file to lesson_10 --- .../src/loaders/dasia_english_loader.ts | 48 +++++++++++++++++++ .../libraries/src/loaders/loaders.module.ts | 3 +- 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 lesson_10/libraries/src/loaders/dasia_english_loader.ts diff --git a/lesson_10/libraries/src/loaders/dasia_english_loader.ts b/lesson_10/libraries/src/loaders/dasia_english_loader.ts new file mode 100644 index 000000000..fa629164f --- /dev/null +++ b/lesson_10/libraries/src/loaders/dasia_english_loader.ts @@ -0,0 +1,48 @@ +import csv from 'csv-parser'; +import fs from 'fs'; + +import { Credit, MediaItem } from '../models/index.js'; +import { Loader } from './loader.js'; + +export class DasiaEnglishLoader implements Loader { + getLoaderName(): string { + return 'anthonymays'; + } + + 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 matches = fs + .readFileSync('data/media_items.csv', { + encoding: 'utf-8', + }) + .split('\n') + .map((row: string): string[] => { + return row.split(','); + }); + console.log(matches); + // I used this youtube video to help me understand the above code: https://www.youtube.com/watch?v=bbvECy0ICuo + return []; + } + + 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..be7c79e03 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 { DasiaEnglishLoader } from './dasia_english_loader.js'; export const Loaders = Symbol.for('Loaders'); // Add your quiz provider here. -const LOADER_PROVIDERS = [AnthonyMaysLoader]; +const LOADER_PROVIDERS = [AnthonyMaysLoader, DasiaEnglishLoader]; @Module({ providers: [ From 24a0edcbe433e9d81e3cd5f5e26820ab5ce2cce9 Mon Sep 17 00:00:00 2001 From: Dasiame Date: Thu, 17 Oct 2024 18:01:59 +0000 Subject: [PATCH 2/2] fix: added an array as well as changing to a simplier code --- .../src/loaders/dasia_english_loader.ts | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/lesson_10/libraries/src/loaders/dasia_english_loader.ts b/lesson_10/libraries/src/loaders/dasia_english_loader.ts index fa629164f..dc23ce7a2 100644 --- a/lesson_10/libraries/src/loaders/dasia_english_loader.ts +++ b/lesson_10/libraries/src/loaders/dasia_english_loader.ts @@ -6,7 +6,7 @@ import { Loader } from './loader.js'; export class DasiaEnglishLoader implements Loader { getLoaderName(): string { - return 'anthonymays'; + return 'dasiaenglish'; } async loadData(): Promise { @@ -21,17 +21,18 @@ export class DasiaEnglishLoader implements Loader { } async loadMediaItems(): Promise { - const matches = fs - .readFileSync('data/media_items.csv', { - encoding: 'utf-8', - }) - .split('\n') - .map((row: string): string[] => { - return row.split(','); - }); - console.log(matches); + const media = []; + const readable = fs + .createReadStream('data/media_items.csv', 'utf-8') + .pipe(csv()); + for await (const row of readable) { + const { id, type, title, year } = row; + media.push(new MediaItem(id, title, type, year, [])); + } + return media; + // I used this youtube video to help me understand the above code: https://www.youtube.com/watch?v=bbvECy0ICuo - return []; + // I also got help from Lj on getting my test to run correctly } async loadCredits(): Promise { @@ -41,7 +42,7 @@ export class DasiaEnglishLoader implements Loader { .pipe(csv()); for await (const row of readable) { const { media_item_id: mediaItemId, role, name } = row; - credits.push({ mediaItemId, name, role }); + credits.push(new Credit(mediaItemId, name, role)); } return credits; }