
๐ฏ ์ฃผ๋ฌธ API๋ฅผ promise๋ฅผ ํ์ฉํ์ฌ ๊ตฌํํฉ๋๋ค.
์กฐ๊ฑด์ด ์์ผ๋ฉด ํด๋น ์กฐ๊ฑด์ ๋ง๋ ํ๋ง ์ญ์ ๋๋ฉฐ, ์กฐ๊ฑด์ด ์์ผ๋ฉด ๋ชจ๋ ํ์ด ์ญ์ ๋ฉ๋๋ค.
DELETE FROM ํ
์ด๋ธ๋ช
(WHERE ์กฐ๊ฑด);
ํ ์ด๋ธ์ ์ญ์ ํฉ๋๋ค.
DROP TABLE ํ
์ด๋ธ๋ช
;
๋ชจ๋ ํ์ด ์ญ์ ๋์ง๋ง, ํ ์ด๋ธ ๊ตฌ์กฐ๋ ์ ์ง๋ฉ๋๋ค.
AUTO_INCREMENT ๊ฐ์ ์ด๊ธฐํํฉ๋๋ค.
TRUNCATE TABLE ํ
์ด๋ธ๋ช
;
โ ๏ธ ๋ฐ์ํ ์ค๋ฅ
orderedBooksํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ณ ,ordersํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ์ญ์ ํ๊ณ ์ ํ์์ ๋, ์ธ๋ํค ์ ์ฝ ์กฐ๊ฑด์ด ์ค์ ๋ ํ ์ด๋ธ์๋ ์ญ์ ๋ช ๋ น์ด๋ฅผ ์ธ ์ ์๋ค๋ ์ค๋ฅ์์ต๋๋ค.Error Code: 1701. Cannot truncate a table referenced in a foreign key constraint (`Bookshop`.`orderedBooks`, CONSTRAINT `fk_orderedBooks_orders_id` FOREIGN KEY (`order_id`) REFERENCES `Bookshop`.`orders` (`id`))
๐ก ํด๊ฒฐ ๋ฐฉ์
์ธ๋ ํค ์ ์ฝ ์กฐ๊ฑด์ ์ผ์์ ์ผ๋ก ๋นํ์ฑํ๋ฅผ ํด์ค๋๋ค.
SET FOREIGN_KEY_CHECKS = 0;๊ทธ๋ฆฌ๊ณ ๋ค์
ordersํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ์ธ๋ ํค ์ ์ฝ ์กฐ๊ฑด์ ํ์ฑํ ํด์ค๋๋ค.TRUNCATE TABLE orders; SET FOREIGN_KEY_CHECKS = 1;
์ถ์ฒ:

Method : POST
URL : /orders
HTTP Status Code : 200 Ok
Request Body
{
"items": [ ์ฅ๋ฐ๊ตฌ๋ ๋์ id, ์ฅ๋ฐ๊ตฌ๋ ๋์ id, ...],
"delivery" : {
"address" : "์ฃผ์",
"receiver" : "์ด๋ฆ",
"contact" : "์ ํ๋ฒํธ"
},
"totalQuantity" : ์ด ์๋,
"totalPrice" : ์ด ๊ธ์ก,
"userId" : ์ ์ ์์ด๋
"firstbookTitle" : "๋ํ ๋์ ์ ๋ชฉ"
}
Response Body : x
TODO : ํ์ฌ๋ ํ ํฐ์ผ๋ก ํ์ง ์๊ณ , userId๋ฅผ body๊ฐ์ผ๋ก ๋ฐ์์ ์ฒ๋ฆฌ
Method : GET
URL : /orders
HTTP Status Code : 200 Ok
Request Body :
"userId" : ์ ์ ์์ด๋
[
{
"order_id" : ์ฃผ๋ฌธ id,
"created_at" : "์ฃผ๋ฌธ์ผ์",
"address" : "์ฃผ์",
"receiver" : "์ด๋ฆ",
"contact" : "์ ํ๋ฒํธ",
"book_title" : "๋ํ ์ฑ
์ ๋ชฉ",
"total_quantity" : ์ด ์๋,
"total_price" : ๊ฒฐ์ ๊ธ์ก,
},
{
"order_id" : ์ฃผ๋ฌธ id,
"created_at" : "์ฃผ๋ฌธ์ผ์",
"address" : "์ฃผ์",
"receiver" : "์ด๋ฆ",
"contact" : "์ ํ๋ฒํธ",
"book_title" : "๋ํ ์ฑ
์ ๋ชฉ",
"total_quantity" : ์ด ์๋,
"total_price" : ๊ฒฐ์ ๊ธ์ก,
},
...
]
TODO : ํ์ฌ๋ ํ ํฐ์ผ๋ก ํ์ง ์๊ณ , userId๋ฅผ body๊ฐ์ผ๋ก ๋ฐ์์ ์ฒ๋ฆฌMethod : GET
URL : /orders/:id
HTTP Status Code : 200 Ok
Request Body : x
Response Body :
[
{
"book_id" : ๋์ id,
"title" : "๋์ ์ ๋ชฉ",
"author" : "์๊ฐ",
"price" : ๊ฐ๊ฒฉ,
"quantity" : ์๋
},
{
"book_id" : ๋์ id,
"title" : "๋์ ์ ๋ชฉ",
"author" : "์๊ฐ",
"price" : ๊ฐ๊ฒฉ,
"quantity" : ์๋
},
...
]
const mysql = require('mysql2/promise');
const { StatusCodes } = require('http-status-codes');
const order = async (req, res) => {
const conn = await mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'Bookshop',
dateStrings: true,
});
const { items, delivery, totalQuantity, totalPrice, userId, firstBookTitle } =
req.body;
let sql =
'INSERT INTO deliveries (address, receiver, contact) VALUES (?, ?, ?)';
let values = [delivery.address, delivery.receiver, delivery.contact];
let [result] = await conn.execute(sql, values);
const deliveryId = result.insertId;
sql =
'INSERT INTO orders (book_title, total_quantity, total_price, user_id, delivery_id) VALUES (?, ?, ?, ?, ?)';
values = [firstBookTitle, totalQuantity, totalPrice, userId, deliveryId];
[result] = await conn.execute(sql, values);
const orderId = result.insertId;
sql = 'SELECT book_id, quantity FROM cartItems WHERE id IN (?)';
[orderItems, fields] = await conn.query(sql, [items]);
sql = 'INSERT INTO orderedBooks (order_id, book_id, quantity) VALUES ?';
values = [];
orderItems.forEach((item) => {
console.log(item);
values.push([orderId, item.book_id, item.quantity]);
});
result = await conn.query(sql, [values]);
result = await deleteCartItems(conn, items);
return res.status(StatusCodes.CREATED).json(result[0]);
};
const deleteCartItems = async (conn, items) => {
let sql = `DELETE FROM cartItems WHERE id IN (?)`;
let result = await conn.query(sql, [items]);
return result;
};
const getOrders = async (req, res) => {
const conn = await mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'Bookshop',
dateStrings: true,
});
let sql =
'SELECT orders.id, created_at, address, receiver, contact, book_title, total_quantity, total_price FROM orders LEFT JOIN deliveries ON orders.delivery_id = deliveries.id';
let [rows, fields] = await conn.query(sql);
return res.status(StatusCodes.OK).json(rows);
};
const getOrderDetail = async (req, res) => {
const id = parseInt(req.params.id);
const conn = await mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'Bookshop',
dateStrings: true,
});
let sql =
'SELECT book_id, title, author, price, quantity FROM orderedBooks LEFT JOIN books ON orderedBooks.book_id = books.id WHERE order_id = ?';
let [rows, fields] = await conn.query(sql, id);
return res.status(StatusCodes.OK).json(rows);
};
order : ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ์ฝ์
ํ๊ณ , ์ฅ๋ฐ๊ตฌ๋์์ ์ฃผ๋ฌธ ๋ชฉ๋ก์ ์ญ์ ํฉ๋๋ค.
INSERTINSERTSELECTDELETEgetOrders : orders ํ
์ด๋ธ๊ณผ deliveries ํ
์ด๋ธ์ JOIN ํด์ ๋ฐฐ์ก ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
gerOrderDetail : orderedBooks ํ
์ด๋ธ๊ณผ books ํ
์ด๋ธ์ JOIN ํด์ ์ฃผ๋ฌธ์ ํฌํจ๋ ๋์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
DB ์ฐ๊ฒฐ ๊ฐ์ฒด(conn)๊ฐ ๊ณ์ ์ฌ์ฌ์ฉ๋๋ค ๋ณด๋, ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํ๊ณ ๋ฆฌํฉํ ๋ง์ ํ์์ฑ์ ๋๊ผ์ต๋๋ค.
