Skip to content

Commit 24cf775

Browse files
authored
Merge branch 'main' into Lesson_10
2 parents 60083e1 + 0928ad9 commit 24cf775

File tree

11 files changed

+499
-1
lines changed

11 files changed

+499
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.codedifferently.lesson9.dataprovider;
2+
3+
import java.util.Map;
4+
import org.springframework.stereotype.Service;
5+
6+
@Service
7+
public class DavidSmithProvider extends DataProvider {
8+
public String getProviderName() {
9+
return "davidsmith";
10+
}
11+
12+
public Map<String, Class> getColumnTypeByName() {
13+
return Map.of(
14+
"column1", Float.class,
15+
"column2", Long.class,
16+
"column3", Short.class,
17+
"column4", Double.class,
18+
"column5", Boolean.class,
19+
"column6", String.class,
20+
"column7", Integer.class);
21+
}
22+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
[
2+
{
3+
"column1": "2.4856768E38",
4+
"column2": "6348194688465711104",
5+
"column3": "7857",
6+
"column4": "9.45255774450901E307",
7+
"column5": "false",
8+
"column6": "d7mgwz1ter3v",
9+
"column7": "1441278966"
10+
},
11+
{
12+
"column1": "4.0458309E37",
13+
"column2": "475565836519605120",
14+
"column3": "32745",
15+
"column4": "1.2832704698365005E308",
16+
"column5": "false",
17+
"column6": "znmecj6v",
18+
"column7": "113077411"
19+
},
20+
{
21+
"column1": "6.88325E36",
22+
"column2": "1605489098004667392",
23+
"column3": "3736",
24+
"column4": "5.805517690396217E307",
25+
"column5": "false",
26+
"column6": "lm6cweq0h",
27+
"column7": "262984225"
28+
},
29+
{
30+
"column1": "5.6297574E36",
31+
"column2": "1042305323669988608",
32+
"column3": "9421",
33+
"column4": "4.4593927475096523E307",
34+
"column5": "true",
35+
"column6": "2rxwqco47",
36+
"column7": "1283217146"
37+
},
38+
{
39+
"column1": "1.3651107E38",
40+
"column2": "2693239424534015488",
41+
"column3": "22023",
42+
"column4": "1.4079937081264981E308",
43+
"column5": "false",
44+
"column6": "pwu96a7n",
45+
"column7": "771709699"
46+
},
47+
{
48+
"column1": "1.8253724E38",
49+
"column2": "4001908518756238848",
50+
"column3": "25719",
51+
"column4": "3.8526406262057017E307",
52+
"column5": "false",
53+
"column6": "gc6yufq1a9o",
54+
"column7": "1098995223"
55+
},
56+
{
57+
"column1": "4.3599036E35",
58+
"column2": "2464793638457769984",
59+
"column3": "27246",
60+
"column4": "1.1952813310702996E308",
61+
"column5": "true",
62+
"column6": "gej6pimrvo58",
63+
"column7": "1083541075"
64+
},
65+
{
66+
"column1": "2.0973243E38",
67+
"column2": "6316064103344864256",
68+
"column3": "13153",
69+
"column4": "3.232035544098492E307",
70+
"column5": "false",
71+
"column6": "xr5pydw9vie",
72+
"column7": "535584121"
73+
},
74+
{
75+
"column1": "5.106034E37",
76+
"column2": "7391061472444326912",
77+
"column3": "17670",
78+
"column4": "2.6990741028748347E307",
79+
"column5": "true",
80+
"column6": "wz6hrv0jeos7",
81+
"column7": "840264099"
82+
},
83+
{
84+
"column1": "2.7015147E38",
85+
"column2": "9150685000976729088",
86+
"column3": "31742",
87+
"column4": "3.6277639883903186E307",
88+
"column5": "true",
89+
"column6": "zta2ny9c6k",
90+
"column7": "1545745617"
91+
}
92+
]
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import csv from 'csv-parser';
2+
import fs from 'fs';
3+
import { Credit, MediaItem } from '../models/index.js';
4+
import { Loader } from './loader.js';
5+
6+
export class ChigazoGrahamLoader implements Loader {
7+
getLoaderName(): string {
8+
return 'chigazograham';
9+
}
10+
11+
async loadData(): Promise<MediaItem[]> {
12+
const credits = await this.loadCredits();
13+
const mediaItems = await this.loadMediaItems();
14+
15+
console.log(
16+
`Loaded ${credits.length} credits and ${mediaItems.length} media items`,
17+
);
18+
19+
return [...mediaItems.values()];
20+
}
21+
22+
async loadMediaItems(): Promise<MediaItem[]> {
23+
const mediaItems = [];
24+
const readable = fs
25+
.createReadStream('data/media_items.csv', 'utf-8')
26+
.pipe(csv());
27+
for await (const row of readable) {
28+
const { id, type, title, genre, year } = row;
29+
mediaItems.push(new MediaItem(id, type, title, genre, year,));
30+
}
31+
return mediaItems;
32+
}
33+
34+
async loadCredits(): Promise<Credit[]> {
35+
const credits = [];
36+
const readable = fs
37+
.createReadStream('data/credits.csv', 'utf-8')
38+
.pipe(csv());
39+
for await (const row of readable) {
40+
const { media_item_id, role, name } = row;
41+
credits.push(new Credit(media_item_id, name, role));
42+
}
43+
return credits;
44+
}
45+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import csv from 'csv-parser';
2+
import fs from 'fs';
3+
import { Credit, MediaItem } from '../models/index.js';
4+
import { Loader } from './loader.js';
5+
6+
export class DavidSmithLoader implements Loader {
7+
getLoaderName(): string {
8+
return 'davidsmith';
9+
}
10+
11+
async loadData(): Promise<MediaItem[]> {
12+
const credits = await this.loadCredits();
13+
const mediaItems = await this.loadMediaItems();
14+
15+
console.log(
16+
`Loaded ${credits.length} credits and ${mediaItems.length} media items`,
17+
);
18+
19+
return [...mediaItems.values()];
20+
}
21+
22+
async loadMediaItems(): Promise<MediaItem[]> {
23+
const media = [];
24+
const readable = fs
25+
.createReadStream('data/media_items.csv', 'utf-8')
26+
.pipe(csv());
27+
for await (const row of readable) {
28+
const { id, title, type, year } = row;
29+
media.push(new MediaItem(id, title, type, year, []));
30+
}
31+
return media;
32+
}
33+
34+
async loadCredits(): Promise<Credit[]> {
35+
const credits = [];
36+
const readable = fs
37+
.createReadStream('data/credits.csv', 'utf-8')
38+
.pipe(csv());
39+
for await (const row of readable) {
40+
const { media_item_id, role, name } = row;
41+
credits.push(new Credit(media_item_id, name, role));
42+
}
43+
return credits;
44+
}
45+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import csv from 'csv-parser';
2+
import fs from 'fs';
3+
import { Credit, MediaItem } from '../models/index.js';
4+
import { Loader } from './loader.js';
5+
6+
export class DwightBlueLoader implements Loader {
7+
getLoaderName(): string {
8+
return 'dwightblue';
9+
}
10+
11+
async loadData(): Promise<MediaItem[]> {
12+
const credits = await this.loadCredits();
13+
const mediaItems = await this.loadMediaItems();
14+
15+
for (let i = 0; i < mediaItems.length; i++) {
16+
mediaItems[i].addCredit(credits[i]);
17+
console.log(mediaItems[i]);
18+
}
19+
20+
console.log(
21+
`Loaded ${credits.length} credits and ${mediaItems.length} media items`,
22+
);
23+
24+
return [...mediaItems.values()];
25+
}
26+
27+
async loadMediaItems(): Promise<MediaItem[]> {
28+
// TODO: Implement this method.
29+
const mediaItem = [];
30+
const readable = fs
31+
.createReadStream('data/media_items.csv', 'utf-8')
32+
.pipe(csv());
33+
for await (const row of readable) {
34+
const { id, title, type, year } = row;
35+
mediaItem.push(new MediaItem(id, title, type, year, []));
36+
}
37+
return mediaItem;
38+
}
39+
40+
async loadCredits(): Promise<Credit[]> {
41+
const credits = [];
42+
const readable = fs
43+
.createReadStream('data/credits.csv', 'utf-8')
44+
.pipe(csv());
45+
for await (const row of readable) {
46+
const { media_item_id: mediaItemId, role, name } = row;
47+
credits.push(new Credit(mediaItemId, name, role));
48+
}
49+
return credits;
50+
}
51+
}

lesson_10/libraries/src/loaders/james_capparell_loader.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,15 @@ export class JamesCapparellLoader implements Loader {
1515
console.log(
1616
`Loaded ${credits.length} credits and ${mediaItems.length} media items`,
1717
);
18+
credits.forEach((credit) => {
19+
const mediaItem = mediaItems.find(
20+
(media) => media.getId() === credit.getMediaItemId(),
21+
);
1822

23+
if (mediaItem) {
24+
mediaItem.addCredit(credit);
25+
}
26+
});
1927
return [...mediaItems.values()];
2028
}
2129

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
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+
return {
48+
id: row[0],
49+
title: row[2],
50+
type: row[1] as MediaType,
51+
year: Number(row[4]),
52+
};
53+
});
54+
for await (const row of obj) {
55+
const { id, type, title, year } = row;
56+
items.push(new MediaItem(id, title, type, year, []));
57+
}
58+
return items;
59+
}
60+
61+
async loadCredits(): Promise<Credit[]> {
62+
const credits = [];
63+
const load = fs
64+
.readFileSync('data/media_items.csv', {
65+
encoding: 'utf-8',
66+
})
67+
.split('\n')
68+
.map((row: string): string[] => {
69+
return row.split(',');
70+
});
71+
load.splice(0, 1);
72+
interface arrayObj {
73+
media_Item_Id: string;
74+
type: string;
75+
role: Role;
76+
}
77+
const obj: arrayObj[] = load.map((row: string[]): arrayObj => {
78+
return { media_Item_Id: row[0], type: row[1], role: row[2] as Role };
79+
});
80+
for await (const row of obj) {
81+
const { media_Item_Id, type, role } = row;
82+
credits.push(new Credit(media_Item_Id, type, role));
83+
}
84+
return credits;
85+
}
86+
}

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
import { Module } from '@nestjs/common';
22
import { AngelicaCastilloLoader } from './angelica_castillo_loader.js';
33
import { AnthonyMaysLoader } from './anthony_mays_loader.js';
4+
import { DavidSmithLoader } from './david_smith_loader.js';
5+
import { DwightBlueLoader } from './dwight_blue_loader.js';
46
import { JamesCapparellLoader } from './james_capparell_loader.js';
7+
import { JosephCaballeroLoader } from './joseph_caballero_loader.js';
58
import { KimberleeHaldaneLoader } from './kimberlee_haldane_loader.js';
69
import { NileJacksonLoader } from './nile_jackson_loader.js';
10+
import { PabloLimonParedesLoader } from './pablo_limon_paredes_loader.js';
11+
import { TommyTranLoader } from './tommy_tran_loader.js';
712
import { XavierCruzLoader } from './xavier_cruz_loader.js';
13+
import { ZionBuchananLoader } from './zion_buchanan_loader.js';
814

915
export const Loaders = Symbol.for('Loaders');
1016

@@ -13,10 +19,16 @@ export const Loaders = Symbol.for('Loaders');
1319
const LOADER_PROVIDERS = [
1420
AnthonyMaysLoader,
1521
AngelicaCastilloLoader,
22+
DavidSmithLoader,
23+
DwightBlueLoader,
1624
JamesCapparellLoader,
25+
JosephCaballeroLoader,
26+
KimberleeHaldaneLoader,
1727
NileJacksonLoader,
28+
PabloLimonParedesLoader,
29+
TommyTranLoader,
1830
XavierCruzLoader,
19-
KimberleeHaldaneLoader,
31+
ZionBuchananLoader,
2032
];
2133

2234
@Module({

0 commit comments

Comments
 (0)