아래 값들을 모두 포함하는 Store 엔티티, 테이블을 생성하세요.
@DynamicInsert
@Entity
@Table
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Store {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@Embedded
private Address address;
@Embedded
private Phone phone;
}
나는 주소와 전화번호는 임베디드 타입으로 구현했다.
(심화) 아래 요구사항을 만족하게 구현하세요.
주소에는 도로명 주소와 상세 주소가 포함됩니다.
@Embeddable
@Getter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Address {
@Column(name = "address_roadcode")
private String roadCode;
@Column(name = "address_detail")
private String detail;
}
하나의 상점은 여러개의 상품을 갖을 수 있습니다.
나는 product
와 store
관계를 다대일 양방향으로 구현했다.
PK
는 다에 해당하는 product
에 있으며, 연관관계의 주인은 product
이다.
public class Store {
...
@OneToMany(mappedBy = "store")
private List<ProductEntity> products = new ArrayList<>();
}
먼저 store
는 product 리스트
를 참조하게 한다.
public class ProductEntity {
...
@ManyToOne
@JoinColumn(name = "store_id")
private Store store;
}
product
는 store
를 참조한다. 여기 store
가 연관관계의 주인이다.
public class ProductEntity {
...
/**
* 연관관계 편의 메서드
*/
public void assignStore(Store store) {
this.store = store;
store.getProducts().add(this);
}
}
product
와 store
는 양방향 관계이므로, 연관관계 편의 메서드
를 작성해주어야 한다.
나는 product
의 로직이 store
로직보다 중요할 거 같다는 생각이 들어 Product
에 연관관계 메서드를 작성했다.
아래 요구사항을 만족하는 기본 api를 구현하세요.
Product 도메인과 거의 동일하게 구현하였기 때문에 고민했던 부분만 적어보겠다!
하나의 상점에 속하는 모든 상품 조회 api
를 구현하면서,
1. StoreRepository
에 해당 메서드 구현함 (근데 상품을 찾아오는게 Store의 역할인가? 싶었다.)
2. 그래서 ProductJpaRepository
에 구현하고, StoreService
에서 ProductJpaRepository
를 쓰자!고 생각했다. (근데 Store가 Product에 의존하게 되지 않나?)
3. 결국 ProductJpaRepository
에 구현하고, ProductJpaService
에서 사용 (product를 조회하는 건 Product가 담당)
이런 생각의 변화가 있었다.
그냥 기록하기 위해 적는다...
springfox-swagger
, springdoc-openapi-ui
중 하나를 선택해서 swagger 문서를 생성해보세요.
API문서는 아직(!) 만들지 않았습니다...
store
기능을 추가하면서 처음에는 남들 코드를 최대한 보지 않으려고 노력했다. (나의 Product 코드도 안보려고 했다..!)branch merge
의 개념이 어려워서 day4를 day7에 병합을 잘 한 건지 모르겠다.. swagger
로 api 문서 만들기(를 빠른 시일 내에 하자!)
storeId로 products를 찾기
는 누구의 역할인가?연관관계 편의 메서드
위치monetaryUnit
Enum의 위치