streak연장 기능을 만들어 봅시다.
streak db
먼저 스트릭 정보를 담는 db를 만들어 봅시다.
유저 정보가 담겨있는 user db,
할 일이 담겨있는 work db,
각 일을 했는지 안했는지 체크하는 streak db를 만듭니다.
각 유저는 여러개의 할 일이 있을 수 있습니다.
그리고 각 일들은 여러 달동안 진행할 수 있습니다.
여기서 아주 중요한 것이 있습니다.
db에 있는 int 형은 2^31 - 1입니다. 그리고 한 달은 최대 31일로 이루어져 있죠.
즉, 특정 달에 대해 이 일을 했는지 안했는지 체크하려면 int 1개면 충분하다는 것입니다.
2^{i-1}에 해당하는 비트가 1이면 i번째 날에 일을 했다는 뜻입니다. 예를 들어 2^0에 해당하는 비트가 1이면 첫번째 날에 일을 했습니다.
그럼 다음 구조로 만들 수 있습니다. https://app.sqldbm.com/ 를 이용해서 만들었습니다.
month에는 YYYYMM 꼴의 숫자가 들어갑니다. 202412면 2024년 12월입니다.
연장
streak 연장은 다음 흐름으로 진행됩니다. https://www.websequencediagrams.com/ 를 이용해서 만들었습니다.
로그인을 한 유저인지 체크를 해 주고 로그인을 했으면 addStreak을 해줍니다.
작업이 있는지 확인한 다음 없으면 에러를 발생합니다. 그리고 연장이 불가능한 일인 경우에도 에러를 발생합니다.
그렇지 않은 경우에는 스트릭을 연장해 줍니다.
연장이 가능한지는 다음과 같이 판단합니다.
해당 일에 대한 스트릭이 없거나 그 기록이 이번 달 기록이 아닌 경우에는 항상 업데이트가 가능합니다.
만약 이번 달에 대한 기록이 있는데 오늘에 해당하는 기록이 없으면 업데이트가 가능합니다.
그 외의 경우는 업데이트가 불가능합니다.
스트릭 연장은 다음과 같이 진행됩니다.
해당 일에 대한 스트릭이 없거나 이번 달 기록이 없으면 이번 달에 해당하는 스트릭을 추가해 줍니다.
그렇지 않은 경우 오늘에 해당하는 비트를 1로 만들어 줍니다.
'프로젝트' 카테고리의 다른 글
웹 개발 - 프로젝트 2 - 9. 로그인 폼 (4) | 2024.10.05 |
---|---|
웹 개발 - 프로젝트 2 - 8. work 보여주기 (2) | 2024.10.04 |
알고리즘 - 프로젝트 1 - 레이튼 교수와 이상한 마을 135 (1) | 2024.09.21 |
웹 개발 - 프로젝트 2 - 6. streak lover 로그인 (2) | 2024.09.14 |
웹 개발 - 프로젝트 2 - 5. streak lover 백엔드 api (0) | 2024.08.24 |