2026-08-24 PulseUp 작업일지입니다. 오늘은 29건의 작업을 진행했습니다.
일일 중복예약 Y/N 의미 복원
현상/기능
- 설정은 2건 이상인데 다른 시간대 예약 버튼이 비활성화된다
작업
- `DAILY_DUPLICATE` 의 Y는 여러 건 허용, N은 하루 1회로 다시 맞춘다. 막힌 버튼에는 하루1회/시간중복 등 이유를 보여 준다
- **API** · · **Web** · · **DB** · `20260824_booking_daily_duplicate.sql`
수업예약 다른 시간대 버튼
현상/기능
- 10:10 종료 수업은 예약 버튼이 없고, 설정상 2건 이상이면 다른 시간대는 예약 가능해야 한다
작업
- 종료된 수업은 예약 버튼을 숨긴다. 같은 지점 다른 시간대는 일일 중복 허용 시 예약 가능하게 두고, 설정 값이 없으면 하루 1회로 막지 않는다
- **Web**
타지점 같은 시간대 예약 표시
현상/기능
- 여러 지점 등록 중 다른 지점 같은 시간대 예약이면 버튼을 타지점예약으로 막고 비활성화
작업
- 다른 지점 예약과 시간이 겹치면 예약 버튼을 `타지점예약`으로 바꾸고 비활성화한다
- **Web**
내 수업예약 화면 제거
현상/기능
- account/bookings 를 빼고, 수업예약 달력에 내 예약이 있는 날을 따로 표시
작업
- 내 수업예약 페이지를 제거하고 `/account/bookings` 는 수업예약으로 보낸다. 달력 indicator에 내 예약 날짜는 `내예약있음`과 점 표시를 추가한다
- **Web** · , , · **DB** · `20260824_hide_my_bookings_menu.sql`
운동기록 취소 예약 숨김
현상/기능
- 예약을 모두 취소했는데 account/workout-records 수업 예약 목록이 남는다
작업
- 수업 예약 목록과 예약 건수에서 취소 상태를 제외한다. 취소만 있으면 빈 목록을 보여 준다
- **API**
일일 중복 예약 공통코드
현상/기능
- 공통코드에 일일 중복 예약을 Y/N으로 두고, Y면 하루 2개 이상, N이면 하루 1회만 예약
작업
- `BOOKING/DAILY_DUPLICATE` 를 추가했다. Y면 같은 지점 하루 1회, N이면 시간만 안 겹치면 여러 건 예약된다. SQL은 직접 실행해야 한다
- **DB** · `20260824_booking_daily_duplicate.sql` · **API** · , · **Web**
달력 예약가능/예약종료 표시
현상/기능
- 달력의 예약있음을 일자·지점 잔여 정원으로 예약가능/예약종료로 바꾼다
작업
- 같은 날 슬롯 정원을 합산해 남은 자리가 있으면 예약가능, 모두 찼거나 지난 수업이면 예약종료로 표시한다
- **Web**
수업예약 다크모드 대비
현상/기능
- 다크모드에서 월 선택 아이콘이 검고, 취소 버튼 빨강이 잘 안 보인다
작업
- 월 선택 아이콘은 흰색으로 보이게 반전을 바로잡고, 취소 버튼은 밝은 빨강으로 바꿨다
- **Web** · `index.css`
회원 수업예약 취소
현상/기능
- 예약 후 버튼이 잠기는데 취소도 할 수 있어야 한다
작업
- 예약한 수업은 예약 버튼을 취소로 바꾸고, 누르면 바로 예약을 취소한다. 시작된 수업은 취소하지 않는다
- **Web**
회원 수업예약 지점 선택
현상/기능
- 회원은 여러 지점에 가입될 수 있으니 지점을 고르고 그 지점 수업만 보여야 한다
작업
- 달력 상단에 가입 지점 Select를 두고 선택 지점 슬롯만 조회한다. 예약/변경은 기본 소속 지점이 아니라 가입된 지점이면 허용한다
- **Web** · · **API**
회원 수업예약 동일 레이아웃
현상/기능
- booking/calendar도 booking/manage와 동일한 레이아웃으로 바꾼다
작업
- 좌 6 달력(indicator)/우 4 목록으로 맞추고, 우측에는 시간·수업명·실시운동·예약수·예약 버튼을 둔다
- **Web**
수업예약 관리 목록 정렬
현상/기능
- 시간, 실시운동 중앙정렬
작업
- 예약 목록의 시간·실시운동 셀을 가운데 정렬했다
- **Web**
수업예약 관리 목록 컬럼 폭
현상/기능
- 수업을 수업명으로 줄이고, 운동을 실시운동으로 넓히며 예약수·관리 폭을 늘린다
작업
- 수업명 폭을 절반으로, 실시운동은 남은 공간을 쓰도록 2배로 넓혔다. 예약수는 10%, 관리는 20% 늘렸다
- **Web**
수업예약 관리 목록 레이아웃
현상/기능
- 좌우 6:4, 예약 목록에 시간 전체와 운동을 보이고 예약수·관리 칸을 줄인다
작업
- 달력/목록 비율을 6:4로 바꾸고, 목록에 시간 전체·운동 대분류를 추가했다. 예약은 예약수로 바꾸고 예약수·관리 컬럼 폭을 줄였다
- **Web**
수업 수정 대분류 이름 표시
현상/기능
- 수업 수정 시 운동 대분류가 코드값(UUID)으로 보인다
작업
- 공통 Select는 닫힌 상태에서 항목 라벨을 등록하지 않아 UUID가 그대로 나왔다. id→이름 맵을 `labels`로 넘기고 트리거에 이름을 직접 표시한다
- **Web**
수업 등록 시간 기본값·겹침 선택 금지
현상/기능
- 등록 시 그날 마지막 수업 종료 다음으로 시간을 두고, 이미 수업이 있는 일시는 선택하지 못하게 한다
작업
- 기본 시작을 마지막 수업 종료 시각으로 맞추고, 시작/종료 일시를 바꿀 때 겹치면 값을 되돌린다
- **Web**
예약자 있는 수업 변경 금지
현상/기능
- 등록된 수업에 예약자가 있으면 변경하지 못하게 한다
작업
- 예약 인원이 1명 이상이면 수정·삭제를 막고, API에서도 같은 메시지로 거절한다. 예약자 조회는 그대로 둔다
- **API/Web**
수업예약 달력 글자 크기
현상/기능
- 달력 글자를 조금 크고 선명하게
작업
- 요일·날짜·공휴일·예약있음 폰트를 한 단계 키우고 bold 로 맞춰 가독성을 높였다
- **Web**
수업예약 달력 주말·공휴일
현상/기능
- 토요일 파랑, 일요일 빨강, 한국 공휴일 표시 가능 여부
작업
- 주말 색을 적용하고, 2020~2035 법정공휴일·대체공휴일·일부 임시공휴일을 날짜 숫자와 이름으로 표시한다
- **Web**
수업예약 관리 달력 fit
현상/기능
- 달력이 영역에 전체 fit 되게 한다
작업
- 관리 화면(indicator) 달력은 최소 너비/높이를 없애고, 남은 공간을 6주에 나눠 스크롤 없이 채운다
- **Web**
수업예약 관리 7:3 레이아웃
현상/기능
- 페이지를 7:3으로 나눠 달력에는 예약있음만, 우측에는 예약 목록을 보여 준다
작업
- 왼쪽 달력은 수업 카드 대신 `예약있음`만 표시하고, 날짜를 누르면 오른쪽 목록에서 수정/예약자/삭제를 한다
- **Web**
수업예약 관리 등록 폼
현상/기능
- 수업 등록 대분류는 Main만, 종료시간은 시작+1시간, 저장 후 계속은 날짜만 남기고 버튼을 다시 쓸 수 있게 한다
작업
- Dynamic Stretching/Cool-Down을 숨기고, 시작시간 변경 시 종료를 +1시간으로 맞춘다. 저장 후 계속은 같은 날짜만 유지한 채 입력을 초기화하고, 겹치지 않는 다음 1시간 칸을 넣어 저장 버튼이 다시 켜지게 했다
- **Web**
방문확인 승인 추가정보·운동종료일
현상/기능
- 방문확인 승인 시 회원-지점 추가정보를 따로 저장하고, 등록개월·운동시작일/종료일을 필수 입력한다
- 승인 API에 등록개월·운동시작일을 넘긴다
- 승인 팝업에서 추가정보를 입력하고, 사용자 관리 목록에 운동종료일을 보여 10일 이내면 붉게 표시한다
작업
- `branch_membership_details` 테이블을 추가하고, 승인 프로시저가 등록개월·시작일로 종료일을 계산해 저장한다. SQL은 사용자가 직접 실행한다
- `POST /api/branch/member-applications/:id/approve` body에 `registerMonths`, `workoutStartsAt` 을 받고 사용자 목록의 등록지점에 `workoutEndsAt` 을 붙인다
- `ApproveVisitDialog`로 등록개월·시작일을 받고 종료일은 자동 계산한다. 사용자 목록은 가장 가까운 종료일을 보여 주고 10일 이하면 붉은색이다
- **DB** · `20260824_branch_membership_details.sql`, `sp_branch_membership.sql`
- **API**
- **Web** · `BranchMemberApplications`, `UserManagement`
지점 신청 거절 두 번 확인
현상/기능
- 거절 버튼은 2번 확인받는다
작업
- 거절 시 ConfirmDialog를 두 단계로 띄운 뒤에만 거절 API를 호출한다
- **Web**
지점 신청목록 컴포넌트 폴더 정리
현상/기능
- 다른 소스처럼 component 폴더로 묶기
작업
- 표와 API를 `components/` 아래로 옮기고 페이지는 그대로 두었다
- **Web** · `BranchMemberApplications`
지점 신청 제목·예약 바로가기
현상/기능
- 상단 제목을 PULSE BOX 운동 가능한 곳으로, 예약 가능 클릭 시 해당 지점 수업예약
작업
- 하단 예약 가능을 `/booking/calendar?branchId=` 로 연결하고, 캘린더가 그 지점 슬롯을 조회한다
- **Web**
지점 신청 화면 상하 분리
현상/기능
- 상단은 미등록 지점, 하단은 신청·가입. 신청/취소 시 서로 이동
- 하단에서 신청취소하면 상단으로 돌아온다
작업
- 상단 신청 가능 목록과 하단 신청·가입 목록으로 나누고, pending 만 신청취소 한다
- 본인 pending 신청만 취소하는 API와 프로시저를 추가했다
- **Web**
- **API/DB** · , `sp_cancel_my_branch_membership`
사용자관리 지점 셀렉트·승인 대기 필터
현상/기능
- 지점 셀렉트 한 줄 표시, 승인상태는 대기만 필터
작업
- 지점 필터 너비를 320px로 늘리고, 목록 기본 필터를 승인 대기(`pending`)로 두었다
- **Web/API** · `UserManagement`
계정 승인 메뉴 미사용
현상/기능
- 사용자 관리와 겹치므로 계정 승인은 쓰지 않는다. 페이지는 삭제하지 않고 메뉴만 disable
작업
- 페이지·라우트·API는 유지한다. 메뉴 `is_active`/`is_visible` 은 사용자가 직접 끈다. 계정 승인은 `/admin/usermanager` 에서 한다
- **결정** · `/admin/account-approvals`