Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feat] 점주 음식 상품 게시 #51

Merged
merged 78 commits into from
Aug 15, 2024

Conversation

june-777
Copy link
Member

@june-777 june-777 commented Aug 14, 2024

💡 다음 이슈를 해결했어요.

Issue Link - #8


💡 이런 고민을 했어요.

가게, 메뉴, 메뉴카테고리 엔티티 설계

image
  1. 음식 상품 카테고리가 가게를 참조하고 있어야하는지 고민. 결론적으로는 참조하고 있어야 함
  • 기능 요구사항: 음식 상품에서 카테고리를 기재할 때, 해당 가게에 등록한 음식 카테고리를 조회한다.

  • 위의 요구사항을 만족하기 위해선, 가게ID를 기준으로 음식 상품 카테고리를 조회할 수 있어야 함. 음식 상품 카테고리가 가게를 참조 (FK)하고 있지 않는다면, 가게 ID 기준으로 음식 카테고리를 조회하는데 제약이 있음.

  1. 연관관계 매핑에 대한 고민. 결론적으로는 음식 상품 카테고리 - 가게를 다대일로 설계
  • 음식 상품 카테고리는 메인 메뉴, 사이드 메뉴, 해산물 메뉴, 식사 메뉴, 점심 메뉴 즉, 해당 가게 점주가 원하는 카테고리를 커스텀하게 등록할 수 있다. 다시말해, 음식 상품 카테고리는 특정 가게에 종속된다.
  • 음식 상품 카테고리는 하나의 가게에 종속된다. 하나의 가게는 여러 음식 상품 카테고리를 가질 수 있다.

✅ 셀프 체크리스트

  • 내 코드를 스스로 검토했습니다.
  • 필요한 테스트를 추가했습니다.
  • 모든 테스트를 통과합니다.
  • 브랜치 전략에 맞는 브랜치에 PR을 올리고 있습니다.
  • 커밋 메세지를 컨벤션에 맞추었습니다.
  • wiki를 수정했습니다.

기능 요구사항:
가게 이름, 전화번호, 위치 정보, 카테고리, 이용 시간, 최소 주문 금액을 입력해 가게를 등록

notice:
- 카테고리 → StoreCategory 도메인 엔티티
- 주소 → Address 임베디드  타입
- 이용 시간 → StoreTime 임베디드 타입
- 도메인 생성 검증은 StoreValidator 에서 절차지향으로 진행
가게 이름은 2글자 ~ 10글자만 가능
- 가게 주소는 송파구만 가능
- 추후 가게 위치 비즈니스 요구사항을 구체화하면, 주소 검증 로직 수정 필요
- 5,000원 이상
- 1,000원 단위
- 가게 시작/종료 시간은 분 단위까지 가능
- 가게 시작 시간은 종료 시간보다 이전
임베디드 타입 사용 이유
- 주소는 도시/구/상세주소 같은 정보들로 그룹핑 됨
- 현재는 프로토타입으로서 구 정보만 사용하지만, 가게 주소 비즈니스 요구사항이 구체화되면 다른 정보들도 활용할 여지가 있음
- 구체화가 완료되면, 엔티티로 분리할 것인지 논의 필요
임베디드 타입 사용 이유
- 이용 시간은 시작 시간/ 종료 시간 정보로 그룹핑 됨
- LocalDateTime 과 변수명만으로는 비즈니스 요구사항을 명시적으로 표현하기 제약이 있음
도메인 엔티티로 분리한 이유:
- 가게 카테고리는 DB 레벨에서 관리해야, 추후 카테고리를 추가/생성/삭제할 때 변경 이상에 대처가 용이할 것으로 판단
인터페이스 설계 이유:
날짜 API 를 직접 참조함으로서 테스트하기 어려워지는 코드를 예방하기 위함
시간 관련 로직을 테스트할 때 사용
사용 방법은 javadocs 로 샘플 코드 기재
Store 와 관련된 예외임을 명시적으로 나타내고자 함
IllegalArgumentException 등 Java 에서 제공하는 기본 예외는 예외의 명시성이 떨어진다 판단
기본 생성자는 애노테이션 사용 및 protected 접근 제어자로 설정
- repository 단위 테스트는 @DataJpaTest 로 최소한의 Bean 만 주입하여 사용
- @SpringBootTest 는 모든 Bean 을 로드하기 때문에 테스트가 무거워짐
- 가게 카테고리 이름으로 조회하는 시그니쳐 추가
- StoreRepository 단위 테스트를 위해 정의함
- Store 엔티티를 저장할 때, 참조중인 Vendor(Not Null) 를 저장해야 Not-Null Property Exception 이 발생하지 않음
- 발생가능한 RunTimeException 은 javadocs 로 명시
- Not Null, 빈값, 빈값 포함한 공백 에 대한 입력 검증은 Bean Validation 으로 검증함
order 는 DBMS 예약어라서 Auto DDL 과정에서 예외가 발생함
- datasource: 인메모리 H2 DB를 사용하도록 설정
- h2: h2 웹 콘솔 사용 가능하도록 설정
- jpa: ddl 자동 생성, sql 로깅 설정
- 설정 내용의 depth 가독성이 용이하여, properties 를 yaml 로 변경함
- 가게 관련한 예외의 범주를 ErrorCode Enum 으로 한정하도록 함
- 예외 메시지를 응집하여, 테스트 코드에서 예외 메시지 검증으로 구체적인 검증이 용이하도록 하기 위함
…상품게시

# Conflicts:
#	src/main/java/camp/woowak/lab/menu/domain/Menu.java
#	src/main/java/camp/woowak/lab/order/domain/Order.java
#	src/main/java/camp/woowak/lab/store/domain/Store.java
#	src/main/java/camp/woowak/lab/store/repository/StoreRepository.java
#	src/main/java/camp/woowak/lab/store/service/StoreRegistrationService.java
#	src/main/java/camp/woowak/lab/store/service/dto/StoreRegistrationRequest.java
#	src/main/java/camp/woowak/lab/vendor/domain/Vendor.java
#	src/main/java/camp/woowak/lab/web/api/store/StoreApiController.java
#	src/main/java/camp/woowak/lab/web/api/store/StoreExceptionHandler.java
#	src/test/java/camp/woowak/lab/store/repository/StoreRepositoryTest.java
#	src/test/java/camp/woowak/lab/store/service/StoreRegistrationServiceTest.java
#	src/test/java/camp/woowak/lab/web/api/store/StoreApiControllerTest.java
@june-777 june-777 self-assigned this Aug 14, 2024
@june-777 june-777 added the ✨ Feature 기능 개발 label Aug 14, 2024
@june-777 june-777 added this to the 프로토타입 만들기 milestone Aug 14, 2024
@june-777 june-777 changed the title [기능] 점주 음식 상품 게시 [feat] 점주 음식 상품 게시 Aug 14, 2024
@kimhyun5u kimhyun5u requested a review from a team August 14, 2024 11:56
@Dr-KoKo Dr-KoKo mentioned this pull request Aug 14, 2024
6 tasks
Copy link
Contributor

@Hyeon-Uk Hyeon-Uk left a comment

Choose a reason for hiding this comment

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

LGTM :-)

Copy link
Member

@Dr-KoKo Dr-KoKo left a comment

Choose a reason for hiding this comment

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

음식 메뉴에 대한 수량 및 판매 게시는 #59 에서 처리합니다.

@june-777 june-777 merged commit 2e95b15 into main Aug 15, 2024
1 check passed
@june-777 june-777 deleted the feature/june-777_점주음식상품게시 branch August 16, 2024 02:08
@june-777 june-777 linked an issue Aug 16, 2024 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 기능 개발
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

[기능] 점주 음식 상품 등록
3 participants