728x90

ModelMapper 추가

Application.yml
server:
port: 0
spring:
application:
name: order-service
h2:
console:
enabled: true
settings:
web-allow-others: true
path: /h2-console
jpa:
hibernate:
ddl-auto: update
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb
username: sa
eureka:
instance:
instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
logging:
level:
com.example.orderservice: DEBUG
Entity 생성
@Data
@Entity
@Table(name = "orders")
public class OrderEntity implements Serializable { // 직렬화를 넣는 이유? 데이터를 전송하기 위해
@Id
@GeneratedValue
private Long id;
@Column(nullable = false, length = 120, unique = true)
private String productId;
@Column(nullable = false)
private Integer qty;
@Column(nullable = false)
private Integer unitPrice;
@Column(nullable = false)
private Integer totalPrice;
@Column(nullable = false)
private String userId;
@Column(nullable = false, unique = true)
private String orderId;
@Column(nullable = false, updatable = false, insertable = false)
@ColumnDefault("CURRENT_TIMESTAMP")
private Date createdAt;
}
OrderDto, ResponseOrder


OrderRepository 생성

OrderService 생성
@Service
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{
private final OrderRepository orderRepository;
@Override
public OrderDto createOrder(OrderDto orderDto) {
orderDto.setOrderId(UUID.randomUUID().toString());
orderDto.setTotalPrice(orderDto.getUnitPrice() * orderDto.getQty());//수량 * 단가
ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(STRICT);
OrderEntity orderEntity = mapper.map(orderDto, OrderEntity.class);
orderRepository.save(orderEntity);
OrderDto returnValue = mapper.map(orderEntity, OrderDto.class);
return returnValue;
}
@Override
public OrderDto getOrderByOrderId(String orderId) {
OrderEntity orderEntity = orderRepository.findByOrderId(orderId);
OrderDto orderDto = new ModelMapper().map(orderEntity, OrderDto.class);
return orderDto;
}
@Override
public Iterable<OrderEntity> getOrderByUserId(String userId) {
return orderRepository.findByUserId(userId);
}
}
Controller
@RestController
@RequestMapping("/order-service")
@RequiredArgsConstructor
public class OrderController {
private final Environment env;
private final OrderService orderService;
@GetMapping("/heath_check")
public String status() {
return String.format("It's Working in Order Service on PORT %s",
env.getProperty("local.server.port"));
}
@PostMapping("/{userId}/orders")
public ResponseEntity<ResponseOrder> createOrder(
@RequestBody RequestOrder orderDetails,
@PathVariable("userId") String userId) {
ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(STRICT);
OrderDto orderDto = mapper.map(orderDetails, OrderDto.class);
orderDto.setUserId(userId);
OrderDto createdOrder = orderService.createOrder(orderDto);
ResponseOrder responseOrder = mapper.map(createdOrder, ResponseOrder.class);
return ResponseEntity.status(HttpStatus.CREATED).body(responseOrder); //201 성공 코드를 반환
}
@GetMapping("/{userId}/orders")
public ResponseEntity<List<ResponseOrder>> getOrders(@PathVariable("userId") String userId){
Iterable<OrderEntity> orderList = orderService.getOrderByUserId(userId);
List<ResponseOrder> result = new ArrayList<>();
result.forEach(v -> {
result.add(new ModelMapper().map(v, ResponseOrder.class));
});
return ResponseEntity.status(OK).body(result);
}
}
728x90
'Spring Cloud로 개발하는 MSA > Catalogs and Orders Microservice' 카테고리의 다른 글
| ch03. Catalogs Microservice - 기능 구현 (0) | 2022.02.01 |
|---|---|
| ch02. Users Microservice - 사용자 조회 구현 (0) | 2022.02.01 |
| ch01. Users Microservice와 Spring Cloud Gateway 연동 (0) | 2022.02.01 |