Closes #3 Co-authored-by: Jared He <66887902+jaredjhe@users.noreply.github.com> Reviewed-on: #14 Reviewed-by: Amy <a258wang@csclub.uwaterloo.ca>
This commit is contained in:
parent
2a308e1f37
commit
2040c63311
40
lib/books.ts
40
lib/books.ts
|
@ -2,6 +2,29 @@ import sqlite3 from "sqlite3";
|
||||||
|
|
||||||
const DATABASE_PATH = "catalogue.db";
|
const DATABASE_PATH = "catalogue.db";
|
||||||
|
|
||||||
|
export async function getBook(id: number): Promise<DetailedBook> {
|
||||||
|
const database = new sqlite3.Database(DATABASE_PATH, sqlite3.OPEN_READONLY);
|
||||||
|
|
||||||
|
const sql =
|
||||||
|
"SELECT isbn, lccn, title, subtitle, authors, edition, publisher, publish_year, publish_month, publish_location, pages, pagination, weight, last_updated FROM books WHERE id = ? AND deleted = 0";
|
||||||
|
|
||||||
|
const book: Promise<DetailedBook> = new Promise((resolve, reject) => {
|
||||||
|
database.get(sql, [id], (err: Error | null, book: DetailedBook) => {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
if (book) {
|
||||||
|
resolve(book);
|
||||||
|
} else {
|
||||||
|
reject(new Error("Not a valid id"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
database.close();
|
||||||
|
return book;
|
||||||
|
}
|
||||||
|
|
||||||
export async function getAllBooks() {
|
export async function getAllBooks() {
|
||||||
const database = new sqlite3.Database(DATABASE_PATH, sqlite3.OPEN_READONLY);
|
const database = new sqlite3.Database(DATABASE_PATH, sqlite3.OPEN_READONLY);
|
||||||
|
|
||||||
|
@ -22,6 +45,23 @@ export async function getAllBooks() {
|
||||||
return books;
|
return books;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface DetailedBook {
|
||||||
|
isbn: string | null;
|
||||||
|
lccn: string | null;
|
||||||
|
title: string | null;
|
||||||
|
authors: string | null;
|
||||||
|
edition: string | null;
|
||||||
|
publisher: string | null;
|
||||||
|
publish_year: string | null;
|
||||||
|
publish_month: string | null;
|
||||||
|
publish_location: string | null;
|
||||||
|
pages: string | null;
|
||||||
|
pagination: string | null;
|
||||||
|
weight: string | null;
|
||||||
|
last_updated: Date | null;
|
||||||
|
deleted: boolean | null;
|
||||||
|
}
|
||||||
|
|
||||||
export interface SimpleBook {
|
export interface SimpleBook {
|
||||||
id: number;
|
id: number;
|
||||||
title: string | null;
|
title: string | null;
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
import { getAllBooks, SimpleBook } from "../lib/books";
|
import { getBook, getAllBooks, DetailedBook, SimpleBook } from "../lib/books";
|
||||||
|
|
||||||
export default function Home(props: Props) {
|
export default function Home(props: Props) {
|
||||||
return (
|
return (
|
||||||
|
<div>
|
||||||
<ul>
|
<ul>
|
||||||
{props.books.map((book, idx) => {
|
{props.books.map((book, idx) => {
|
||||||
return (
|
return (
|
||||||
|
@ -13,16 +14,20 @@ export default function Home(props: Props) {
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</ul>
|
</ul>
|
||||||
|
<p>{props.book.title}</p>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
book: DetailedBook;
|
||||||
books: SimpleBook[];
|
books: SimpleBook[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getServerSideProps() {
|
export async function getServerSideProps() {
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
|
book: await getBook(44),
|
||||||
books: await getAllBooks(),
|
books: await getAllBooks(),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
/* Basic Options */
|
/* Basic Options */
|
||||||
"incremental": true,
|
"incremental": true,
|
||||||
"target": "ES6",
|
"target": "ES6",
|
||||||
"module": "esnext",
|
"module": "CommonJS",
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"lib": ["dom", "dom.iterable", "esnext"],
|
"lib": ["dom", "dom.iterable", "esnext"],
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
|
|
Loading…
Reference in New Issue