feat(health): HealthCondition CRUD 및 테스트코드 구현#8
Hidden character warning
Conversation
건강상태(HealthCondition) 및 사용자 건강상태(UserHealthCondition) 엔티티에 대한 CRUD 기능을 구현하고 관련 테스트 코드를 완성했습니다. - HealthCondition 및 UserHealthCondition 엔티티와 이에 대한 Controller, Service, Repository, DTO, Exception 등 기본 구조를 구현했습니다. - UserHealthCondition 엔티티의 업데이트 로직을 추가하고, UserHealthConditionService의 업데이트 메서드를 구현했습니다. - HealthCondition 및 UserHealthCondition의 컨트롤러와 리포지토리 계층에 대한 테스트 커버리지를 높이고 안정성을 강화했습니다. - 기존의 HealthSummary, RiskAnalysis 관련 모듈을 새로운 HealthCondition 기반 구조로 대체했습니다.
- HealthCondition 및 UserHealthCondition 관련 DTO에 `@Schema` 어노테이션을 추가하여 Swagger 문서의 가독성을 향상시켰습니다. - Request DTO에서 `@NotBlank`, `@NotNull` 등의 유효성 검사 어노테이션을 제거하여, 유효성 검증 책임을 서비스 계층 또는 컨트롤러에서 명시적으로 처리하도록 변경했습니다. - PROMPTLOG.md 및 record.md에 최근 작업(문서 복구, DTO 개선) 내역을 기록했습니다.
Ji-Un-Gil
left a comment
There was a problem hiding this comment.
AI의 피드백 중 생각해 볼만한 부분이 있어서 가져왔습니다. 제가 맡은 부분이었던 diet 도메인의 service 구현을 AI에게 작업시켰을 때, 순환 참조 및 도메인 결합도 등의 문제로 facade 패턴을 사용하여 구현했는데 이 부분에 대해 health 도메인에서도 적용을 추천하는 것으로 보입니다.
LGTM🥳
HealthConditionService와 UserHealthConditionService 모두 역할에 맞게 잘 구현되어 있습니다. UserHealthConditionService에서 User와 HealthCondition 엔티티를 조회할 때 NotFoundException을 던져 처리하는 방식은 명확하고 좋습니다.
다만, UserHealthConditionService가 UserRepository와 HealthConditionRepository를 직접 참조하는 부분은 도메인 간 결합도를 높일 수 있습니다. 지금은 구조가 복잡하지 않아 큰 문제가 아니지만, 향후 확장을 고려한다면 UserHealthConditionService의 메서드가 엔티티 ID 대신 User와 HealthCondition 엔티티 객체를 직접 파라미터로 받도록 시그니처를 변경하는 것을 고려해볼 수 있습니다.
// AS-IS
public UserHealthConditionResponse create(UserHealthConditionCreateRequest request) {
User user = userRepository.findById(request.userId())
.orElseThrow(UserNotFoundException::new);
// ...
}
// TO-BE (Facade 패턴 등과 함께 사용)
public UserHealthConditionResponse create(User user, HealthCondition healthCondition, String memo) {
// ...
}이렇게 하면 UserHealthConditionService는 health 도메인에만 집중할 수 있게 되며, 사용자 조회 등의 책임은 UserService나 상위의 Facade 계층으로 위임할 수 있습니다.
🎯 PR 타입
Feat: 새로운 기능 추가
Fix: 버그 수정
Docs: 문서 수정
Style: 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우
Refactor: 코드 리팩토링
Test: 테스트 코드 추가 또는 리팩토링
Chore: 빌드 부분 혹은 패키지 매니저 수정
📌 관련 이슈
Related Issue: BS-35
📝 개요
작업 배경 (Why)
사용자의 건강 정보를 체계적으로 관리하고, 이를 기반으로 맞춤형 서비스를 제공하기 위한 기반을 마련합니다. 기존에 분산되어 있던 HealthSummary, RiskAnalysis 등의 모듈을 폐기하고, 명확한 HealthCondition
마스터 데이터와 사용자와의 매핑 관계(UserHealthCondition)를 중심으로 도메인을 재설계했습니다.
✅ 작업 상세 내용
📸 결과 및 테스트 방법
실행 결과:
테스트 방법:
HealthConditionController테스트:UserHealthConditionController테스트:짚 리뷰어 집중 포인트
롤백 계획 (Rollback Plan)
의존성 변경 (Dependency Changes)
🤖 AI 참고사항 (for AI)
✅ PR 제출 전 체크리스트
PR 제목은 Conventional Commit에 맞게 작성했습니다.
main 브랜치로부터 최신 코드를 반영했습니다. (rebase)
스스로 코드 리뷰를 진행했습니다.
변경 사항에 대한 테스트를 완료했습니다.
관련 Jira 이슈를 연결했습니다.
Assignees, Reviewers, Labels를 올바르게 설정했습니다.