
๐ฏ ์ฃผ๋ฌธ API๋ฅผ ์ค๊ณํ๊ณ ์ฝ๋๋ก ๊ตฌํํฉ๋๋ค.
id integer [primary key]
book_title varchar
total_quantity integer
total_price integer
created_at timestamp
user_id integer
delivery_id integer
id integer [primary key]
order_id integer
book_id integer
quantity integer
id integer [primary key]
address varchar
receiver varchar
contact varchar
ํน์ ํ ์ด๋ธ์์ ํ์ฌ ์กด์ฌํ๋ ๊ฐ์ฅ ํฐ PK ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค.
SELECT MAX(์นผ๋ผ๋ช
) FROM ํ
์ด๋ธ์ด๋ฆ;
๐ค ์
Last_insert_id()๋ ์ฌ์ฉํ์ง ์์๊น?SELECT Last_insert_id();โ ํ ์ธ์ ์์๋ง ์๋ : ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ INSERTํ ๋ฐ์ดํฐ๋ ๋ณด์ด์ง ์๊ฒ ๋ฉ๋๋ค.
( ์ธ์ : DB์ ์ฐ๊ฒฐ๋ ๊ฐ๊ฐ์ ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)๊ฐ ๊ฐ์ง ๋ ๋ฆฝ์ ์ธ ์ฐ๊ฒฐ ์ ๋ณด )โ ๋์์ฑ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ : A ์ฌ์ฉ์๊ฐ
INSERT INTO orders๋ฅผ ์คํํ๋ฉดLAST_INSERT_ID()๋ A๊ฐ ์ถ๊ฐํ ํ์ ID๋ง ๋ฐํ๋ฉ๋๋ค.โ ํ ์ด๋ธ์ ์ง์ ํ ์ ์์
์ฝ๋์์๋ result๊ฐ์ inserId ๊ฐ์ ํ์ฉํด์ PK๋ฅผ ๊ฐ์ ธ์ต๋๋ค.

Method : POST
URL : /orders
HTTP Status Code : 200 Ok
Request Body
{
"item": [
{
"cartItemId" : ์ฅ๋ฐ๊ตฌ๋ ๋์ id,
"bookId" : ๋์ id,
"quantity" : ์๋
},
{
"cartItemId" : ์ฅ๋ฐ๊ตฌ๋ ๋์ id,
"bookId" : ๋์ id,
"quantity" : ์๋
}
],
"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 : x
Response Body :
[
{
"order_id" : ์ฃผ๋ฌธ id,
"created_at" : "์ฃผ๋ฌธ์ผ์",
"delivery" : {
"address" : "์ฃผ์",
"receiver" : "์ด๋ฆ",
"contact" : "์ ํ๋ฒํธ",
},
"bookTitle" : "๋ํ ์ฑ
์ ๋ชฉ",
"totalPrice" : ๊ฒฐ์ ๊ธ์ก,
"totalQuantity" : ์ด ์๋
},
{
"order_id" : ์ฃผ๋ฌธ id,
"created_at" : "์ฃผ๋ฌธ์ผ์",
"delivery" : {
"address" : "์ฃผ์",
"receiver" : "์ด๋ฆ",
"contact" : "์ ํ๋ฒํธ",
},
"bookTitle" : "๋ํ ์ฑ
์ ๋ชฉ",
"totalPrice" : ๊ฒฐ์ ๊ธ์ก,
"totalQuantity" : ์ด ์๋
},
...
]
Method : GET
URL : /orders/:id
HTTP Status Code : 200 Ok
Request Body : x
Response Body :
[
{
"bookId" : ๋์ id,
"bookTitle" : "๋์ ์ ๋ชฉ",
"author" : "์๊ฐ",
"price" : ๊ฐ๊ฒฉ,
"quantity" : ์๋
},
{
"bookId" : ๋์ id,
"bookTitle" : "๋์ ์ ๋ชฉ",
"author" : "์๊ฐ",
"price" : ๊ฐ๊ฒฉ,
"quantity" : ์๋
},
...
]
const conn = require('../mariadb');
const { StatusCodes } = require('http-status-codes');
const order = (req, res) => {
const { items, delivery, totalQuantity, totalPrice, userId, firstBookTitle } =
req.body;
let deliveryId;
let orderId;
let sql =
'INSERT INTO deliveries (address, receiver, contact) VALUES (?, ?, ?)';
let values = [delivery.address, delivery.receiver, delivery.contact];
conn.query(sql, values, (err, result) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
deliveryId = result.insertId;
return res.status(StatusCodes.CREATED).json(result);
});
sql =
'INSERT INTO orders (book_title, total_quantity, total_price, user_id, delivery_id) VALUES (?, ?, ?, ?, ?)';
values = [firstBookTitle, totalQuantity, totalPrice, userId, deliveryId];
conn.query(sql, values, (err, result) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
orderId = result.insertId;
return res.status(StatusCodes.CREATED).json(result);
});
sql = 'INSERT INTO orderedBooks (order_id, book_id, quantity) VALUES ?';
values = [];
items.forEach((item) => {
values.push([orderId, item.bookId, item.quantity]);
});
conn.query(sql, [values], (err, result) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.CREATED).json(result);
});
};
order : ์ฃผ๋ฌธ ๋ฐ์ดํฐ๋ฅผ DB์ ์ ์ฅํ๋ ํจ์
deliveries ํ
์ด๋ธ์ ๋ฐฐ์ก ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
deliveryId = result.insertId; ๋ก ์ฝ์
ํ ๋ฐฐ์ก ๋ฐ์ดํฐ์ PK๋ฅผ ๊ฐ์ ธ์ต๋๋ค. orders ํ
์ด๋ธ์ ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
orderId = result.insertId; ๋ก ์ฝ์
ํ ์ฃผ๋ฌธ ๋ฐ์ดํฐ์ PK๋ฅผ ๊ฐ์ ธ์ต๋๋ค.orderedBooks ํ
์ด๋ธ์ ์ฃผ๋ฌธ๋ ์ฑ
๋ชฉ๋ก์ ์ ์ฅํฉ๋๋ค.
items ๋ฐฐ์ด์ ์ํํ๋ฉด์ [orderId, bookId, quantity] ํ์์ผ๋ก ์ ์ฅํฉ๋๋ค.ํ ํจ์์์ ์ฌ๋ฌ ๊ฐ์ SQL ๋ฌธ์ ์คํํ๋ ๊ณผ์ ์์, VALUES๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก ์ ๋ฌํ๋ ๋ฐฉ์์ ์ฒ์ ์ ์ฉํด์ ํท๊ฐ๋ ธ์ง๋ง, SQL ๋ฌธ์ ํจ์จ์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฒ์ ์ตํ ์ ์์ด ์ข์์ต๋๋ค.