Skip to content

Commit 1fa6279

Browse files
committed
feat: adds joseph_caballero_loader.ts and modifies loaders.module.ts for lesson_10 homework
1 parent 3fd39d7 commit 1fa6279

File tree

2 files changed

+198
-0
lines changed

2 files changed

+198
-0
lines changed
Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
import fs from 'fs';
2+
import { Credit, MediaItem, MediaType, Role } from '../models/index.js';
3+
import { Loader } from './loader.js';
4+
5+
export class JosephCaballeroLoader implements Loader {
6+
getLoaderName(): string {
7+
return 'josephcaballero';
8+
}
9+
10+
async loadData(): Promise<MediaItem[]> {
11+
const credits = await this.loadCredits();
12+
const mediaItems = await this.loadMediaItems();
13+
14+
console.log(
15+
`Loaded ${credits.length} credits and ${mediaItems.length} media items`,
16+
);
17+
mediaItems.forEach((item) => {
18+
credits.forEach((id) => {
19+
if (id.getMediaItemId() == item.getId()) {
20+
item.addCredit(id);
21+
}
22+
});
23+
});
24+
25+
return [...mediaItems.values()];
26+
}
27+
28+
async loadMediaItems(): Promise<MediaItem[]> {
29+
// TODO: Implement this method.
30+
const items = [];
31+
const load = fs
32+
.readFileSync('data/media_items.csv', {
33+
encoding: 'utf-8',
34+
})
35+
.split('\n')
36+
.map((row: string): string[] => {
37+
return row.split(',');
38+
});
39+
load.splice(0, 1);
40+
interface arrayObj {
41+
id: string;
42+
title: string;
43+
type: MediaType.Documentary | MediaType.Movie | MediaType.TVShow;
44+
year: number;
45+
}
46+
const obj: arrayObj[] = load.map((row: string[]): arrayObj => {
47+
if (MediaType.Documentary == row[1]) {
48+
return {
49+
id: row[0],
50+
title: row[2],
51+
type: (row[1] = MediaType.Documentary),
52+
year: Number(row[4]),
53+
};
54+
} else if (MediaType.TVShow == row[1]) {
55+
return {
56+
id: row[0],
57+
title: row[2],
58+
type: (row[1] = MediaType.TVShow),
59+
year: Number(row[4]),
60+
};
61+
} else {
62+
return {
63+
id: row[0],
64+
title: row[2],
65+
type: (row[1] = MediaType.Movie),
66+
year: Number(row[4]),
67+
};
68+
}
69+
});
70+
for await (const row of obj) {
71+
const { id, type, title, year } = row;
72+
items.push(new MediaItem(id, title, type, year, []));
73+
}
74+
return items;
75+
}
76+
77+
async loadCredits(): Promise<Credit[]> {
78+
const credits = [];
79+
const load = fs
80+
.readFileSync('data/media_items.csv', {
81+
encoding: 'utf-8',
82+
})
83+
.split('\n')
84+
.map((row: string): string[] => {
85+
return row.split(',');
86+
});
87+
load.splice(0, 1);
88+
interface arrayObj {
89+
media_Item_Id: string;
90+
type: string;
91+
role:
92+
| Role.Actor
93+
| Role.Cinematographer
94+
| Role.Composer
95+
| Role.CostumeDesigner
96+
| Role.Director
97+
| Role.Editor
98+
| Role.MakeupArtist
99+
| Role.Producer
100+
| Role.ProductionDesigner
101+
| Role.SoundDesigner
102+
| Role.StuntCoordinator
103+
| Role.Writer;
104+
}
105+
const obj: arrayObj[] = load.map((row: string[]): arrayObj => {
106+
if (row[2] == Role.Actor) {
107+
return {
108+
media_Item_Id: row[0],
109+
type: row[1],
110+
role: (row[2] = Role.Actor),
111+
};
112+
}
113+
if (row[2] == Role.Cinematographer) {
114+
return {
115+
media_Item_Id: row[0],
116+
type: row[1],
117+
role: (row[2] = Role.Cinematographer),
118+
};
119+
}
120+
if (row[2] == Role.Composer) {
121+
return {
122+
media_Item_Id: row[0],
123+
type: row[1],
124+
role: (row[2] = Role.Composer),
125+
};
126+
}
127+
if (row[2] == Role.CostumeDesigner) {
128+
return {
129+
media_Item_Id: row[0],
130+
type: row[1],
131+
role: (row[2] = Role.CostumeDesigner),
132+
};
133+
}
134+
if (row[2] == Role.Director) {
135+
return {
136+
media_Item_Id: row[0],
137+
type: row[1],
138+
role: (row[2] = Role.Director),
139+
};
140+
}
141+
if (row[2] == Role.Editor) {
142+
return {
143+
media_Item_Id: row[0],
144+
type: row[1],
145+
role: (row[2] = Role.Editor),
146+
};
147+
}
148+
if (row[2] == Role.MakeupArtist) {
149+
return {
150+
media_Item_Id: row[0],
151+
type: row[1],
152+
role: (row[2] = Role.MakeupArtist),
153+
};
154+
}
155+
if (row[2] == Role.Producer) {
156+
return {
157+
media_Item_Id: row[0],
158+
type: row[1],
159+
role: (row[2] = Role.Producer),
160+
};
161+
}
162+
if (row[2] == Role.ProductionDesigner) {
163+
return {
164+
media_Item_Id: row[0],
165+
type: row[1],
166+
role: (row[2] = Role.ProductionDesigner),
167+
};
168+
}
169+
if (row[2] == Role.SoundDesigner) {
170+
return {
171+
media_Item_Id: row[0],
172+
type: row[1],
173+
role: (row[2] = Role.SoundDesigner),
174+
};
175+
}
176+
if (row[2] == Role.StuntCoordinator) {
177+
return {
178+
media_Item_Id: row[0],
179+
type: row[1],
180+
role: (row[2] = Role.StuntCoordinator),
181+
};
182+
} else {
183+
return {
184+
media_Item_Id: row[0],
185+
type: row[1],
186+
role: (row[2] = Role.Writer),
187+
};
188+
}
189+
});
190+
for await (const row of obj) {
191+
const { media_Item_Id, type, role } = row;
192+
credits.push(new Credit(media_Item_Id, type, role));
193+
}
194+
return credits;
195+
}
196+
}

lesson_10/libraries/src/loaders/loaders.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Module } from '@nestjs/common';
22
import { AngelicaCastilloLoader } from './angelica_castillo_loader.js';
33
import { AnthonyMaysLoader } from './anthony_mays_loader.js';
44
import { JamesCapparellLoader } from './james_capparell_loader.js';
5+
import { JosephCaballeroLoader } from './joseph_caballero_loader.js';
56
import { NileJacksonLoader } from './nile_jackson_loader.js';
67
import { XavierCruzLoader } from './xavier_cruz_loader.js';
78

@@ -14,6 +15,7 @@ const LOADER_PROVIDERS = [
1415
JamesCapparellLoader,
1516
NileJacksonLoader,
1617
XavierCruzLoader,
18+
JosephCaballeroLoader,
1719
];
1820

1921
@Module({

0 commit comments

Comments
 (0)