2026-09-01 PulseUp 작업일지입니다. 오늘은 8건의 작업을 진행했습니다.

회원앱

현상/기능

  • 앱의 초기화면은 이렇게. 로그는 웹의 로그를 적당히 변형해서 사용
  • 파일 · 변경
  • `src/components/` · 웹 브랜드 변형 로고
  • `src/screens/` · 초기 화면
  • `src/screens/` · 로그인 없이 둘러보기
  • `src/app/` · 비로그인 → `/welcome`

현상/기능

  • 시작하니 로그인 화면이 나온다. 웹페이지도 로그인화면 아래 회원가입링크 있는데 여긴 없다
  • 파일 · 변경
  • `계정이 없으신가요? 회원가입` 링크
  • `src/screens/register/*` · 가입 폼, 중복확인, 약관 동의
  • `src/legal/` · 웹과 같은 약관 버전 `2026-06-01`
  • `register`, `check-duplicate`
  • `src/app/` · `/register` 라우트

현상/기능

  • member-app 를 mobile-app 으로 이름을 변경
  • 파일 · 변경
  • 으로 이동
  • name `mobile-app`
  • slug `pulseup-mobile`
  • 루트 `package.json` · `dev:app` prefix를 으로 변경

현상/기능

  • 하나의 소스로 안드로이드, ios 둘다 사용가능한게 맞지? 그럼 진행

작업

  • 파일 · 변경
  • `package.json` · workspaces를 기존 3패키지 명시. `dev:app` 추가. 회원앱은 React 19라 웹(React 18)과 호이스트하지 않음
  • `*` · Expo SDK 57 신규. `src/api`, `src/auth`, `src/screens`, `src/app`
  • `*` · 기존 `/api/auth/login · me · refresh · logout` 호출
  • `*` · SecureStore 토큰, 세션 복원
  • 로그인
  • 로그인 후 홈(다음 기능 안내)

주요 규칙

  • 앱은 웹과 같은 API를 쓴다. 회원용 서버를 따로 두지 않는다
  • 실기기 API 주소는 Expo 호스트 IP:3001 을 쓰고, `EXPO_PUBLIC_API_URL`이 있으면 우선한다
  • 회원가입·지점신청·수업예약 화면은 아직 없다

지점 홍보·요금 (`/admin/branch-promo`)

현상/기능

  • 지점에서 등록/관리하는 값이 있다. 어떻게 하지? (지점 등록비용 같은거..)
  • branch-promo 에 지점관리자가 직접고친다

작업

  • 파일 · 변경
  • `api-server/src/services/` · 요금 매핑·저장 (`updateBranchPromoSettings`)
  • `api-server/src/routes/` · `PATCH /me/promo` 에 등록비·월 이용료 수신
  • `web-app/.../BranchPromo/*` · 홍보문구 + 요금 입력
  • `suggestPaymentAmount` — 신규=등록비+월×개월, 연장=월×개월
  • `ApproveVisitDialog` / `RenewPaymentDialog` · 지점 요금을 기본 금액으로 채움. 직접 수정 가능

주요 규칙

  • 지점 설정은 기준가이고, 결제 이력에는 실제로 받은 금액을 남긴다
  • 요금을 비우면 예전처럼 결제 금액을 손으로 넣는다

지점 신청목록 · 승인 결제 (`/admin/branch-applications`)

현상/기능

  • 1. branch-applications 에서 목록에 닉네임 넣어주고
  • 2. 개인 심박계 등록시 기기별에 기본값은 "닉네임"_개인심박계 이렇게 넣어줘
  • 3. 결제 금액 아래 5%, 10%, 20%, 30% 조그만 버튼을 만들어서 누르면 전체 금액의 % 만큼 할인한다
  • 결제메모에는 % 할인 적용 이렇게 추가한다

작업

  • 파일 · 변경
  • 신청 DTO 에 nickname
  • 닉네임 컬럼
  • 기기명 기본 `닉네임_개인심박계`, 할인 버튼
  • 금액 아래 5/10/20/30% 버튼
  • 전체 금액 기준 할인·메모 `N% 할인 적용`
  • 같은 할인 버튼

지점 신청 (`/account/branches`)

현상/기능

  • account/branches 에 체크박스는 뺀다. 상태에 버튼을 넣어서 그 버튼으로 신청하게 한다

작업

  • 파일 · 변경
  • 체크박스·일괄 신청 제거. 상태 칸에 신청 버튼
  • 지점 하나씩 `applyToBranch`
  • 다중선택 유틸 삭제

수업예약 관리 (`/booking/manage`)

현상/기능

  • booking/manage 에서 예약자 출석체크에서 출석처리가 코드값으로 나온다

현상/기능

  • 슬롯개념이 필요없다. 지우고, 슬롯 옆의 현재는 뭐지

작업

  • 파일 · 변경
  • 출석 처리 Select에 `labels`를 넘겨 닫힌 상태에서도 예약중/출석/노쇼로 표시
  • 심박계·운동 Select에도 `labels`를 넘겨 기기명/운동명으로 표시
  • ANT+ 슬롯 입력칸 제거. 헤더를 `현재 심박`으로 바꿈

지점 심박계 관리 (`/admin/heart-rate-devices`)

현상/기능

  • admin/heart-rate-devices 의 상하 높이를 1:1 로

현상/기능

  • admin/heart-rate-devices 여기에 현재 심박계가 예약된 목록도 필요하다

작업

  • 파일 · 변경
  • 목록 `flex-[2]` / 폼 `flex-[1.2]` → 둘 다 `flex-1`
  • 예약 배정 DTO·정규화
  • `listBranchHeartRateReservations` (미종료 수업, 예약중/출석)
  • `GET /devices/reservations`
  • (web) · `getDeviceReservations`
  • 신규. 기기명·회원·수업 일시
  • 하단 오른쪽 예약 배정 목록

지점 수입분석 (`/admin/branch-revenue`)

현상/기능

  • admin/branch-revenue 에 기능추가
  • 1. 조회기간 매출을 클릭하면 조회기간내 결제목록이 팝업으로 나온다
  • 2. 이용중 회원을 클릭하면 이용중인 유효회원 목록이 팝업으로 나온다. 회원을 클릭하면 admin/branch-members 이 페이지의 해당해원으로 가야 한다
  • 3. 만료임박 회원을 클릭하면 만료임박 회원의 목록이 팝업으로 나온다. 회원을 클릭하면 admin/branch-members 이 페이지의 해당해원으로 가야 한다

작업

  • 파일 · 변경
  • `listPayments` — 조회기간 유효 결제 목록
  • `GET /payments`
  • `fetchRevenuePayments`
  • 매출·이용중·만료임박 카드 클릭
  • 신규. 결제 목록 팝업
  • 신규. 회원 목록 팝업
  • 팝업 연결, 회원 클릭 시 이동
  • `?memberId=` 로 해당 회원 선택

지점 회원관리 (`/admin/branch-members`)

현상/기능

  • 1. 회원 클릭 시 회원가입 때 입력한 모든 정보 표시 (비밀번호 제외)
  • 2. 결제 이력은 간단하게, 클릭하면 하단에서 세부내역이 열리게
  • 3. 추가로 회원을 선택하면 선택된 회원이 select 표현되게 한다

현상/기능

  • 결제이력을 클릭하면 말풍선 형태로 바로 밑에 붙도록 할 수 없을까

현상/기능

  • 좌우 넓이를 1.5 : 1 로 하고 우측의 높이를 1:1로
  • 파일 · 변경
  • 좌 `flex-[1.5]` / 우 `flex-1`. 우측 가입정보·결제이력 각 `flex-1`

현상/기능

  • 가입정보를 좀 더 정돈되고 깔끔하게 표시
  • 파일 · 변경
  • 기본 / 신체·운동 / 부상·주의 / 약관 구역, 칸 정렬
  • 키·몸무게·나이 단위, 약관 문구
  • 단위·약관 표시 케이스

현상/기능

  • 가입정보에 약관동의 내용은 필요없다
  • 파일 · 변경
  • 약관 동의 구역 제거
  • `displayTermsText` 제거

현상/기능

  • 가입정보에 기본, 신체/운동, 부상/주의사항 등 타이틀은 표나게. 배경색과 글자크기 등만 조금 바꾼다
  • 파일 · 변경
  • 구역 제목 `text-xs` + 헤더톤 배경

현상/기능

  • 적용기간이 9/1일부터이고 오늘이 9/1일이면 결제취소가 안되어야 하지 않나
  • 파일 · 변경
  • `20260906_membership_payment_cancel_period.sql` · `sp_cancel_membership_payment` 시작일 <= 오늘이면 `PAYMENT_PERIOD_STARTED`
  • `canCancelMembershipPayment` — `today < startsAt` 만 허용
  • 시작 당일부터 취소 버튼 숨김
  • 같은 조건으로 저장 비활성
  • 화면용 동일 판별

현상/기능

  • 지점회원 페이지에서
  • 1. 현재 좌우 1.5:1 인데 1:8:1 로 수정
  • 2. 좌측 회원목록에 '정지' 버튼. 예약 불가. 만료도 예약 불가. 다시 활성화 가능
  • 3. datatable 컬럼을 fit
  • 파일 · 변경
  • `20260907_branch_membership_suspend.sql` · `branch_memberships.is_suspended`, 목록 프로시저
  • `canReserveFromMembership` 에 정지 여부
  • 정지 회원 예약 차단
  • `setMembershipSuspended`
  • `POST /:id/suspend`
  • 정지/활성화 컬럼, 컬럼 폭 `%`
  • 좌 `flex-[1.8]` / 우 `flex-1`

현상/기능

  • 예약정지하니 "Unknown column 'is_suspended' in 'SET'" 에러가 난다
  • 그리고, 예약정지 확인을 alert 으로 하지말고 snack bar 형태로
  • 파일 · 변경
  • `20260907_branch_membership_suspend.sql` · `ADD COLUMN IF NOT EXISTS`, `sp_set_membership_suspended`
  • `sp_branch_membership.sql` · `sp_set_membership_suspended`
  • 정지 전에 `is_suspended` 컬럼 보장
  • 컬럼 없으면 정지 아님으로 예약 검사
  • `onConfirm`/`onCancel` 확인 스낵바
  • `window.confirm` 제거
  • 정지/활성화 확인을 스낵바로

현상/기능

  • 정지 했다는데 버튼은 계속 정지로 나온다
  • 파일 · 변경
  • 목록에 `is_suspended` 재조회, 정지 응답에 반영
  • 저장 후 해당 행 버튼을 활성화/정지로 맞춤

현상/기능

  • 정지한 회원으로 접속하니 여전히 예약이 되고 있다
  • 파일 · 변경
  • `toFlag` — TINYINT/Buffer 정지 판별
  • 내 가입/지점 목록에 정지 재조회
  • 회원은 예약 가능 지점만. JWT 지점 폴백 제거
  • active 가입이 정지면 예약 차단
  • 예약 가능 지점이 아니면 슬롯/예약을 막음

현상/기능

  • account/branches 하단에는 예약불가라 나오는데 상단에 지점 회원이라고 나온다. 정지 된 회원은 지점 정지 라고 나오게
  • 아래 가입목록에도 상태를 지점 정지로 변경
  • 파일 · 변경
  • 지점/가입 DTO에 `isSuspended`
  • 화면 타입에 `isSuspended`
  • `getMembershipStatusLabel`
  • 상단 상태 `지점 정지`
  • 하단 가입 상태 `지점 정지`

작업

  • 파일 · 변경
  • `getMemberProfile` — 가입 입력값 DTO
  • `GET /:id/profile` (`/:id/payments` 보다 위)
  • `fetchMemberProfile`
  • 성별·운동목표 한글 라벨, 빈 값 `-`
  • 가입 정보 읽기 전용
  • 구분·결제일·금액 한 줄. 행 클릭으로 세부 선택
  • 결제 행 바로 아래 말풍선 세부내역 + 유효 건 취소
  • 선택 행 강조(`bg-primary/20` + 체크), 헤더 `회원 선택` Select 동기화
  • 왼쪽 목록 / 오른쪽 가입정보·간단이력. 결제 클릭 시 행 아래 말풍선