diff --git a/lesson_09/types/package-lock.json b/lesson_09/types/package-lock.json new file mode 100644 index 000000000..b42cceffe --- /dev/null +++ b/lesson_09/types/package-lock.json @@ -0,0 +1,36 @@ +{ + "name": "types", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "csv-parser": "^3.0.0" + } + }, + "node_modules/csv-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.0.0.tgz", + "integrity": "sha512-s6OYSXAK3IdKqYO33y09jhypG/bSDHPuyCme/IdEHfWpLf/jKcpitVFyOC6UemgGk8v7Q5u2XE0vvwmanxhGlQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "csv-parser": "bin/csv-parser" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + } + } +} diff --git a/lesson_09/types/package.json b/lesson_09/types/package.json new file mode 100644 index 000000000..54254c57c --- /dev/null +++ b/lesson_09/types/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "csv-parser": "^3.0.0" + } +} diff --git a/lesson_10/libraries/src/loaders/chigazo_graham_loader.ts b/lesson_10/libraries/src/loaders/chigazo_graham_loader.ts new file mode 100644 index 000000000..8af034c3c --- /dev/null +++ b/lesson_10/libraries/src/loaders/chigazo_graham_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 ChigazoGrahamLoader implements Loader { + getLoaderName(): string { + return 'chigazograham'; + } + + 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 = []; + const readable = fs + .createReadStream('data/media_items.csv', 'utf-8') + .pipe(csv()); + for await (const row of readable) { + const { id, type, title, genre, year } = row; + mediaItems.push(new MediaItem(id, type, title, genre, 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 diff --git a/lesson_10/libraries/src/loaders/loaders.module.ts b/lesson_10/libraries/src/loaders/loaders.module.ts index 5997b6f7e..6d0c84718 100644 --- a/lesson_10/libraries/src/loaders/loaders.module.ts +++ b/lesson_10/libraries/src/loaders/loaders.module.ts @@ -1,11 +1,12 @@ import { Module } from '@nestjs/common'; import { AnthonyMaysLoader } from './anthony_mays_loader.js'; import { XavierCruzLoader } from './xavier_cruz_loader.js'; +import { ChigazoGrahamLoader } from './chigazo_graham_loader.js'; export const Loaders = Symbol.for('Loaders'); // Add your quiz provider here. -const LOADER_PROVIDERS = [AnthonyMaysLoader, XavierCruzLoader]; +const LOADER_PROVIDERS = [AnthonyMaysLoader, XavierCruzLoader, ChigazoGrahamLoader]; @Module({ providers: [