728x90
이번 스프린트에서는 쇼핑몰 애플리케이션 Cmarket의 데이터베이스를 구축합니다. 모든 요청은 반드시 데이터베이스를 이용해야 합니다.
controllers/index.js
더보기
const models = require('../models')
module.exports = {
items: {
get: (req, res) => {
models.items.get((error, result) => {
if (error) {
res.status(500).send('Internal Server Error')
} else {
// GET /items 요청에 성공했을 경우 상태코드 200을 보내야합니다.
res.status(200).json(result)
}
})
},
},
// orders controller에는 get, post 메소드가 각각 존재해야 합니다
orders: {
get: (req, res) => {
const userId = req.params.userId
console.log(req.query)
console.log(req.params)
// TODO: 요청에 따른 적절한 응답을 돌려주는 컨트롤러를 작성하세요.
models.orders.get(userId, (error, result) => {
if (error) {
res.status(500).send('Internal Server Error')
} else {
// GET /users/:userId/orders 요청에 성공했을 경우 상태코드 200을 보내야합니다.
res.status(200).json(result)
}
})
},
post: (req, res) => {
const userId = req.params.userId
const { orders, totalPrice } = req.body
console.log(req.query)
console.log(req.params)
// TODO: 요청에 따른 적절한 응답을 돌려주는 컨트롤러를 작성하세요.
if (!orders || !totalPrice) res.status(400).send('Bed Request')
else {
models.orders.post(userId, orders, totalPrice, (error, result) => {
if (error) {
// POST /users/:userId/orders 요청에서 클라이언트가 잘못된 요청을 했을 경우 상태코드 400을 보내야합니다.
res.status(400).send('Internal Server Error')
} else {
// POST /users/:userId/orders 요청에 성공했을 경우 상태코드 201을 보내야합니다.
res.status(201).json(result)
}
})
}
},
},
}
models/index.js
더보기
const db = require('../db')
module.exports = {
items: {
get: callback => {
// TODO: Cmarket의 모든 상품을 가져오는 함수를 작성하세요
const queryString = `SELECT * FROM items`
db.query(queryString, (error, result) => {
callback(error, result)
})
},
},
orders: {
get: (userId, callback) => {
// TODO: 해당 유저가 작성한 모든 주문을 가져오는 함수를 작성하세요
const queryString = `SELECT orders.id, orders.total_price, order_items.order_quantity, items.name, items.price, items.image, orders.created_at
FROM orders JOIN order_items ON orders.id = order_items.order_id
JOIN items ON order_items.item_id = items.id
WHERE orders.user_id = ${userId}`
db.query(queryString, (error, result) => {
callback(error, result)
})
},
post: (userId, orders, totalPrice, callback) => {
// TODO: 해당 유저의 주문 요청을 데이터베이스에 생성하는 함수를 작성하세요
const sql1 = `INSERT INTO orders (user_id, total_price) VALUES (${userId}, ${totalPrice});`
db.query(sql1, (err, result) => {
if (result && orders && totalPrice && userId) {
const sql2 = `INSERT INTO order_items (order_id, item_id, order_quantity) VALUES ?`
const params = orders.map(obj => [
result.insertId,
obj.itemId,
obj.quantity,
])
db.query(sql2, [params], (err, result) => {
callback(err, result)
})
} else callback(err, result)
})
},
},
}
routes/index.js
더보기
const express = require('express')
const router = express.Router()
const itemsRouter = require('./items')
const userRouter = require('./users')
// TODO: Endpoint에 따라 적절한 Router로 연결해야 합니다.
router.use('/items', itemsRouter)
router.use('/users', userRouter)
module.exports = router
routes/items.js
더보기
const router = require('express').Router()
const controller = require('./../controllers')
// GET /items Router와 Controller를 연결합니다.
router.get('/', controller.items.get)
module.exports = router
routes/users.js
더보기
const router = require('express').Router()
const controller = require('./../controllers')
// GET /users Router와 Controller를 연결합니다.
// users router 파일이 존재해야 합니다
// GET /users는 orders controller의 get 메소드를 실행합니다
router.get('/:userId/orders', controller.orders.get)
// POST /users는 orders controller의 post 메소드를 실행합니다
router.post('/:userId/orders', controller.orders.post)
module.exports = router
728x90