-
Notifications
You must be signed in to change notification settings - Fork 4
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
[feature] 가게 등록 API #47
Conversation
- 가게를 나타내는 Restaurant 도메인 객체 정의 - 좌표를 표현할 수 있는 Coordinate 객체 정의
- restaurant.domain.RestaurantRegistrant 클래스 - 가게를 RDB에 저장하는 역할을 수행 - 메서드 시그니처 정의
- restaurant.entity.RestaurantEntity 클래스 - DB의 restaurant 테이블과 매핑
- Spring Data JPA 사용 - JpaRepository를 상속받는 인터페이스
- restaurant.event.Event 인터페이스 -> 이벤트 주체 추상화 - restaurant.event.EventPublisher -> 이벤트 발행자 추상화
- restaurant.event.SpringEventPublisher 클래스 - ApplicationEventPublisher를 주입받아 이벤트를 발행하는 객체
- RestaurantEventProvider 클래스 - EventPublisher 인터페이스에 의존
- RestaurantService 클래스 - 메서드 시그니처만 정의 - 비즈니스 로직의 흐름이 잘 보이도록 구현하기
- 요청 DTO의 경우 spring validation을 활용해 필드 검증 - 응답에는 생성된 가게의 UUID를 포함
- org.springframework.boot:spring-boot-starter-validation - mono 모듈에 implementation 레벨로 의존성 추가
- RestaurantController의 registerRestaurant() 메서드 - 서비스 레이어에 로직 수행을 요청하고 생성된 가게의 UUID를 반환받아 응답
- newRestaurant() 정적 메서드 - 요청 DTO에서 필요한 값들을 가져와 할당
- @table의 name 속성 사용 - RestaurantEntity를 restaurant 테이블과 매핑
- 현재는 검증할 부분이 없기 때문에 메서드 시그니처만 정의
- 레코드 클래스로 변경 - 엔티티로부터 도메인 객체를 생성하는 정적 팩토리 메서드 추가
- 비즈니스 로직 흐름에 맞는 각 객체에 메시지 전달 - 로직 종료 후 생성된 가게의 UUID 반환
- RestaurantRegistrant의 register() 메서드 - 도메인 객체를 Entity로 변환해 RDB에 저장 후 새로운 가게 도메인 객체를 생성해 반환
- RestaurantEventProvider의 publishRegistrationEvent() 메서드 - Event 하위 객체로 변환해 EventPublisher를 통해 발행
- restaurant.event.RestaurantRegistrationEvent 레코드 클래스 - Event 인터페이스 하위 클래스
- Hibernate의 hibernate-spatial 의존성 추가 - MySQL의 POINT 타입을 지원 -> org.locationtech.jts.geom.Point
- 매개변수를 가진 생성자와 빌더 추가 - JPA auditing 적용을 위한 어노테이션 추가 - Point 타입 변경 - org.locationtech.jts.geom.Point로 변경
import woowa.team4.bff.restaurant.domain.Coordinate; | ||
|
||
public record CreateRestaurantRequest(@NotBlank String name, @NotBlank String phone, @NotBlank String address, | ||
@NotNull Coordinate location, @NotBlank String introduction, String image, |
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.
r: image
필드에 @NotBlank
어노테이션을 추가하여 필수 입력값으로 설정하는 것이 좋습니다.
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.
a: 혹시 이미지는 필수값이 아닌가요?
public class RestaurantValidator { | ||
|
||
public void validateRestaurant(Restaurant restaurant) { | ||
// TODO 가게에 대한 유효성 검사 |
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.
r: 유효성 검사 로직이 구현되지 않았습니다. 반드시 구현해야 합니다.
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.
a: 향후에 완성시키는 Validator일까요?
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.
고생하셨습니다!!
저도 지금 테스트 코드에 대해서 고민을 해보았는데요!
팀내에서 아직 테스트에 대해 세부적으로 정한게 없어, 레거시가 될 수 있다는 생각이 들어서 우선 빠르게 구현하고 성능 테스트 후 리팩토링 하기 전에 작성을 목표로 하고 있습니다.
내일 만나서 한번 이야기 나누어 봐요!
@PrePersist | ||
public void setupUuid() { | ||
this.uuid = UUID.randomUUID(); | ||
} |
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.
c: 향후 개발자가 디버깅 하기 쉽도록 UUID
로 저장하는 대신, restaurant_UUID
로 저장하는건 어떨까요?
@PrePersist | ||
public void setupUuid() { | ||
this.uuid = UUID.randomUUID(); | ||
} |
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.
@PrePersist | |
public void setupUuid() { | |
this.uuid = UUID.randomUUID(); | |
} | |
@PrePersist | |
public void setupUuid() { | |
this.uuid = "restaurant_" + UUID.randomUUID(); | |
} |
네 좋습니다! 감사합니다 ㅎㅎ |
- prefix에 restaurant_를 추가해 디버깅 시 개발자가 객체 종류를 파악하기 쉽도록 변경
#️⃣ 연관된 이슈
#12
📝 작업 내용
테크 스펙
스크린샷 (선택)
💬 리뷰 요구사항(선택)
RCA 룰
| 코드 리뷰 멘토가 PR작성자에게 어떤 의도로 전달 되길 바라는지 알파벳으로 표현해주세요!