Today I Learned 2023.02.08.

Dongchan Alex Kim·2023년 2월 10일
0

Today I Learned

목록 보기
27/31
post-thumbnail

문제발생

오른쪽 하단에 있는 아코디엔으로 기록된 운동의 총합기록을 RECORDS라는 list-group으로 표현하고 싶었다.
사실, 종목별 총합개수를 합치는 건 어렵지 않게 구현했다.
예를 들어보자면, '달리기'의 type을 가진 input값들 중에서 세트횟수와 세트당횟수 값을 곱해서 (문자열 제외 숫자만 추출 → 정규표현식 이용) 그냥 count 변수값에 for 문으로 하나하나 차곡차곡 더해주는 방식이었다.

문제는 삭제버튼 기능 구현도중에 나타났다.
그동안 배웠던 내용을 토대로 삭제버튼도 어렵지 않게 구현했으나, 문제는 삭제를 했을때, 총합기록에서 빠지질 않았다.
당연한 부분이었다.
for문에서 해당 type의 운동횟수 기록을 다 더했으니, mongoDB에는 남아있는 데이터값들이 for문에 그대로 들어가 총합에서는 빠지질 않았던 것이다.

시도해본 것들


삭제 기능 자체를 개편해보았다.

db.dashboards.delete_one()

아예 mongoDB에서 삭제버튼을 누른 해당 내용을 아예 지워버리는 형식이다.
→ done 값이 1로 바뀌면서, temp_html에 빈 값이 붙고, 해당 데이터값은 mongoDB에서 사라졌다.
→ 당연하게도 for문안에서 해당값이 합산되지 않아, 총합기록에서 해당기록만큼 빠졌다.

하지만, 같은 조에 있는 형님께서
완전 삭제는 데이터관리하는 입장에서 그러지 말아야하는 행위중 하나라는 말씀을 하셨고,
그 부분에 동감하여 다른 방식을 고민하기 시작했다.


삭제된다는 조건 값은 done == 1 이었다.
num 값으로 식별된 해당 값이 done == 1이 된다면 → 해당 값의 temp_html 을 비어있는 값을 붙인다. 이런 의미이다.
다시 생각해보면, 이 부분에서 우리는 삭제되는 해당 값들을 지정할 수 있었던 것이다.
즉, done == 1이라는 조건으로 들어온 값들을 이용해서 수정해볼만 했던거이었다.

해결

else {
if( `${type}` == '달리기'){
    count_running -= parseInt(`${sets}`) * parseInt(`${reps}`)
}else if( `${type}` == '코딩'){
    count_coding -= parseInt(`${sets}`) * parseInt(`${reps}`)
}else if( `${type}` == '조깅'){
    count_jogging -= parseInt(`${sets}`) * parseInt(`${reps}`)
}else if( `${type}` == '스트레칭'){
    count_stretching -= parseInt(`${sets}`) * parseInt(`${reps}`)
}else if( `${type}` == '턱걸이'){
    count_chinup -= parseInt(`${sets}`) * parseInt(`${reps}`)
}else if( `${type}` == '윗몸일으키기'){
    count_situp -= parseInt(`${sets}`) * parseInt(`${reps}`)
}else if( `${type}` == '팔굽혀펴기'){
    count_pushup -= parseInt(`${sets}`) * parseInt(`${reps}`)
}else{
    count_squat -= parseInt(`${sets}`) * parseInt(`${reps}`)
}

else 가 done == 1일 때인데,
이때 ${type}값으로 종목별로 분류해서, 해당 값의 ${sets}와 ${reps} 를 곱한 기록수만큼 해당 값을 다 더한 값에서 빼는 방식이다.

가장 신경써야하는 부분이 전역변수 설정이었는데,
각 종목별로 count한 변수부분이 계속 꼬였다.
이 때 해결해준 개념이 전역변수와 지역변수의 개념이었는데,
단순히 한 function안에서 변수를 지정하면, 다른 function에서 해당 변수를 가져오지 못한다는 내용이었다.

따라서, count 변수를 가장 바깥에 전역 변수로 설정해주고 이 변수를 총합 기록 function에서도 쓰면서, 기록 삭제할때도 같이 쓸 수 있겠금 연동해준 느낌이 들었다.

profile
Disciplined, Be systemic

0개의 댓글