10/28 (월) 개발 일지

정다롱·2024년 10월 29일

내일배움캠프 TIL

목록 보기
36/39

오늘은 뭔가 지치는 날이라 거창하게 글은 못쓸 것 같고 뭐 했는지 적는 정도로 기록...

회원 탈퇴 완성

회원 탈퇴 기능이 드디어 완성됐다.

  const deleteUserHandler = async () => {
    setIsModalOpen(false);
    await deleteUser();
    await queryClient.invalidateQueries({ queryKey: ["user", "session"] });
    router.push("/");
  };

기존에 탈퇴 후 유저 정보가 남고 로그아웃 처리가 안되어서 조금 꼬이는 문제가 있었는데, 삭제 => 로그아웃 => 세션 정보 초기화 => 메인 페이지 이동 이렇게 변경함으로써 깔끔하게 해결되었다!

이렇게 기능 하나, 문제 하나 해결할 때 마다 대단한 게 아니어도 내 실력이 차근차근 늘어가고 있다는 기분이 들어서 뿌듯하고 기쁘다. 생각보다 회원 탈퇴에 대한 글? 같은 것도 많이 없어서 공식 문서랑 블로그 하나 보고 한땀한땀 짰는데...🥹

타이머 기능 구상

제일 걱정이 많았던 타이머 기능. 마이 페이지를 최대한 빨리 끝내려고한 것도 다 이것 때문이다.

  1. 각 strudy 마다 캘린더에 일정을 등록하면 캘린더 테이블에 날짜, 시작 시간, 종료 시간이 등록됨
  2. 만약 study 일정이 있는 날이라면 유저에게 타이머가 보임
  3. 타이머는 시작과 일시정지가 가능하고 0부터 시작하는 누적시간형
  4. 스터디의 일정에 등록된 시간에만 활성화됨
  5. 타이머는 유저가 개인으로 갖고 스터디 시간을 기록할 수 있음
  6. 새로고침하거나 다른 페이지에 다녀와도 타이머 정보가 유지되어야함
  7. 스터디의 일정 시간이 끝나면 자동으로 종료됨 -> 종료 될 때 유저 테이블에 스터디 타임으로 저장(누적 시간으로 쌓을 것임)
  8. 하루가 지나면 다시 0으로 초기화

구현 사항은 이정도가 있는데 직접 어떻게 구현해야하나 한줄씩 적으면서 보니까 크게 어렵진 않아보이고... 제일 복병은 supabase 리얼타임 테이블 구독? 사용법이랑 시간 계산 로직이 아닐까 싶다.

// 일단 오늘 날짜 계산해서 캘린더에 eq 스터디 아이디, 날짜 찍어서 일정 있는지 확인하기 => 없으면 없다고
// 일정이 있으면 타이머 조회하기 => 타이머에 유저, 스터디, 날짜 있으면 그거 불러오고 없으면 타이머 그냥 0
// 현재 시간이 캘린더 일정 시간 사이인지 확인하기 => 해당 시간이면 시작 / 일시정지 활성화

// 타이머 처음 누를 때
// 처음 시간은 0 => 시작 누르면 creat_at 에 현재 시간 넣고 타이머 0부터 시작하기 => 이즈러닝 트루 변경
// 중간에 멈추면 라스트 업데이트에 현재 시간 넣고 이즈러닝 펄스
// 다시 시작하면 라스트 스타트에 현재 시간 넣고 이즈러닝 트루

// 이미 시작했었던 타이머
// 러닝 false인 경우 생성 시간 ~ 라스트 업데이트 로 경과 시간 계산
// 러닝 true인 경우 생성 시간 ~ 라스트 업데이트 + 라스트 스타트 ~ 현재 시간 더해서 경과 시간 계산

내일부터는 이렇게 적어둔 메모를 한줄씩 코드로 만들어볼 생각이다. 늦어도 수요일에는 완성이 되어서 미완성된 다른 기능들 시작하고 싶은데 열심히 하면 되겠지?!

0개의 댓글