Skip to content

Commit

Permalink
commit
Browse files Browse the repository at this point in the history
  • Loading branch information
dhslrl321 committed Sep 27, 2022
1 parent a611d98 commit 32dadd2
Show file tree
Hide file tree
Showing 19 changed files with 293 additions and 0 deletions.
Binary file modified .gradle/checksums/checksums.lock
Binary file not shown.
Binary file modified .gradle/checksums/md5-checksums.bin
Binary file not shown.
Binary file modified .gradle/checksums/sha1-checksums.bin
Binary file not shown.
5 changes: 5 additions & 0 deletions repository-pattern/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Repository Pattern

레포지토리 패턴에 대해서 학습합니다.

자세한 내용은 [블로그 포스팅](https://wonit.tistory.com/636?category=955962) 에서 확인할 수 있습니다
19 changes: 19 additions & 0 deletions repository-pattern/domain/build.gradle
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 repository-pattern/domain/src/main/java/com/wonit/order/Order.java
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();
}
}
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);
}
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;
}
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;
}
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);
}
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();
}
}
27 changes: 27 additions & 0 deletions repository-pattern/infrastructure/build.gradle
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()
}
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;
}
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);
}
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());
}
}
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);
}
}
23 changes: 23 additions & 0 deletions repository-pattern/web/build.gradle
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()
}
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() {

}
}
8 changes: 8 additions & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,11 @@ include 'layer:commons'
include 'layer:infrastructure'

include 'domain-event'

include 'repository-pattern'
include 'repository-pattern:web'
include 'repository-pattern:domain'
include 'repository-pattern:infrastructure'
include 'repository-pattern:infrastructure:spring-data-jdbc'
include 'repository-pattern:infrastructure:spring-data-jpa'

0 comments on commit 32dadd2

Please sign in to comment.