-
Notifications
You must be signed in to change notification settings - Fork 1
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
The head ref may contain hidden characters: "feature/june-777_\uC810\uC8FC\uC74C\uC2DD\uC0C1\uD488\uAC8C\uC2DC"
Conversation
기능 요구사항: 가게 이름, 전화번호, 위치 정보, 카테고리, 이용 시간, 최소 주문 금액을 입력해 가게를 등록 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
src/main/java/camp/woowak/lab/store/service/StoreMenuRegistrationService.java
Show resolved
Hide resolved
src/main/java/camp/woowak/lab/store/repository/StoreRepository.java
Outdated
Show resolved
Hide resolved
- 점주 - 가게 일대다 관계로, 점주 ID로 조회하면 가게 목록을 조회하게 됨
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM :-)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
음식 메뉴에 대한 수량 및 판매 게시는 #59 에서 처리합니다.
💡 다음 이슈를 해결했어요.
Issue Link - #8
커밋은 [feat] 메뉴카테고리 엔티티 설계 부터 확인하시면 됩니다.
컨트롤러 및 서비스 계층 코드 스타일 통일은 해당 PR 머지후 진행할 예정입니다.
💡 이런 고민을 했어요.
가게, 메뉴, 메뉴카테고리 엔티티 설계
기능 요구사항: 음식 상품에서 카테고리를 기재할 때, 해당 가게에 등록한 음식 카테고리를 조회한다.
위의 요구사항을 만족하기 위해선, 가게ID를 기준으로 음식 상품 카테고리를 조회할 수 있어야 함. 음식 상품 카테고리가 가게를 참조 (FK)하고 있지 않는다면, 가게 ID 기준으로 음식 카테고리를 조회하는데 제약이 있음.
✅ 셀프 체크리스트