-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
19 changed files
with
293 additions
and
0 deletions.
There are no files selected for viewing
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# Repository Pattern | ||
|
||
레포지토리 패턴에 대해서 학습합니다. | ||
|
||
자세한 내용은 [블로그 포스팅](https://wonit.tistory.com/636?category=955962) 에서 확인할 수 있습니다 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
plugins { | ||
id 'java' | ||
id "io.freefair.lombok" version "6.5.1" | ||
} | ||
|
||
version 'unspecified' | ||
|
||
repositories { | ||
mavenCentral() | ||
} | ||
|
||
dependencies { | ||
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' | ||
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' | ||
} | ||
|
||
test { | ||
useJUnitPlatform() | ||
} |
38 changes: 38 additions & 0 deletions
38
repository-pattern/domain/src/main/java/com/wonit/order/Order.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package com.wonit.order; | ||
|
||
import com.wonit.product.Product; | ||
import com.wonit.util.LongIdGenerator; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
public class Order { | ||
|
||
public static Order create(Long userId, Long totalPrice) { | ||
Long id = LongIdGenerator.gen(); | ||
return new Order(id, userId, new ArrayList<>(), totalPrice); | ||
} | ||
|
||
public static Order by(Long id, Long userId, List<Long> orderItems, Long totalPrice) { | ||
return new Order(id, userId, orderItems, totalPrice); | ||
} | ||
|
||
private final Long id; | ||
private final Long userId; | ||
private List<Long> orderItems; | ||
private Long totalPrice; | ||
|
||
public Order(Long id, Long userId, List<Long> orderItems, Long totalPrice) { | ||
this.id = id; | ||
this.userId = userId; | ||
this.orderItems = orderItems; | ||
this.totalPrice = totalPrice; | ||
} | ||
|
||
public void add(Product product) { | ||
orderItems.add(product.getId()); | ||
|
||
totalPrice += product.getPrice(); | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
repository-pattern/domain/src/main/java/com/wonit/order/OrderRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package com.wonit.order; | ||
|
||
import java.util.Optional; | ||
|
||
public interface OrderRepository { | ||
Order save(Order order); | ||
Optional<Order> findById(Long id); | ||
} |
10 changes: 10 additions & 0 deletions
10
repository-pattern/domain/src/main/java/com/wonit/product/Product.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package com.wonit.product; | ||
|
||
import lombok.Value; | ||
|
||
@Value(staticConstructor = "of") | ||
public class Product { | ||
Long id; | ||
String name; | ||
Long price; | ||
} |
7 changes: 7 additions & 0 deletions
7
repository-pattern/domain/src/main/java/com/wonit/user/User.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.wonit.user; | ||
|
||
public class User { | ||
Long id; | ||
String username; | ||
String password; | ||
} |
5 changes: 5 additions & 0 deletions
5
repository-pattern/domain/src/main/java/com/wonit/user/UserRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package com.wonit.user; | ||
|
||
public interface UserRepository { | ||
User save(User user); | ||
} |
9 changes: 9 additions & 0 deletions
9
repository-pattern/domain/src/main/java/com/wonit/util/LongIdGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.wonit.util; | ||
|
||
import java.time.ZonedDateTime; | ||
|
||
public class LongIdGenerator { | ||
public static Long gen() { | ||
return ZonedDateTime.now().toEpochSecond(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
plugins { | ||
id 'java' | ||
id 'org.springframework.boot' version '2.7.2' | ||
id 'io.spring.dependency-management' version '1.0.12.RELEASE' | ||
id "io.freefair.lombok" version "6.5.0.3" | ||
} | ||
|
||
version 'unspecified' | ||
|
||
repositories { | ||
mavenCentral() | ||
} | ||
|
||
dependencies { | ||
|
||
implementation project(':repository-pattern:domain') | ||
|
||
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' | ||
runtimeOnly 'com.h2database:h2' | ||
|
||
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' | ||
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' | ||
} | ||
|
||
test { | ||
useJUnitPlatform() | ||
} |
27 changes: 27 additions & 0 deletions
27
...itory-pattern/infrastructure/src/main/java/com/wonit/entity/SpringDataJpaOrderEntity.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package com.wonit.entity; | ||
|
||
import java.util.List; | ||
import javax.persistence.ElementCollection; | ||
import javax.persistence.Entity; | ||
import javax.persistence.GeneratedValue; | ||
import javax.persistence.GenerationType; | ||
import javax.persistence.Id; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
@Entity | ||
@Getter | ||
@Builder | ||
@NoArgsConstructor | ||
@AllArgsConstructor | ||
public class SpringDataJpaOrderEntity { | ||
@Id | ||
@GeneratedValue(strategy = GenerationType.SEQUENCE) | ||
private Long id; | ||
private Long userId; | ||
@ElementCollection | ||
private List<Long> orderItems; | ||
private Long totalPrice; | ||
} |
11 changes: 11 additions & 0 deletions
11
...ttern/infrastructure/src/main/java/com/wonit/repository/SpringDataJpaOrderRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package com.wonit.repository; | ||
|
||
import com.wonit.entity.SpringDataJpaOrderEntity; | ||
import com.wonit.order.Order; | ||
import java.util.Optional; | ||
import org.springframework.data.repository.Repository; | ||
|
||
public interface SpringDataJpaOrderRepository extends Repository<SpringDataJpaOrderEntity, Long> { | ||
SpringDataJpaOrderEntity save(SpringDataJpaOrderEntity entity); | ||
Optional<SpringDataJpaOrderEntity> findById(Long id); | ||
} |
45 changes: 45 additions & 0 deletions
45
...nfrastructure/src/main/java/com/wonit/repository/SpringDataJpaOrderRepositoryAdapter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package com.wonit.repository; | ||
|
||
import com.wonit.entity.SpringDataJpaOrderEntity; | ||
import com.wonit.order.Order; | ||
import com.wonit.order.OrderRepository; | ||
import java.util.Optional; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Component; | ||
|
||
@Component | ||
@RequiredArgsConstructor | ||
public class SpringDataJpaOrderRepositoryAdapter implements OrderRepository { | ||
|
||
private final SpringDataJpaOrderRepository repository; | ||
|
||
@Override | ||
public Order save(Order order) { | ||
SpringDataJpaOrderEntity entity = repository.save(convert(order)); | ||
return convert(entity); | ||
} | ||
|
||
@Override | ||
public Optional<Order> findById(Long id) { | ||
Optional<SpringDataJpaOrderEntity> optional = repository.findById(id); | ||
if (optional.isEmpty()) { | ||
return Optional.empty(); | ||
} | ||
return Optional.of(convert(optional.get())); | ||
} | ||
|
||
private SpringDataJpaOrderEntity convert(Order domain) { | ||
return SpringDataJpaOrderEntity.builder() | ||
.id(domain.getId()) | ||
.orderItems(domain.getOrderItems()) | ||
.totalPrice(domain.getTotalPrice()) | ||
.build(); | ||
} | ||
|
||
private Order convert(SpringDataJpaOrderEntity entity) { | ||
return Order.by(entity.getId(), | ||
entity.getUserId(), | ||
entity.getOrderItems(), | ||
entity.getTotalPrice()); | ||
} | ||
} |
36 changes: 36 additions & 0 deletions
36
...tern/infrastructure/src/test/java/com/example/layer/repository/util/GsonLearningTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package com.example.layer.repository.util; | ||
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
|
||
import com.example.layer.repository.SpringDataJpaOrderItem; | ||
import com.google.gson.Gson; | ||
import com.google.gson.reflect.TypeToken; | ||
import java.util.List; | ||
import org.junit.jupiter.api.Test; | ||
|
||
class GsonLearningTest { | ||
|
||
Gson sut = new Gson(); | ||
|
||
SpringDataJpaOrderItem ORDER_ITEM_1 = SpringDataJpaOrderItem.of(1L, 2); | ||
SpringDataJpaOrderItem ORDER_ITEM_2 = SpringDataJpaOrderItem.of(2L, 4); | ||
List<SpringDataJpaOrderItem> ORDER_ITEMS = List.of(ORDER_ITEM_1, ORDER_ITEM_2); | ||
|
||
@Test | ||
void name() { | ||
String json = sut.toJson(ORDER_ITEM_1); | ||
SpringDataJpaOrderItem actual = sut.fromJson(json, SpringDataJpaOrderItem.class); | ||
|
||
assertThat(actual).isEqualTo(ORDER_ITEM_1); | ||
} | ||
|
||
@Test | ||
void name2() { | ||
String json = sut.toJson(ORDER_ITEMS); | ||
System.out.println("json = " + json); | ||
|
||
List<SpringDataJpaOrderItem> actual = sut.fromJson(json, new TypeToken<List<SpringDataJpaOrderItem>>() {}.getType()); | ||
|
||
assertThat(ORDER_ITEMS).isEqualTo(actual); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
plugins { | ||
id 'java' | ||
id 'org.springframework.boot' version '2.7.2' | ||
id 'io.spring.dependency-management' version '1.0.12.RELEASE' | ||
id "io.freefair.lombok" version "6.5.0.3" | ||
} | ||
|
||
version 'unspecified' | ||
|
||
repositories { | ||
mavenCentral() | ||
} | ||
|
||
dependencies { | ||
implementation project(':repository-pattern:domain') | ||
|
||
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' | ||
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' | ||
} | ||
|
||
test { | ||
useJUnitPlatform() | ||
} |
15 changes: 15 additions & 0 deletions
15
repository-pattern/web/src/main/java/com/wonit/service/UserService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package com.wonit.service; | ||
|
||
import com.wonit.order.OrderRepository; | ||
import com.wonit.user.User; | ||
import com.wonit.user.UserRepository; | ||
import lombok.RequiredArgsConstructor; | ||
|
||
@RequiredArgsConstructor | ||
public class UserService { | ||
private final OrderRepository repository; | ||
|
||
public void order() { | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters