|
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'; |
| 1 | +import { Module } from '@nestjs/common'; |
| 2 | +import { DylanLaffertysLoader } from './dylan_lafferty_loaders.js'; |
5 | 3 |
|
6 |
| -export class JustinEklundLoader implements Loader { |
7 |
| - getLoaderName(): string { |
8 |
| - return 'justineklund'; |
9 |
| - } |
| 4 | +import { AnthonyMaysLoader } from './anthony_mays_loader.js'; |
| 5 | +import { JustinEklundLoader } from './justin_eklund_loader.js'; |
10 | 6 |
|
11 |
| - async loadData(): Promise<MediaItem[]> { |
12 |
| - const credits = await this.loadCredits(); |
13 |
| - const mediaItems = await this.loadMediaItems(); |
14 |
| - const mediamap = new Map<string, MediaItem>(); |
15 |
| - mediaItems.forEach((mediaItem) => { |
16 |
| - mediamap.set(mediaItem.getId(), mediaItem); |
17 |
| - }); |
18 |
| - for (const mediaitem of mediaItems) { |
19 |
| - mediamap.set(mediaitem.getId(), mediaitem); |
20 |
| - } |
21 |
| - for (const credit of credits) { |
22 |
| - const mediaItem = mediamap.get(credit.getMediaItemId()); |
23 |
| - |
24 |
| - if (mediaItem) { |
25 |
| - mediaItem.addCredit(credit); |
26 |
| - } |
27 |
| - } |
28 |
| - console.log( |
29 |
| - `Loaded ${credits.length} credits and ${mediaItems.length} media items`, |
30 |
| - ); |
31 |
| - |
32 | 7 |
|
33 |
| - return Array.from(mediamap.values()); |
34 |
| - } |
| 8 | +export const Loaders = Symbol.for('Loaders'); |
35 | 9 |
|
36 |
| - async loadMediaItems(): Promise<MediaItem[]> { |
37 |
| - const mediaItems = []; |
38 |
| - const readable = fs |
39 |
| - .createReadStream('data/media_items.csv', 'utf-8') |
40 |
| - .pipe(csv()); |
41 |
| - for await (const row of readable) { |
42 |
| - const { id, type, title, year } = row; |
43 |
| - mediaItems.push(new MediaItem(id, title, type, year, [])); |
44 |
| - } |
45 |
| - return mediaItems; |
46 |
| - } |
| 10 | +const LOADER_PROVIDERS = [AnthonyMaysLoader, DylanLaffertysLoader,JustinEklundLoader]; |
47 | 11 |
|
48 |
| - async loadCredits(): Promise<Credit[]> { |
49 |
| - const credits = []; |
50 |
| - const readable = fs |
51 |
| - .createReadStream('data/credits.csv', 'utf-8') |
52 |
| - .pipe(csv()); |
53 |
| - for await (const row of readable) { |
54 |
| - const { media_item_id, role, name } = row; |
55 |
| - credits.push(new Credit(media_item_id, name, role)); |
56 |
| - } |
57 |
| - return credits; |
58 |
| - } |
59 |
| -} |
60 |
| -// got assistance from ai and copilot aswell as Meiko ,Mercedes and Dillon |
| 12 | +@Module({ |
| 13 | + providers: [ |
| 14 | + ...LOADER_PROVIDERS, |
| 15 | + { |
| 16 | + provide: Loaders, |
| 17 | + useFactory: (...args) => [...args], |
| 18 | + inject: LOADER_PROVIDERS, |
| 19 | + }, |
| 20 | + ], |
| 21 | + exports: [Loaders], |
| 22 | +}) |
| 23 | +export class LoadersModule {} |
0 commit comments