Skip to content

Commit

Permalink
Add comment to book & user API
Browse files Browse the repository at this point in the history
 (#11)
  • Loading branch information
shunsei committed Oct 14, 2024
1 parent e8c15f7 commit ab8d99f
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
15 changes: 13 additions & 2 deletions backend/src/api/book.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {

const app = new Hono<{ Bindings: Env }>();

// Google Books APIのレスポンス
type GBAResult = {
items?: [
{
Expand All @@ -38,6 +39,7 @@ type GBAResult = {
];
};

// GET /search のレスポンス
type GoogleBook = {
title: string;
authors: string[];
Expand Down Expand Up @@ -67,30 +69,37 @@ app.get(
delete query['page'];
delete query['limit'];

// 絞り込み条件を作成する
let terms = '';
for (const [key, value] of Object.entries(query)) {
if (value) {
terms += `+${key}:${value}`;
}
}

// クエリパラメータを作成する
const params = new URLSearchParams({
q: terms,
startIndex: String((page - 1) * limit),
maxResults: String(limit),
key: ctx.env.GOOGLE_BOOKS_API_KEY,
});

// Google Books APIにリクエストを送信する
// prettier-ignore
const response = await fetch(`https://www.googleapis.com/books/v1/volumes?${params}`);
const body: GBAResult = await response.json();

// ヒットした書籍を格納する配列
const hitBooks: GoogleBook[] = [];

// 書籍がヒットしたか確認する
if (body.hasOwnProperty('items')) {
// ヒットした書籍を配列に格納する
for (const item of body.items ?? []) {
const book = item.volumeInfo;

// ISBNを取得する
let isbn = undefined;
if (book.hasOwnProperty('industryIdentifiers')) {
// prettier-ignore
Expand All @@ -104,6 +113,7 @@ app.get(
}
}

// 書籍を配列に追加する
hitBooks.push({
title: book.title,
authors: book.authors ?? [],
Expand Down Expand Up @@ -202,6 +212,7 @@ app.post(
const newBook = ctx.req.valid('json');

const db = drizzle(ctx.env.DB);
// データベースから同じISBNの書籍を検索する
const sameBook = await db
.select({
id: bookTable.id,
Expand All @@ -211,13 +222,13 @@ app.post(
.where(eq(bookTable.isbn, newBook.isbn));

if (0 < sameBook.length) {
// すでに同じISBNの本が登録されている
// すでに同じISBNの本が登録されている場合は在庫を増やす
await db
.update(bookTable)
.set({ stock: sameBook[0].stock + 1 })
.where(eq(bookTable.id, sameBook[0].id));
} else {
// 新規登録
// 同じISBNの本が存在しない場合は新規登録する
await db.insert(bookTable).values(newBook);
}

Expand Down
3 changes: 2 additions & 1 deletion backend/src/api/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ app.post(
const newUser = ctx.req.valid('json');

const db = drizzle(ctx.env.DB);
// データベースから同じメールアドレスのユーザを検索する
const sameUser = await db
.select({ id: userTable.id })
.from(userTable)
Expand All @@ -92,7 +93,7 @@ app.post(
409
);
} else {
// 新規登録
// 同じメールアドレスのユーザがいない場合は新規登録する
const hash = await generateHash(newUser.password);
// prettier-ignore
await db
Expand Down

0 comments on commit ab8d99f

Please sign in to comment.