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

점주 가게 등록 #18

Merged
merged 49 commits into from
Aug 14, 2024
Merged

점주 가게 등록 #18

merged 49 commits into from
Aug 14, 2024

Conversation

june-777
Copy link
Member

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

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

Issue Link - #5

구현하며 구체화된 비즈니스 요구사항이 있어서 아래에 첨부합니다.
PR Merge 승인되면, Wiki - 요구사항 명세서를 갱신하겠습니다.

기능 요구사항

  • 가게 이름, 전화번호, 위치 정보, 카테고리, 이용 시간(시작 시간 / 종료 시간), 최소 주문 금액을 입력해 가게를 등록할 수 있다.
    • Store 도메인 객체에 필드 반영
    • 카테고리 → StoreCategory 엔티티
  • 한명의 점주는 여러개의 가게를 등록할 수 있다.
    • Store → Vendor (ManyToOne) (동훤님이 엔티티 설계로 사전에 세팅함)

가게 이름

- 가게 이름은 2자 ~ 10자까지 가능

가게 주소

- 송파구만 가능 (위치정보 논의 필요)

최소 주문 금액

- 최소 주문 금액은 5,000원 이상 가능
- 최소 주문 금액은 1,000원 단위로 가능

가게 이용 시간 (시작 시간 / 종료 시간)

- 가게 이용 시간은 시작 시간과 종료 시간으로 구성
- 시작 시간은 종료 시간보다 이전만 가능
- 시작 시간 / 종료 시간은 분(m) 단위까지 가능

💡 이슈를 처리하면서 추가된 코드가 있어요.

Store CustomException

Store Exception Handler

  • 가게 관련 예외를 핸들링하는 글로벌 예외 핸들러
  • 글로벌 예외 핸들러에 대한 논의가 진행되지 않아, 가게 관련 예외만 핸들링하도록 구현함
  • [feat] Store 예외 핸들러 구현

Configuration Yaml

DateTimeProvider 인터페이스

주석 처리

  • 인터페이스의 경우 설계 의도에 대한 팀원 공동의 합의가 필요한 부분이기 때문에 javadocs로 주석처리함
  • 서비스 계층에서 반환되는 RuntimeException을 javadocs로 주석처리함

💡 이런 고민을 했어요.

한명의 점주가 여러개의 가게를 등록할 수 있다.

  • 동일한 가게를 등록할 수 없도록 검증해야하지 않나?
  • 그러면 가게를 식별할 수 있는 정보가 필요한데, 현재로썬 가게 식별 정보가 없다.
  • 지난 회의에서 사업자 번호가 필요없을 것으로 판단되어 폐기하였는데, 사업자 번호로 가게를 식별하도록 해야할 것 같다.
  • 아니면 사업자 번호 외의 다른 식별 정보가 있을까?

가게 위치 정보에 대한 요구사항 정의

  • 지난 회의에서 위치 정보에 대한 요구사항이 러프하게 진행되었음.
    • 송파구로만 한정
    • 구 정보로만 한정
  • 요구사항이 명확하게 정의되어야, 엔티티 설계를 마무리할 수 있음
    • 현재는 프로토타입으로서 송파구로만 한정하도록 간략히 개발함.
  • 또한 가게 등록 검증 과정에서 위치 정보에 대한 검증도 필요할 것으로 생각함.
    • i.g) 해당 위치의 가게는 이미 등록된 가게입니다.
    • 해당 검증을 수행하려면, 마찬가지로 가게 위치 정보에 대한 요구사항 정의를 fix 해야함.

💡 다음 자료를 참고하면 좋아요.

  • TODO

✅ 셀프 체크리스트

  • TODO
  • 내 코드를 스스로 검토했습니다.
  • 필요한 테스트를 추가했습니다.
  • 모든 테스트를 통과합니다.
  • 브랜치 전략에 맞는 브랜치에 PR을 올리고 있습니다.
  • 커밋 메세지를 컨벤션에 맞추었습니다.
  • wiki를 수정했습니다.
    • 기능 요구사항이 구체화되었는데, PR 승인 완료되면 wiki에 반영하겠습니다.

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

notice:
- 카테고리 → StoreCategory 도메인 엔티티
- 주소 → Address 임베디드  타입
- 이용 시간 → StoreTime 임베디드 타입
- 도메인 생성 검증은 StoreValidator 에서 절차지향으로 진행
가게 이름은 2글자 ~ 10글자만 가능
- 가게 주소는 송파구만 가능
- 추후 가게 위치 비즈니스 요구사항을 구체화하면, 주소 검증 로직 수정 필요
- 5,000원 이상
- 1,000원 단위
- 가게 시작/종료 시간은 분 단위까지 가능
- 가게 시작 시간은 종료 시간보다 이전
임베디드 타입 사용 이유
- 주소는 도시/구/상세주소 같은 정보들로 그룹핑 됨
- 현재는 프로토타입으로서 구 정보만 사용하지만, 가게 주소 비즈니스 요구사항이 구체화되면 다른 정보들도 활용할 여지가 있음
- 구체화가 완료되면, 엔티티로 분리할 것인지 논의 필요
임베디드 타입 사용 이유
- 이용 시간은 시작 시간/ 종료 시간 정보로 그룹핑 됨
- LocalDateTime 과 변수명만으로는 비즈니스 요구사항을 명시적으로 표현하기 제약이 있음
도메인 엔티티로 분리한 이유:
- 가게 카테고리는 DB 레벨에서 관리해야, 추후 카테고리를 추가/생성/삭제할 때 변경 이상에 대처가 용이할 것으로 판단
인터페이스 설계 이유:
날짜 API 를 직접 참조함으로서 테스트하기 어려워지는 코드를 예방하기 위함
시간 관련 로직을 테스트할 때 사용
사용 방법은 javadocs 로 샘플 코드 기재
@june-777 june-777 added the ✨ Feature 기능 개발 label Aug 11, 2024
@june-777 june-777 self-assigned this Aug 11, 2024
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 로 변경함
@june-777 june-777 linked an issue Aug 11, 2024 that may be closed by this pull request
@june-777 june-777 marked this pull request as ready for review August 11, 2024 16:38
@june-777 june-777 force-pushed the feature/june-777_점주가게등록 branch 2 times, most recently from 2a85f8d to 8822290 Compare August 13, 2024 13:21
@june-777 june-777 force-pushed the feature/june-777_점주가게등록 branch from 1d39d54 to 8822290 Compare August 13, 2024 13:56
Copy link
Member

@kimhyun5u kimhyun5u left a comment

Choose a reason for hiding this comment

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

제가 이따가는 못 볼 것 같아서 미리 승인 해놓겠습니다!

테스트 코드 깨지는 것만 수정해주시고 올리시면 될 것 같아요.

DTO 관련 논의는 추후 #42 에서 진행하는 걸로 하겠습니다.

@june-777 june-777 dismissed Hyeon-Uk’s stale review August 13, 2024 17:19

merge conflict 과정에서 force push 를 진행하여, 사라진 커밋에 대한 리뷰입니다. 리뷰남겨주신 부분은 반영완료했습니다!

@june-777 june-777 mentioned this pull request Aug 13, 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.

ResolveArgument가 중복될 수 있으니 conflict 처리까지해주시면 감사하겠습니다 :)

@june-777 june-777 merged commit 8f3b355 into main Aug 14, 2024
1 check passed
@june-777 june-777 deleted the feature/june-777_점주가게등록 branch August 14, 2024 12:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 기능 개발
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[기능] 점주 가게 등록
3 participants