Giter VIP home page Giter VIP logo

bodylike's Introduction

Project : BODYLIKE


BODYLIKE 메인페이지



개발 기간


  • 2022-08-16 ~ 2022.08.26 (11일)


기술 스택




구성원 소개




🎯 구현 API 및 업무 소개

이지현

  • ERD 모델링
  • BULK INSERT
  • 리뷰 API (GET/ POST/ DELETE/ PATCH)
    • transaction을 이용한 pagination 구현
  • 장바구니 담기 (상세페이지) API (POST)
    • 기존 데이터 베이스 검사를 통하여 추가로 담기 기능 구현

  • BULK INSERT 비동기적 구현
//uploader.js

const dotenv = require("dotenv");
dotenv.config();
const { DataSource, UsingJoinColumnIsNotAllowedError } = require("typeorm");
const fs = require("fs");
const appDataSource = new DataSource({
  type: process.env.TYPEORM_CONNECTION,
  host: process.env.TYPEORM_HOST,
  port: process.env.TYPEORM_PORT,
  username: process.env.TYPEORM_USERNAME,
  password: process.env.TYPEORM_PASSWORD,
  database: process.env.TYPEORM_DATABASE
});

const initializingDataSource = async () => {
  await appDataSource.initialize()
}

const csv = fs.readFileSync("./products.csv", "utf-8");
const rows = csv.split("\n");
rows.shift();

const dataArr = rows.map((val) => {
  let arr = val.split(",");
  return arr;
});

const sql = 'INSERT INTO products (id,name,price,thumbnail_image_url,stock,category_id) VALUES ?';
const bulkInsert = async() => { 
  await initializingDataSource()
  await appDataSource.query(sql, [dataArr])
};

bulkInsert();
  • 리뷰 API
    • transaction을 이용한 pagination 구현
const reviewList = async (start, pageSize, productId) => {
  const queryRunner = appDataSource.createQueryRunner();
  await queryRunner.connect();

  await queryRunner.startTransaction();

  try {
    const reviewList = await queryRunner.query(
      `SELECT 
                r.id, 
                r.contents, 
                r.created_at, 
                u.name 
            FROM reviews r 
            LEFT JOIN users u 
            on r.user_id = u.id 
            WHERE r.product_id = ${productId}
            LIMIT ${start},${pageSize}`
    );
    const reviewCount = await queryRunner.query(
      `SELECT count(*) as reviewCount
              FROM reviews
              WHERE product_id = ${productId}`
    );

    await queryRunner.commitTransaction();
    return [reviewList, reviewCount];
  } catch (err) {
    await queryRunner.rollbackTransactrsion();
  } finally {
    await queryRunner.release();
  }
};

프로젝트 하면서 집중했던 것

  • RESTful endpoint
  • DATABASE modeling


📚 팀 프로젝트 자료


ERD


BODYLIKE ERD


TERLLO


BODYLIKE TRELLO


API 명세서


BODYLIKE API

👉 API 명세서 보러가기

bodylike's People

Contributors

bigfanoftim avatar leej1hyun avatar sk8ilar avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.