본문 바로가기
타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js)/TIL

웹풀사이클 18일차 - 객체, 유튜브 채널 api 설계,

by 슈크림 붕어빵 2023. 12. 17.

객체 

객체인지 확인하기 num.constructor == Object

console.log(num.constructor == Object);

 

num, string, obj 확인해보기

const obj = {};
const num = 1;
const str1 = "str";

console.log(num.constructor == Object); //false
console.log(obj.constructor == Object); //true
console.log(str1.constructor == Object); //false

 

숫자는 객체가 아니다.

 

 

객체의 길이 확인하기 => 빈 객체인지 검사 - Object.keys(obj).length

const obj = {};
const obj2 = {
  msg: "메세지",
};
const num = 1;
const str1 = "str";
const str2 = "";

console.log(Object.keys(obj).length); //0
console.log(Object.keys(obj2).length); //1
console.log(Object.keys(num).length); //0 
console.log(Object.keys(str1).length); //3
console.log(Object.keys(str2).length); //1

 

채널 api 설계

 

채널

  • 채널 생성
  • 채널 수정
  • 채널 삭제

로그인 페이지 : 로그인 api

회원가입 페이지: 회원가입 api

마이페이지: 회원정보 조회api, 회원탈퇴 api

 

1. 채널 생성 - post, /channels

 

req: body{channelName,description, userIndex }

res 201: "앞으로의 채널 운영을 응원합니다."

 

2. 채널 수정 - put, /channels/:id

req: params.id, body{channelName, description, userIndex }

res 200: "채널 정보가 성공적으로 수정되었습니다."

 

3. 채널 삭제 - delete, /channels/:id

req: params.id

res 200: "삭제되었습니다."

 

4. 해당 회원 전체 채널 조회 - get, /channels

req: body{ userIndex  }

res 200: 채널 전체 데이터

 

5. 개별 채널 정보 조회 - get, /channels/:id

req: params.id

res 200: 채널 개별 데이터

 

userIndex는 회원Map의 index 번호이다. userIndex 를 이용해 이를 키값으로 이용하는 조건으로 구현했다.

예를 들어 채널을 생성할 때도 userIndex 를 저장한다. body의 userIndex를 이용해 맵에서 해당 userIndex를 가진 채널을 검색했다.

 

아직은 user와 연결이 되지 않아서 user부분에서 채널을 관리하지 않았기 때문에 이렇게 구현하였으나 연결된다면 user에서 채널을 관리하도록 하는게 좋을 것 같다. 

 

const express = require("express");

const app = express();
app.listen(3000);
app.use(express.json());

let channels = new Map();
let index = 1;

app
  .route("/channels")
  .post((req, res) => {
    let { channelName, description, userIndex } = req.body;
    if (channelName && description && userIndex) {
      channels.set(index++, req.body);
      res.status(201).json({
        message: "채널이 성공적으로 생성되었습니다.",
      });
    } else {
      res.status(400).json({
        message: "모든 내용을 보내주세요",
      });
    }
  })
.get((req, res) => {
    //채널 조회
    let { userIndex } = req.body;
    let userChannel = [];

    if (userIndex) {
      //userIndex를 받은 경우 해당 회원
      channels.forEach((value) => {
        if (value.userIndex == userIndex) {
          userChannel.push(value);
        }
      });
      if (channels.size > 0) {
        res.status(200).json(userChannel);
      } else {
        res.status(404).json({ message: "해당 회원의 채널이 없습니다." });
      }
    } else {
      //userIndex를 받지 않은 경우 전체 회원 조회
      res.status(400).json([...channels.values()]);
    }
  });

app
  .route("/channels/:id")
  .put((req, res) => {
    //채널 수정
    let { id } = req.params;
    id = parseInt(id);
    let channel = channels.get(id);
    let { userIndex, channelName, description } = req.body;
    if (channel) {
      if (userIndex && channelName && description) {
        channels.set(id, req.body);
        res.status(200).json({ message: "성공적으로 수정되었습니다." });
      } else {
        res.status(400).json({
          message: "userIndex와 채널명, 채널 설명은 필수 항목입니다.",
        });
      }
    } else {
      res.status(400).json({
        message: `해당 id의 채널이 없습니다.`,
      });
    }
  })
  .delete((req, res) => {
    //채널 삭제
    let { id } = req.params;
    id = parseInt(id);
    let channel = channels.get(id);
    if (channel) {
      channels.delete(id);
      res.status(200).json({
        message: ` ${channel.channelName}채널이 성공적으로 삭제되었습니다.`,
      });
    } else {
      res.statue(400).json({
        message: "해당 id의 채널을 찾을 수 없습니다.",
      });
    }
  })
  .get((req, res) => {
    //개별 채널 조회
    let { id } = req.params;
    id = parseInt(id);
    let channel = channels.get(id);

    if (channel) {
      res.status(200).json(channel);
    } else {
      res.status(400).json({
        message: "채널 정보를 찾을 수 없습니다.",
      });
    }
  });

 

참고: 전체 채널 조회시