Skip to content

Commit b886316

Browse files
committed
feat(scripts): reorganize scripts, improve fixtures, add fetch covers script
1 parent c8e0a12 commit b886316

File tree

6 files changed

+69
-6
lines changed

6 files changed

+69
-6
lines changed

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
"main": "index.js",
66
"scripts": {
77
"test": "jest",
8-
"start": "ts-node src/index.ts",
8+
"start": "npx serverless offline",
9+
"load-fixtures": "ts-node src/scripts/loadBookFixtures.ts",
10+
"fetch-covers": "ts-node src/scripts/fetchBookCovers.ts",
911
"typeorm": "typeorm-ts-node-commonjs"
1012
},
1113
"author": "amalv",

src/fixtures/booksData.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import books from "./raw/books.json";
2+
import bookCovers from "./raw/bookCovers.json";
3+
4+
const booksData = books.map((book) => ({
5+
...book,
6+
image: bookCovers[book.title],
7+
}));
8+
9+
export default booksData;

src/fixtures/raw/bookCovers.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"1984": "http://books.google.com/books/content?id=kb7dDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api",
3+
"Dune": "http://books.google.com/books/content?id=Q5HCDgAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api",
4+
"Fahrenheit 451": "http://books.google.com/books/content?id=OYtkbGl2j0sC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api",
5+
"A Wrinkle in Time": "http://books.google.com/books/content?id=r119-dYq0mwC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api",
6+
"Brave New World": "http://books.google.com/books/content?id=TIJ5EAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api",
7+
"The War of the Worlds": "http://books.google.com/books/content?id=v8eNCgAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api",
8+
"The Time Machine": "http://books.google.com/books/content?id=f3H6SMzlQQwC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api",
9+
"Starship Troopers": "http://books.google.com/books/content?id=PuzsBAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api",
10+
"The Hunger Games": "http://books.google.com/books/content?id=Yz8Fnw0PlEQC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api",
11+
"Ender's Game": "http://books.google.com/books/content?id=Ojqi8KbWuLwC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api"
12+
}

src/fixtures/books.ts renamed to src/fixtures/raw/books.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export const booksData = [
1+
[
22
{
33
"title": "Dune",
44
"author": "Frank Herbert",

src/scripts/fetchBookCovers.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import https from "https";
2+
import { writeFile } from "fs/promises";
3+
import { booksData } from "../fixtures/books";
4+
5+
const fetchBookCover = (book) =>
6+
new Promise((resolve, reject) => {
7+
https
8+
.get(
9+
`https://www.googleapis.com/books/v1/volumes?q=intitle:${book.title}+inauthor:${book.author}&fields=items(volumeInfo(imageLinks))&maxResults=1`,
10+
(res) => {
11+
let data = "";
12+
13+
res.on("data", (chunk) => {
14+
data += chunk;
15+
});
16+
17+
res.on("end", () => {
18+
const coverUrl =
19+
JSON.parse(data).items[0]?.volumeInfo?.imageLinks?.thumbnail;
20+
if (coverUrl) {
21+
resolve({ [book.title]: coverUrl });
22+
}
23+
});
24+
}
25+
)
26+
.on("error", (err) => {
27+
reject(err);
28+
});
29+
});
30+
31+
const fetchBookCovers = async () => {
32+
const bookCovers = await Promise.all(booksData.map(fetchBookCover));
33+
const output = Object.assign({}, ...bookCovers);
34+
await writeFile(
35+
"./src/fixtures/bookCovers.json",
36+
JSON.stringify(output, null, 2)
37+
);
38+
};
39+
40+
fetchBookCovers();

src/index.ts renamed to src/scripts/loadBookFixtures.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { faker } from "@faker-js/faker";
2-
import { AppDataSource } from "./data-source";
3-
import { User } from "./entity/User";
4-
import { Book } from "./entity/Book";
5-
import { booksData } from "./fixtures/books";
2+
import { AppDataSource } from "../data-source";
3+
import { User } from "../entity/User";
4+
import { Book } from "../entity/Book";
5+
import booksData from "../fixtures/booksData";
66

77
const initializeBooks = async (bookData) => {
88
const book = new Book();

0 commit comments

Comments
 (0)