node-cron / dayjs 를 활용해서 회원 탈퇴시 일정 시간 지난뒤에 계정 삭제

박선우·2022년 7월 7일
0

로직 구현

목록 보기
2/4
post-thumbnail

회원 탈퇴시로 부터 3개월 지나면 db에서 제거 하는 로직 구현 node-cron을 사용함

const cron = require('node-cron');
const dayjs = require('dayjs');

const task = cron.schedule(
  '* * * * * *',
  async () => {
    try {
      const user = await User.findAll({
        where: {
          deletedAt: {
            [Op.ne]: null, //not null ( !null 값을 뽑아옴)
          },
        },
      });

      for (let i = 0; i < user.length; i++) {
        const stopdate = dayjs(user[i].deletedAt);
        // db안에 저장되있는 회원 탈퇴시 시간
        const startdate = dayjs(new Date());
		// 현재 시간
        if (
          // 현재 시간 === db안에 삭제되어 있는시간에 3달이 더한 값이 일치 할때
          startdate.format('YYYY-MM-DD HH:mm:ss') ===
          stopdate.add(3, 'M').format('YYYY-MM-DD HH:mm:ss')
        ) {
          await User.destroy({ where: { userId: user[i].userId } });
          // db안에서 삭제 하는 스케줄 작성
        }
        return true;
      }
    } catch (error) {
      console.log(error);
    }
  },
  {
    scheduled: false,
  }
);

task.start();

1초마다 서버에 요청을 보내서 삭제하는 록직을 구현, 이렇게 로직을 짜고나니 서버에 과부화 오지 않겠냐는 피드백을 받아서

const task = cron.schedule(
  '* 0 * * *', // 수정
  async () => {
    try {
      const user = await User.findAll({
        where: {
          deletedAt: {
            [Op.ne]: null,
          },
        },
      });
      for (let i = 0; i < user.length; i++) {
        const stopdate = dayjs(user[i].deletedAt);
        const startdate = dayjs(new Date());

        if (
          startdate.format('YYYY-MM-DD HH:mm:ss') > // 수정
          stopdate.add(3, 'M').format('YYYY-MM-DD HH:mm:ss')
        ) {
          await User.destroy({ where: { userId: user[i].userId } });
        }
        return true;
      }
    } catch (error) {
      console.log(error);
    }
  },
  {
    scheduled: false,
  }
);

task.start();

수정 부분을 매일 00:00(12시) 기준으로 3개월 지난 회원을 일괄적으로 하루에 한번 삭제 하는 로직으로 변경했다

profile
코린이 열심히 배우자!

0개의 댓글