[Node.js]Cmarket database

이정원·2022년 8월 16일
0

초기세팅

먼저 env.example파일을 .env파일로 바꿔주고,
DATABASE의 값을 초기에 mysql로 만든 db설정 값으로 넣어준다.

test케이스에서 users router파일이 존재해야 한다 했으므로, routes폴더 밑에 users파일을 만들어준다.
/routes/index.js

const express = require('express');
const router = express.Router();
const itemsRouter = require('./items');
const usersRouter = require('./users');

// TODO: Endpoint에 따라 적절한 Router로 연결해야 합니다.
router.use('/items', itemsRouter);
router.use('/users', usersRouter);

module.exports = router;

/routes/users.js

const router = require('express').Router();
const controller = require('./../controllers');

router.get('/:userId/orders', controller.orders.get)
router.post('/:userId/orders', controller.orders.post)

module.exports = router;

유어클래스에 나온 경로대로 users의 파일에 경로를 설정하고 각각 get과 post 메소드를 실행될 때의 코드를 작성해주면 된다.

이제 요청에 따라 응답을 돌려주는 컨트롤러를 작성하면 된다. orders의 get과 post부분을 작성해준다.
userId의 id값을 params로 가져와 userId에 넣어주고 userId값에 따른 응답코드를 작성해주면 된다.
/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 {
          res.status(200).json(result);
        }
      });
    },
  },
  orders: {
    get: (req, res) => {
      const userId = req.params.userId;
      if(!userId){
        return res.status(401).send('XXX')
      }
      models.orders.get(userId, (error, result) => {
        if(error){
          res.status(500).send('error');
        }else{
          res.status(200).json(result);
        }
      })
      // TODO: 요청에 따른 적절한 응답을 돌려주는 컨트롤러를 작성하세요.
    },
    post: (req, res) => {
      const userId = req.params.userId;
      const { orders, totalPrice } = req.body;
      if(!userId || !orders || !totalPrice){
        res.status(400).send('error');
      }else{
      models.orders.post(userId, orders, totalPrice, (error, result) => {
        if(error){
          res.status(400).send('error');
        }else{
          res.status(201).json('ok');
        }
      })
    }
      // TODO: 요청에 따른 적절한 응답을 돌려주는 컨트롤러를 작성하세요.
    },
  },
};

cmarket의 모든 상품을 가져오는 쿼리문을 작성하여 상품리스트를 가져오고, 접속된 유저 즉, 해당 유저가 작성한 모든 주문을 가져오는 쿼리문을 작성하여 주문내역을 가져온다. 그리고 마지막으로 유저가 주문 요청시 데이터베이스에 주문이 생성되는 코드를 작성하면 된다.
/models/index.js

const con = require('../db');
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) => {
      const queryString = `select orders.id, name, image, price, total_price, order_quantity, created_at
      from orders
      join users
      on users.id = orders.user_id
      join order_items
      on orders.id = order_items.order_id
      join items
      on items.id = order_items.item_id
      where users.id = ${userId}`;
      // TODO: 해당 유저가 작성한 모든 주문을 가져오는 함수를 작성하세요
      db.query(queryString, (error, result) => {
        callback(error, result);
      });
    },
    post: (userId, orders, totalPrice, callback) => {
      const queryString = `insert into orders(user_id, total_price) values(${userId}, ${totalPrice})`;
      db.query(queryString, (error, result) => {
        if(error){
          callback(error, null)
        }else{
          const queryString =  `insert into order_items(order_id, item_id, order_quantity) values ?`
          const params = orders.map((el) => {
            return[
              result.insertId,
              el.itemId,
              el.quantity
            ]
          })
          console.log('test2', params)
          return db.query(queryString, [params], (error, result) => {
            callback(error, result)
          })
        }
      })
      // TODO: 해당 유저의 주문 요청을 데이터베이스에 생성하는 함수를 작성하세요
    }
  },
};
profile
Study.log

0개의 댓글