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
+ }
0 commit comments