Skip to content

feat: 알코올 벌크 등록과 Excel 공통 검증 구현 - #749

Open
Whale0928 wants to merge 7 commits into
mainfrom
feat/bulk-alcohols
Open

feat: 알코올 벌크 등록과 Excel 공통 검증 구현#749
Whale0928 wants to merge 7 commits into
mainfrom
feat/bulk-alcohols

Conversation

@Whale0928

Copy link
Copy Markdown
Collaborator

Excel 업로드와 직접 만든 JSON 입력이 동일한 검증·벌크 저장 로직을 사용하도록 구현했습니다. 입력 오류는 저장 전에 차단하고, 중복 후보나 카테고리 불일치는 경고로 반환해 운영자가 등록 후 정리할 수 있도록 했습니다.

변경 내용

  • POST /admin/api/v1/alcohols/bulk/validate, POST /admin/api/v1/alcohols/bulk를 추가했습니다. 요청당 1~1,000행을 처리하며 clientRowId로 검증 결과와 생성된 alcoholId를 연결합니다.
  • 기존 Excel 검증 응답에 정규화된 벌크 입력을 추가했습니다. 템플릿 다운로드 → Excel 검증 → 벌크 저장과 JSON 검증 → 벌크 저장이 같은 계약을 사용합니다.
  • 저장 시 전체 요청을 다시 검증하고 단일 트랜잭션으로 처리합니다. 오류 행이 있거나 저장 중 예외가 발생하면 전체 요청을 저장하지 않습니다.
  • 주종 9종, 카테고리 그룹 6종, 참조 ID, 문자열 길이, 도수·용량을 공통으로 검증합니다. 선택 메타데이터는 생략할 수 있으며 중복 후보·신규 카테고리·분류 불일치는 경고로 제공합니다. 자동 병합이나 기존 데이터 갱신은 수행하지 않습니다.
  • Excel 안내 문구, 보조 시트 순서·삭제, 추가 메모 시트 제한을 완화했습니다. 필수 헤더, 수식·외부 링크, 파일 구조·용량·행 수 제한은 유지하고 백분율 셀 해석을 수정했습니다.
  • 이미지는 선택 항목이며 기존 업로드 결과의 viewUrl을 받습니다. 이미지 활성화 이벤트와 관리자 감사 정보를 유지하고 임시 업로드 URL은 차단합니다.
  • OpenAPI 응답 구조와 요청 범위, 오류·인증 계약을 실제 HTTP 응답에 맞췄습니다.

검증

GitHub Actions 실행 #704에서 전체 작업이 성공했습니다.

검증 작업 통과한 테스트 수
unit_test 1,017
batch_test 106
check_rule_test 66
integration_test 369
admin_integration_test 298
합계 1,856

실패·오류·건너뛴 테스트는 모두 0건이며 ./gradlew build -x test --build-cache --parallel도 성공했습니다. 실제로 내려받은 Excel을 검증한 뒤 DB에 저장하는 경로, 직접 JSON 입력 경로, 경고가 있는 데이터 저장, 검증 이후 입력 변경, 트랜잭션 롤백, 인증과 OpenAPI 계약을 테스트했습니다.

검증 대상 코드 커밋은 359e058a674df722c6949613e3bd26c56521b6d5입니다. 이후 커밋 dcead9e71464a8c196d8fe48ded7ead484bcbc2e는 계획 문서에 검증 결과만 기록했습니다.

연동 시 참고 사항

  • 같은 요청을 다시 저장하면 새 레코드가 생성됩니다. 멱등성을 제공하지 않으므로 저장 요청의 자동 재시도는 피해야 합니다.
  • 프론트엔드 API 연결과 이미지 파일 직접 업로드는 이번 변경에 포함하지 않습니다.
  • DB 스키마·마이그레이션·의존성 변경은 없습니다. 개발·운영 DB에 데이터를 쓰거나 배포하지 않았습니다.
  • 상세 입력 규칙과 검증 근거는 plan/2026.09.05 알코올 벌크 등록.md에 기록했습니다.

관련 프론트엔드 연동 이슈: bottle-note/workspace#431

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant