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";
|
||||
|
||||
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() {
|
||||
const database = new sqlite3.Database(DATABASE_PATH, sqlite3.OPEN_READONLY);
|
||||
|
||||
|
@ -22,6 +45,23 @@ export async function getAllBooks() {
|
|||
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 {
|
||||
id: number;
|
||||
title: string | null;
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import React from "react";
|
||||
|
||||
import { getAllBooks, SimpleBook } from "../lib/books";
|
||||
import { getBook, getAllBooks, DetailedBook, SimpleBook } from "../lib/books";
|
||||
|
||||
export default function Home(props: Props) {
|
||||
return (
|
||||
<div>
|
||||
<ul>
|
||||
{props.books.map((book, idx) => {
|
||||
return (
|
||||
|
@ -13,16 +14,20 @@ export default function Home(props: Props) {
|
|||
);
|
||||
})}
|
||||
</ul>
|
||||
<p>{props.book.title}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
interface Props {
|
||||
book: DetailedBook;
|
||||
books: SimpleBook[];
|
||||
}
|
||||
|
||||
export async function getServerSideProps() {
|
||||
return {
|
||||
props: {
|
||||
book: await getBook(44),
|
||||
books: await getAllBooks(),
|
||||
},
|
||||
};
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
/* Basic Options */
|
||||
"incremental": true,
|
||||
"target": "ES6",
|
||||
"module": "esnext",
|
||||
"module": "CommonJS",
|
||||
"moduleResolution": "node",
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"sourceMap": true,
|
||||
|
|
Loading…
Reference in New Issue