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

[feature] 가게 등록 API #47

Merged
merged 23 commits into from
Aug 11, 2024
Merged

[feature] 가게 등록 API #47

merged 23 commits into from
Aug 11, 2024

Conversation

jcw1031
Copy link
Member

@jcw1031 jcw1031 commented Aug 11, 2024

#️⃣ 연관된 이슈

#12

📝 작업 내용

  • DB의 가게 테이블과 매핑되는 entity를 추가했습니다.
  • 가게 도메인을 표현할 수 있는 객체를 추가했습니다.
  • 가게 등록 비즈니스 로직을 작성했습니다.

테크 스펙

스크린샷 (선택)

💬 리뷰 요구사항(선택)

  • 서비스 레이어에서 외부 라이브러리에 대한 의존을 하지 않으며, 비즈니스 로직 흐름이 잘 보이도록 작성해 보았습니다. 더 좋은 방향이 있다면 알려주세요!
  • 테스트 코드 작성에 대한 의문이 있었습니다. 프로젝트의 방향성과 목표를 고려했을 때 테스트 코드를 작성하지 않고 빠르게 구현하는 게 좋을까요??
  • 처음 코드 베이스를 작성할 게 있다 보니 diff line이 많아졌네요.. 죄송합니다!ㅠ

RCA 룰

| 코드 리뷰 멘토가 PR작성자에게 어떤 의도로 전달 되길 바라는지 알파벳으로 표현해주세요!

  • r(request change): 꼭 반영
  • c(comment): 왠만하면 반영
  • a(approve): 반영해도 좋고 넘어가도 좋은 의견

jcw1031 added 21 commits August 11, 2024 15:54
- 가게를 나타내는 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로 변경
@jcw1031 jcw1031 added the 💫Feature 기능 구현 label Aug 11, 2024
@jcw1031 jcw1031 self-assigned this Aug 11, 2024
@jcw1031 jcw1031 linked an issue Aug 11, 2024 that may be closed by this pull request
1 task
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,

Choose a reason for hiding this comment

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

r: image 필드에 @NotBlank 어노테이션을 추가하여 필수 입력값으로 설정하는 것이 좋습니다.

Copy link
Member

@hellomatia hellomatia Aug 11, 2024

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 가게에 대한 유효성 검사

Choose a reason for hiding this comment

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

r: 유효성 검사 로직이 구현되지 않았습니다. 반드시 구현해야 합니다.

Copy link
Member

@hellomatia hellomatia Aug 11, 2024

Choose a reason for hiding this comment

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

a: 향후에 완성시키는 Validator일까요?

@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
@woowa-techcamp-2024 woowa-techcamp-2024 deleted a comment from github-actions bot Aug 11, 2024
hellomatia
hellomatia previously approved these changes Aug 11, 2024
Copy link
Member

@hellomatia hellomatia left a comment

Choose a reason for hiding this comment

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

고생하셨습니다!!

저도 지금 테스트 코드에 대해서 고민을 해보았는데요!

팀내에서 아직 테스트에 대해 세부적으로 정한게 없어, 레거시가 될 수 있다는 생각이 들어서 우선 빠르게 구현하고 성능 테스트 후 리팩토링 하기 전에 작성을 목표로 하고 있습니다.

내일 만나서 한번 이야기 나누어 봐요!

Comment on lines +80 to +83
@PrePersist
public void setupUuid() {
this.uuid = UUID.randomUUID();
}
Copy link
Member

@hellomatia hellomatia Aug 11, 2024

Choose a reason for hiding this comment

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

c: 향후 개발자가 디버깅 하기 쉽도록 UUID로 저장하는 대신, restaurant_UUID로 저장하는건 어떨까요?

Comment on lines +80 to +83
@PrePersist
public void setupUuid() {
this.uuid = UUID.randomUUID();
}
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
@PrePersist
public void setupUuid() {
this.uuid = UUID.randomUUID();
}
@PrePersist
public void setupUuid() {
this.uuid = "restaurant_" + UUID.randomUUID();
}

- 레코드 클래스의  accessor 사용
@jcw1031
Copy link
Member Author

jcw1031 commented Aug 11, 2024

고생하셨습니다!!

저도 지금 테스트 코드에 대해서 고민을 해보았는데요!

팀내에서 아직 테스트에 대해 세부적으로 정한게 없어, 레거시가 될 수 있다는 생각이 들어서 우선 빠르게 구현하고 성능 테스트 후 리팩토링 하기 전에 작성을 목표로 하고 있습니다.

내일 만나서 한번 이야기 나누어 봐요!

네 좋습니다! 감사합니다 ㅎㅎ

- prefix에 restaurant_를 추가해 디버깅 시 개발자가 객체 종류를 파악하기 쉽도록 변경
@jcw1031 jcw1031 merged commit d61979b into dev Aug 11, 2024
@hek-git hek-git deleted the feature/#12-create-restaurant branch August 13, 2024 08:02
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.

[feature] 가게 정보 등록 API
2 participants