From 1fa627917fd54e8ecda0f80357703090a0ca9c09 Mon Sep 17 00:00:00 2001 From: Joseph Date: Fri, 18 Oct 2024 06:55:50 +0000 Subject: [PATCH 1/2] feat: adds joseph_caballero_loader.ts and modifies loaders.module.ts for lesson_10 homework --- .../src/loaders/joseph_caballero_loader.ts | 196 ++++++++++++++++++ .../libraries/src/loaders/loaders.module.ts | 2 + 2 files changed, 198 insertions(+) create mode 100644 lesson_10/libraries/src/loaders/joseph_caballero_loader.ts diff --git a/lesson_10/libraries/src/loaders/joseph_caballero_loader.ts b/lesson_10/libraries/src/loaders/joseph_caballero_loader.ts new file mode 100644 index 000000000..885548f16 --- /dev/null +++ b/lesson_10/libraries/src/loaders/joseph_caballero_loader.ts @@ -0,0 +1,196 @@ +import fs from 'fs'; +import { Credit, MediaItem, MediaType, Role } from '../models/index.js'; +import { Loader } from './loader.js'; + +export class JosephCaballeroLoader implements Loader { + getLoaderName(): string { + return 'josephcaballero'; + } + + async loadData(): Promise { + const credits = await this.loadCredits(); + const mediaItems = await this.loadMediaItems(); + + console.log( + `Loaded ${credits.length} credits and ${mediaItems.length} media items`, + ); + mediaItems.forEach((item) => { + credits.forEach((id) => { + if (id.getMediaItemId() == item.getId()) { + item.addCredit(id); + } + }); + }); + + return [...mediaItems.values()]; + } + + async loadMediaItems(): Promise { + // TODO: Implement this method. + const items = []; + const load = fs + .readFileSync('data/media_items.csv', { + encoding: 'utf-8', + }) + .split('\n') + .map((row: string): string[] => { + return row.split(','); + }); + load.splice(0, 1); + interface arrayObj { + id: string; + title: string; + type: MediaType.Documentary | MediaType.Movie | MediaType.TVShow; + year: number; + } + const obj: arrayObj[] = load.map((row: string[]): arrayObj => { + if (MediaType.Documentary == row[1]) { + return { + id: row[0], + title: row[2], + type: (row[1] = MediaType.Documentary), + year: Number(row[4]), + }; + } else if (MediaType.TVShow == row[1]) { + return { + id: row[0], + title: row[2], + type: (row[1] = MediaType.TVShow), + year: Number(row[4]), + }; + } else { + return { + id: row[0], + title: row[2], + type: (row[1] = MediaType.Movie), + year: Number(row[4]), + }; + } + }); + for await (const row of obj) { + const { id, type, title, year } = row; + items.push(new MediaItem(id, title, type, year, [])); + } + return items; + } + + async loadCredits(): Promise { + const credits = []; + const load = fs + .readFileSync('data/media_items.csv', { + encoding: 'utf-8', + }) + .split('\n') + .map((row: string): string[] => { + return row.split(','); + }); + load.splice(0, 1); + interface arrayObj { + media_Item_Id: string; + type: string; + role: + | Role.Actor + | Role.Cinematographer + | Role.Composer + | Role.CostumeDesigner + | Role.Director + | Role.Editor + | Role.MakeupArtist + | Role.Producer + | Role.ProductionDesigner + | Role.SoundDesigner + | Role.StuntCoordinator + | Role.Writer; + } + const obj: arrayObj[] = load.map((row: string[]): arrayObj => { + if (row[2] == Role.Actor) { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.Actor), + }; + } + if (row[2] == Role.Cinematographer) { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.Cinematographer), + }; + } + if (row[2] == Role.Composer) { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.Composer), + }; + } + if (row[2] == Role.CostumeDesigner) { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.CostumeDesigner), + }; + } + if (row[2] == Role.Director) { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.Director), + }; + } + if (row[2] == Role.Editor) { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.Editor), + }; + } + if (row[2] == Role.MakeupArtist) { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.MakeupArtist), + }; + } + if (row[2] == Role.Producer) { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.Producer), + }; + } + if (row[2] == Role.ProductionDesigner) { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.ProductionDesigner), + }; + } + if (row[2] == Role.SoundDesigner) { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.SoundDesigner), + }; + } + if (row[2] == Role.StuntCoordinator) { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.StuntCoordinator), + }; + } else { + return { + media_Item_Id: row[0], + type: row[1], + role: (row[2] = Role.Writer), + }; + } + }); + for await (const row of obj) { + const { media_Item_Id, type, role } = row; + credits.push(new Credit(media_Item_Id, type, role)); + } + return credits; + } +} diff --git a/lesson_10/libraries/src/loaders/loaders.module.ts b/lesson_10/libraries/src/loaders/loaders.module.ts index 33ccc5d13..158ec05e7 100644 --- a/lesson_10/libraries/src/loaders/loaders.module.ts +++ b/lesson_10/libraries/src/loaders/loaders.module.ts @@ -2,6 +2,7 @@ import { Module } from '@nestjs/common'; import { AngelicaCastilloLoader } from './angelica_castillo_loader.js'; import { AnthonyMaysLoader } from './anthony_mays_loader.js'; import { JamesCapparellLoader } from './james_capparell_loader.js'; +import { JosephCaballeroLoader } from './joseph_caballero_loader.js'; import { NileJacksonLoader } from './nile_jackson_loader.js'; import { XavierCruzLoader } from './xavier_cruz_loader.js'; @@ -14,6 +15,7 @@ const LOADER_PROVIDERS = [ JamesCapparellLoader, NileJacksonLoader, XavierCruzLoader, + JosephCaballeroLoader, ]; @Module({ From f74523afd97b7c25e0856e0e876081bc116104e3 Mon Sep 17 00:00:00 2001 From: Joseph Date: Fri, 18 Oct 2024 17:45:08 +0000 Subject: [PATCH 2/2] feat: changes to joseph_caballero_loader.ts after learning as ketyword to do exact seat: made changes to joseph_caballero_loader.ts -Joseph Caballero --- .../src/loaders/joseph_caballero_loader.ts | 126 ++---------------- 1 file changed, 8 insertions(+), 118 deletions(-) diff --git a/lesson_10/libraries/src/loaders/joseph_caballero_loader.ts b/lesson_10/libraries/src/loaders/joseph_caballero_loader.ts index 885548f16..7318448e7 100644 --- a/lesson_10/libraries/src/loaders/joseph_caballero_loader.ts +++ b/lesson_10/libraries/src/loaders/joseph_caballero_loader.ts @@ -44,28 +44,12 @@ export class JosephCaballeroLoader implements Loader { year: number; } const obj: arrayObj[] = load.map((row: string[]): arrayObj => { - if (MediaType.Documentary == row[1]) { - return { - id: row[0], - title: row[2], - type: (row[1] = MediaType.Documentary), - year: Number(row[4]), - }; - } else if (MediaType.TVShow == row[1]) { - return { - id: row[0], - title: row[2], - type: (row[1] = MediaType.TVShow), - year: Number(row[4]), - }; - } else { - return { - id: row[0], - title: row[2], - type: (row[1] = MediaType.Movie), - year: Number(row[4]), - }; - } + return { + id: row[0], + title: row[2], + type: row[1] as MediaType, + year: Number(row[4]), + }; }); for await (const row of obj) { const { id, type, title, year } = row; @@ -88,104 +72,10 @@ export class JosephCaballeroLoader implements Loader { interface arrayObj { media_Item_Id: string; type: string; - role: - | Role.Actor - | Role.Cinematographer - | Role.Composer - | Role.CostumeDesigner - | Role.Director - | Role.Editor - | Role.MakeupArtist - | Role.Producer - | Role.ProductionDesigner - | Role.SoundDesigner - | Role.StuntCoordinator - | Role.Writer; + role: Role; } const obj: arrayObj[] = load.map((row: string[]): arrayObj => { - if (row[2] == Role.Actor) { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.Actor), - }; - } - if (row[2] == Role.Cinematographer) { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.Cinematographer), - }; - } - if (row[2] == Role.Composer) { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.Composer), - }; - } - if (row[2] == Role.CostumeDesigner) { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.CostumeDesigner), - }; - } - if (row[2] == Role.Director) { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.Director), - }; - } - if (row[2] == Role.Editor) { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.Editor), - }; - } - if (row[2] == Role.MakeupArtist) { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.MakeupArtist), - }; - } - if (row[2] == Role.Producer) { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.Producer), - }; - } - if (row[2] == Role.ProductionDesigner) { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.ProductionDesigner), - }; - } - if (row[2] == Role.SoundDesigner) { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.SoundDesigner), - }; - } - if (row[2] == Role.StuntCoordinator) { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.StuntCoordinator), - }; - } else { - return { - media_Item_Id: row[0], - type: row[1], - role: (row[2] = Role.Writer), - }; - } + return { media_Item_Id: row[0], type: row[1], role: row[2] as Role }; }); for await (const row of obj) { const { media_Item_Id, type, role } = row;