Cmarket Database

김범주·2022년 4월 14일
0

Code Review

목록 보기
13/15

CREATE DATABASE cmarket;
└cmarket이라는 데이터베이스 생성
mysql -u root -p < server/schema.sql -Dcmarket
└server 폴더의 schema.sql 파일을 통해 테이블 생성
mysql -u root -p < server/seed.sql -Dcmarket
└server 폴더의 seed.sql 파일을 통해 테이블에 데이터 저장

controller/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;
      // TODO: 요청에 따른 적절한 응답을 돌려주는 컨트롤러를 작성하세요.
      models.orders.get(userId, (err, result) => {
        if (err) {
          res.status(500).send('error')
        }
        else {
          res.status(200).json(result)
        }
      });
    },
    post: (req, res) => {
      const userId = req.params.userId;
      const { orders, totalPrice } = req.body;
      // TODO: 요청에 따른 적절한 응답을 돌려주는 컨트롤러를 작성하세요.
      if(!orders || !totalPrice || !userId) {
        return res.status(400).send('error');
      }
      else{
      models.orders.post(userId, orders, totalPrice, (err, result) => {
        if (err) {
          return res.status(500).send('error')
        }
        else {
          return 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, name, image, price, total_price, order_quantity, created_at 
      from orders
      left join users
      on users.id = orders.user_id
      left join order_items
      on orders.id = order_items.order_id
      left join items
      on items.id = order_items.item_id
      where users.id = ?;`
      const params=[userId];
      db.query(queryString, [params], (err, result) => {
        callback(err, result)
      })
    },
    post: (userId, orders, totalPrice, callback) => {
      // TODO: 해당 유저의 주문 요청을 데이터베이스에 생성하는 함수를 작성하세요
      const queryString = `INSERT INTO orders (user_id, total_price) VALUES ?;`
      const params = [[userId, totalPrice]];
      db.query(queryString, [params], (err, result) => {
      if (result) {
        const queryString2 = `insert into order_items (order_id, item_id, order_quantity) values ?;`;
        const params2 = orders.map(el => 
          [result.insertId, el.itemId, el.quantity]
        )
        return db.query(queryString2, [params2], (err, result) => {    
          callback(err, result)
      });
      }
      callback(err, result)
    });
    },
  },
};

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');

// GET /items Router와 Controller를 연결합니다.
router.get('/:userId/orders', controller.orders.get);
router.post('/:userId/orders', controller.orders.post)
module.exports = router;
profile
개발꿈나무

0개의 댓글