2026-10-05 PulseUp 작업일지입니다. 오늘은 23건의 작업을 진행했습니다.
앱 운동기록 — 심박·월간·인바디 탭 (mobile-app)
현상/기능
- 앱의 운동기록 메뉴에 심박기록, 월간기록, 인바디 3개 탭이 필요한 상황. 심박기록은 첨부 이미지 형태, 월간기록은 심박기록의 월간 집계, 인바디는 "구현중"으로 표시되는 상황
작업
- RecordTabs에 심박 기록/월간 기록/인바디 탭을 구성함
- HeartRecordSummary, ClassRecordCard, PastRecordList로 하루 평균·최고, 존별 시간, 지난 운동을 표시함
- MonthlyRecordPanel, aggregateHeartSessions로 그달 심박 합계를 집계함
- WorkoutRecordsScreen 인바디 탭을 구현중으로 표시함
- useWorkoutRecords에서 그달 수업 심박을 함께 불러와 집계에 사용함
웹 심박존 ? 표 — 존 색을 앱과 같게 (web-app)
현상/기능
- 웹에서 나오는 팝업 표의 Z1~Z5 색깔이 다른 곳들과 다른 상황
- PersonalHeartZoneCard에서 ? 표의 존 점을 앱과 같은 색(남색·파랑·초록·주황·빨강)으로 표시함
내 심박존 — 웹은 ? 툴팁, 앱 설정 화면은 표 제거 (web-app, mobile-app)
현상/기능
- 웹에서는 테이블을 빼고 "내 심박존 설정" 타이틀 옆 ? 표시에 마우스를 올리면 표가 보이는 기능이 필요한 상황. 앱 설정 화면에서는 표가 없어도 되는 상황
- PersonalHeartZoneCard 카드 본문 표를 빼고 제목 옆 ? 호버 시 존·하한·상한 표를 보여줌
- ProfileHeartZoneScreen 설정 화면의 존 표를 제거함. 마이 카드 표는 유지함
내 심박존 설정 — 존별 하한·상한 표 복원 (mobile-app, web-app)
현상/기능
- 앱과 웹의 "내 심박존 설정"에서 없앤 존별 표를 다시 보여줘야 하는 상황
- ProfileHeartZoneCard, ProfileHeartZoneScreen에 존·하한·상한 표와 기준 문구 (bpm)을 추가함
- PersonalHeartZoneCard 목표 존 아래에 같은 표를 추가함
심박계 모니터 목표 존 초과 깜박임 (electron-app)
현상/기능
- 심박계 모니터에서 설정한 zone일 때 노란색으로 깜박이는데, 설정한 zone보다 높은 심박수인 경우에도 같은 색으로 깜박이는 상황
- 목표 존은 노랑(#FFD700), 그보다 높은 존은 빨강(#FF2A2A)으로 구분함
- 의 그리드·전용 모니터 테두리에 같은 색을 적용함
- 바깥 흰 링(#fff)도 노랑·빨강과 함께 깜박이도록 변경함
심박계 모니터 닉네임 (electron-app, api-server)
현상/기능
- 심박계 모니터에 닉네임 "가오" 대신 "C111"이 표시되는 상황
- ClassBookingService.listSlotBookings 예약 명단에 nickname을 포함함
- heart-rate-branch-catalog 화면 글씨를 닉네임→이름→기기명 순으로 표시함. 회원 c111111의 이름 C111 대신 닉네임 가오로 표시함
월간프로그램 Play 저녁 수업 누락 (api-server)
현상/기능
- 098765 사용자가 21시에 등록한 수업명 12345가 리스트에 나오지 않는 상황
- ClassBookingService.listSlots에서 오늘 범위 ISO 문자열을 Date로 넘겨 한국시간으로 비교하도록 수정함. 2026-10-05 21:00 수업 12345(김해어방점)가 UTC 14:59 비교 때문에 빠지던 문제를 해결함
리모컨 모니터 배치 팝업 글자색 (web-app)
현상/기능
- 리모컨페이지 모니터 배치 팝업에서 저장 버튼 외에는 폰트색상이 흰색이라 보이지 않는 상황
- MonitorLayoutDialog에 text-foreground를 넣어 리모컨 카드의 흰색 글자색이 제목·안내·표·닫기 버튼으로 이어지지 않게 함. 저장 버튼은 기존 그대로 유지함
만료 수강권 재등록 요청 (web-app, mobile-app, api-server)
현상/기능
- 지점 수강권이 만료되면 연장 또는 추가 화면이 없는 상황. 재등록 요청 기능이 필요하고 지점은 기존 연장결제로 처리하는 상황
- POST /api/member/branch-memberships/:id/renewal-request를 추가함. 만료된 active 수강권만 요청 가능하고 이미 요청했으면 그대로 반환함
- 웹 지점 신청 하단 처리에서 만료 행에 재등록을 표시하고, 요청 후 요청됨으로 변경함
- 앱 홈 수강권·내 수강권·지점 신청에서 만료 시 재등록 요청을 표시함
- 지점 회원관리(웹/앱) 이름 옆에 재등록을 표시함. 기존 연장결제 저장 시 요청이 닫히도록 함
- 관련 저장 구조를 조정함
웹 운동기록 — 심박존·인바디 높이 3:7 (web-app)
현상/기능
- 내 심박존 설정과 아래 인바디 현황 높이를 3:7로 변경해야 하는 상황
- MemberWorkoutRecords 오른쪽 열의 내 심박존 설정과 인바디 현황 높이를 flex-[3] : flex-[7]로 나눔
웹 운동기록 — 내 심박존 설정을 앱과 같게 (web-app)
현상/기능
- 웹 페이지 /account/workout-records의 내 심박존 설정이 앱의 내 심박존 설정과 다른 기능으로 되어있는 상황
- PersonalHeartZoneCard에서 나이별 bpm 표 대신 설정하기, 저장한 존 이름(존 색·가운데)을 표시함. 다이얼로그에서 존 1~5 선택 후 저장하도록 함
- personalHeartZoneApi.saveMyTargetHeartZone으로 목표 존을 저장함
마이 심박존 카드 — 존 글자 크기·간격 (mobile-app)
현상/기능
- 폰트크기 2배가 너무 커서 1.5배로 줄이고 상단 타이틀과의 간격도 1.5배로 늘려야 하는 상황
- ProfileHeartZoneCard 존 이름 글자를 26→19.5(기본 13의 1.5배)로 줄임. 제목과 존 이름 간격 gap을 4→6으로 조정함
마이 심박존 카드 — 선택한 존 글자 (mobile-app)
현상/기능
- 설정한 zone 내용을 존 색깔과 동일하게, 중앙정렬에 폰트크기는 기존의 2배로 해야 하는 상황
- ProfileHeartZoneCard에서 저장한 존 이름을 그 존 색, 가운데 정렬, 글자 크기 26(기존 13의 2배)으로 변경함
- heartZoneGoals.heartZoneGoalColor로 존 키의 색을 지정함. 미설정은 회색으로 처리함
마이 심박존 카드 — 코치 요청 줄 삭제 (mobile-app)
현상/기능
- 내 심박존 설정 아래 '코치에게 기준 조정 요청' 줄을 삭제해야 하는 상황
- ProfileHeartZoneCard에서 코치에게 기준 조정 요청 줄과 onRequest를 제거함
- ProfileScreen에서 handleZoneRequest를 제거함. 카드는 설정하기와 선택한 존만 표시함
목표 심박존 선택·모니터 슬롯 깜박임 (mobile-app, api-server, electron-app)
현상/기능
- 앱 마이의 내 심박존 설정에서 확인하기를 설정하기로 바꾸고, 존을 고른 뒤 저장하면 그 존이 보이고, 선택한 존 이상이면 심박 모니터의 내 슬롯이 깜박여야 하는 상황
- 앱 마이 카드에 설정하기, 저장한 존 이름을 표시함. 설정 화면에서 존 1~5 선택 후 저장하도록 함
- PUT /api/heart-rate-zones/me로 목표 존을 저장함. 수업 배정 조회에 targetZone을 포함함
- Electron 운동 패널·심박 전용 창에서 현재 존이 목표 존 이상이면 해당 슬롯이 노란 테두리로 깜박이도록 처리함
- 관련 저장 구조를 조정함
심박존 판정 — 공통코드 ZONE1~5 대신 나이·성별 표 (api-server, electron-app, web-app, mobile-app)
현상/기능
- 공통코드 그룹 HEART_RATE ZONE1~5를 사용하던 부분을 심박존 설정 DB 값으로 변경하고, 나이까지 포함해야 하는 상황
- 저장(heartrate.service)·운동기록 개요/상세·참가자 current_zone을 회원별 나이·성별 구간으로 판정하도록 변경함
- 생년월일·나이가 없으면 같은 표의 40세 남성 구간을 적용함. 표가 없으면 기본 90~180을 적용함
- Electron은 GET /api/heart-rate-zones/class-slot/:id로 기기별 구간을 받아 화면 색에 사용함
- 공통코드 /heart-rate-settings·/heart-rate-zones는 ZONE1~5를 더 이상 내려주지 않도록 변경함
- 공통코드 화면 안내 문구를 나이별 심박존 설정으로 변경함
웹 운동기록 심박존 — 단위를 기준 문구 옆 괄호로 (web-app)
현상/기능
- 남성기준 옆에 단위를 괄호로 표시해야 하는 상황
- PersonalHeartZoneCard 표 위 「단위 bpm」줄을 없애고, 제목 오른쪽 기준 문구 끝에 (bpm)을 붙임
웹 운동기록 심박존 — 단위 위치 (web-app)
현상/기능
- 단위를 상단으로 옮겨야 하는 상황
- PersonalHeartZoneCard 「단위 bpm」을 표 아래가 아니라 열 제목 바로 위로 옮김
웹 운동기록 심박존 표 — 여백 제거 (web-app)
현상/기능
- 웹페이지에서 표가 밖 여백 없이 붙어있어야 하는 상황
- PersonalHeartZoneCard 표 바깥 패딩과 표를 감싼 테두리를 빼서 카드 헤더 바로 아래에 붙임
내 심박존 기준 문구 — 제목 오른쪽 (web-app, mobile-app)
현상/기능
- 가입나이 40세 남성기준 문구를 내 심박존 설정 타이틀 오른쪽으로 옮기고 작은 글씨로 변경해야 하는 상황
- PersonalHeartZoneCard 웹 운동기록 카드 제목 오른쪽에 작은 기준 문구를 표시함
- ProfileHeartZoneScreen·ProfileSubHeader 앱 설정 화면 제목 오른쪽에 같은 문구를 표시함. 다른 마이 화면 헤더는 그대로 유지함
웹 운동기록 내 심박존 — 표 표시 (web-app)
현상/기능
- account/workout-records의 내 심박존 설정을 표 형태로 정돈해야 하는 상황
- PersonalHeartZoneCard에서 /account/workout-records의 내 심박존을 존·하한·상한 표로 표시함. 단위는 bpm으로 표기함
앱 내 심박존 설정 — 표 표시 (mobile-app)
현상/기능
- 앱의 심박존 설정 페이지를 표 형태로 정돈되게 보여줘야 하는 상황
- ProfileHeartZoneScreen Z1~Z5를 존·하한·상한 표로 표시함. 단위는 bpm으로 표기함
- 화면에서만 쓰던 getZoneGuideRows를 제거함
내 심박존 설정 — 앱·웹 운동기록·슈퍼관리자 기준표 (mobile-app, web-app, api-server)
현상/기능
- 사용자 앱 마이의 내 심박존 설정을 나이별 실제 값으로 바꾸고 DB에 저장해야 하는 상황. 불러올 때는 가입 생년월일·성별로 계산하고, 생년월일 입력은 나중에 변경하는 상황. 웹 /account/workout-records의 수업일별 심박 그래프를 빼고 같은 심박존 설정을 넣어야 하는 상황. 표는 남성 기준이고 여성은 각 값에 0.88을 곱하며, 0.88은 공통코드로 관리해야 하는 상황. 슈퍼관리자 수정 페이지가 필요한 상황
- 만 나이, 11~70 맞춤, 여성만 배율 반올림을 적용함
- / 로 GET /api/heart-rate-zones/me, GET·PUT /api/heart-rate-zones/standards를 구현함
- 앱 ProfileHeartZoneScreen·카드에서 센터 공통 구간 대신 개인 계산값을 표시함
- 웹 PersonalHeartZoneCard를 운동기록 오른쪽 위로 배치하고 HeartRateChartCard를 제거함
- 웹 HeartRateZoneStandards에 슈퍼관리자 표·여성 배율 저장 기능을 추가함
- 운동 저장용 HEART_RATE.ZONE1~5와 Electron 존 판정은 그대로 유지함
- 관련 저장 구조를 조정함