Skip to content

feat: 온보딩에 키/몸무게 입력 추가 및 칼로리 계산 개인화#146

Merged
leepg038292 merged 6 commits into
devfrom
feat/add-user-body-metrics
Nov 9, 2025
Merged

feat: 온보딩에 키/몸무게 입력 추가 및 칼로리 계산 개인화#146
leepg038292 merged 6 commits into
devfrom
feat/add-user-body-metrics

Conversation

@hskhsmm
Copy link
Copy Markdown
Member

@hskhsmm hskhsmm commented Nov 9, 2025

#️⃣ 연관 이슈

ex) #145

작업 목적

  • 사용자별 정확한 칼로리 계산을 위해 키/몸무게 정보 수집
  • 온보딩 단계에서 신체 정보 입력 기능 추가
  • 프론트/워치에서 동일하게 사용할 칼로리 계산 공식 표준화

변경 사항

  1. User 엔티티 수정
  • height (키, cm) 필드 추가
  • weight (몸무게, kg) 필드 추가
  • completeOnboarding() 메서드에 height, weight 파라미터 추가
  1. 온보딩 API 수정
  • OnboardingRequest: 키/몸무게 입력 필드 추가
    • height: 100 ~ 250cm 유효성 검증
    • weight: 30 ~ 200kg 유효성 검증
  • UserInfoResponse: 키/몸무게 응답 필드 추가
  • UserService: 온보딩 로직에 height, weight 저장 추가
  1. CalorieCalculator 유틸 추가
  • METs(Metabolic Equivalent of Task) 기반 칼로리 계산 로직
  • 속도별 METs 값:
    • 걷기 (< 6 km/h): 3.5
    • 조깅 (6-8 km/h): 7.0
    • 러닝 (8-10 km/h): 9.0
    • 빠른 러닝 (≥ 10 km/h): 11.0
  • 프론트엔드/워치 개발자를 위한 상세 JavaDoc 및 구현 가이드 포함

🔧 기술 스펙

칼로리 계산 공식

칼로리(kcal) = 체중(kg) × METs × 시간(h) × 1.05

API 요청 예시

POST /v1/auth/onboarding
{
"nickname": "홍러너",
"residence": "서울특별시 강남구",
"age_group": "TWENTIES",
"gender": "MALE",
"height": 175,
"weight": 70,
"weekly_goal_distance": 15.5,
"profileImageKey": "profiles/123/profile.jpg"
}

API 응답 예시

GET /v1/users/me
{
"id": 12345,
"nickname": "홍러너",
"height": 175,
"weight": 70,
...
}


테스트

  • 빌드 성공 (./gradlew clean build -x test)
  • 컴파일 성공 (./gradlew compileJava)
  • 온보딩 API 테스트 (Postman/Swagger)
  • 칼로리 계산 로직 검증

프론트엔드 작업 필요 사항

  1. 온보딩 화면 수정
  • 키 입력 필드 추가 (100-250cm)
  • 몸무게 입력 필드 추가 (30-200kg)
  1. 칼로리 계산 로직 적용
  • CalorieCalculator.java의 JavaDoc에 포함된 TypeScript/Kotlin 코드 참고
  • 동일한 METs 기반 계산식 사용
  1. API 요청 수정
  • 온보딩 요청에 height, weight 필드 추가

워치 작업 필요 사항 (추후)

  • CalorieCalculator JavaDoc의 Kotlin 구현 코드 참고
  • 동일한 METs 기반 계산식 적용

관련 이슈

  • 칼로리 계산 로직 개선 (#이슈번호)

체크리스트

  • User 엔티티 height, weight 필드 추가
  • 온보딩 Request/Response DTO 수정
  • UserService 로직 수정
  • CalorieCalculator 유틸 작성
  • 빌드 테스트 통과
  • API 문서 업데이트 (Swagger)
  • 프론트엔드 개발자에게 계산 공식 전달

추가 노트

현재 아키텍처 유지:

  • 거리/시간/페이스: 프론트 계산 → 백엔드 저장 (기존 방식 유지)
  • 칼로리: 프론트 계산 → 백엔드 저장 (동일한 방식)
  • 백엔드는 필요 시 CalorieCalculator로 검증 가능 (옵션)

프론트/워치 개발자 참고:
src/main/java/com/waytoearth/util/CalorieCalculator.java 파일의 상세한 JavaDoc을 확인하세요. TypeScript와 Kotlin 구현 예제가 포함되어 있습니다.

@hskhsmm hskhsmm requested a review from leepg038292 November 9, 2025 14:42
@hskhsmm hskhsmm self-assigned this Nov 9, 2025
@hskhsmm hskhsmm added the smin 홍성민이 관리하거나 작성한 이슈입니다 label Nov 9, 2025
@hskhsmm hskhsmm added the feature label Nov 9, 2025
Copy link
Copy Markdown
Contributor

@leepg038292 leepg038292 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

개인화된 칼로리 수치 확인할 수 있겠네요 확인했습니다.

@leepg038292 leepg038292 merged commit 1cc6502 into dev Nov 9, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature smin 홍성민이 관리하거나 작성한 이슈입니다

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants