본문 바로가기

portfolio

레디스(redis)와 익스프레스(express js)로 프로모션쿠폰 API생성

 
레디스는 키-값 형식이어서 객체로 저장후 =>  json.stringify() 메서드를 사용해  json데이터로 직렬화시켜준다.
 

app.post("/couponOn", async (req, res) => {
  try {
    // 본문에 post요청할때 
    const { discountAmount, ttl } = req.body;

    if (!discountAmount || discountAmount <= 0) {
      return res.status(400).json({ error: "유효한 금액을 입력하세요." });
    }

    const couponId = uuidv4(); // 고유 쿠폰 ID 생성
    // 객체로 저장
    const couponData = { discountAmount, createdAt: new Date() };
    console.log(couponData)
    
    //레디스는 문자열이라 객체를 json으로 직렬화해준다 그리고 body에 받은 ttl로 시간제한
    await redisClient.setEx(couponId, ttl, JSON.stringify(couponData));

    res.status(201).json({
      message: "쿠폰이 생성되었습니다.",
      couponId,
      discountAmount,
      ttl,
    });

.......................

 
 
 
할인금액을 연산시켜주려면 parse() 메서드를 사용해 json데이터를 다시 객체로 역직렬화 해준다.
 

  if (couponData) {
    const origin = 70000
    // 직렬화한 json 데이터를 다시 parse메서드로 역직렬화후 객체로 만들어서 할인된금액으로 연산
    const parsed = JSON.parse(couponData)
    const discountAmount = parsed.discountAmount
    const disPrice = Math.max(0, origin - discountAmount)
    console.log(disPrice)
    return res.status(200).json({message:"쿠폰적용", origin,discountAmount,disPrice})
    
  } else{
    return res.status(404).json({message:"쿠폰만료"}) 
  }

 
 
결과화면 
 

쿠폰생성, 시간제한은 1분

 
 

쿠폰적용

 

1분후 쿠폰만료

 
 

레디스 조회, 1분만료후 키값이 자동 삭제된다