Order 모듈 코드 작성

This commit is contained in:
roy-zz
2022-04-21 00:53:43 +09:00
parent 3706cb48a4
commit c328697e65
11 changed files with 212 additions and 1 deletions

View File

@@ -30,6 +30,10 @@ spring:
uri: lb://CATALOG-SERVICE
predicates:
- Path=/catalog-service/**
- id: order-service
uri: lb://ORDER-SERVICE
predicates:
- Path=/order-service/**
- id: test-server-1
uri: lb://TEST-SERVER-1
predicates:

View File

@@ -3,6 +3,8 @@ ext {
}
dependencies {
implementation(project(":util"))
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

View File

@@ -0,0 +1,50 @@
package com.roy.springcloud.orderservice.controller;
import com.roy.springcloud.orderservice.dto.OrderDto;
import com.roy.springcloud.orderservice.service.OrderService;
import com.roy.springcloud.orderservice.vo.request.OrderSaveRequest;
import com.roy.springcloud.orderservice.vo.response.OrderResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
import static com.roy.springcloud.util.mapper.MapperUtil.toObject;
@RestController
@RequiredArgsConstructor
@RequestMapping("/order-service")
public class OrderController {
private final Environment environment;
private final OrderService orderService;
@GetMapping("/health-check")
public String healthCheck() {
return String.format("It's working in order service on port: %s",
environment.getProperty("local.server.port"));
}
@PostMapping("/{userId}/orders")
public ResponseEntity<OrderResponse> createOrder(@PathVariable("userId") String userId,
@RequestBody OrderSaveRequest request) {
OrderDto orderDto = toObject(request, OrderDto.class);
orderDto.setUserId(userId);
OrderDto savedOrder = orderService.createOrder(orderDto);
OrderResponse response = toObject(savedOrder, OrderResponse.class);
return ResponseEntity.status(HttpStatus.CREATED).body(response);
}
@GetMapping("/{userId}/orders")
public ResponseEntity<List<OrderResponse>> getOrder(@PathVariable("userId") String userId) {
List<OrderDto> savedOrders = orderService.getOrderByUserId(userId);
List<OrderResponse> response = savedOrders.stream()
.map(order -> toObject(order, OrderResponse.class))
.collect(Collectors.toList());
return ResponseEntity.status(HttpStatus.OK).body(response);
}
}

View File

@@ -0,0 +1,35 @@
package com.roy.springcloud.orderservice.domain;
import lombok.Data;
import org.hibernate.annotations.ColumnDefault;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = "orders")
public class Order implements Serializable {
@Id @GeneratedValue
private Long id;
@Column(nullable = false, length = 125)
private String productId;
@Column(nullable = false)
private Integer quantity;
@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(value = "CURRENT_TIMESTAMP")
private LocalDateTime createdAt;
}

View File

@@ -0,0 +1,16 @@
package com.roy.springcloud.orderservice.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class OrderDto implements Serializable {
private String productId;
private Integer quantity;
private Integer unitPrice;
private Integer totalPrice;
private String orderId;
private String userId;
}

View File

@@ -0,0 +1,11 @@
package com.roy.springcloud.orderservice.repository;
import com.roy.springcloud.orderservice.domain.Order;
import org.springframework.data.repository.CrudRepository;
import java.util.Optional;
public interface OrderRepository extends CrudRepository<Order, Long> {
Optional<Order> findByOrderId(String orderId);
Iterable<Order> findAllByUserId(String userId);
}

View File

@@ -0,0 +1,11 @@
package com.roy.springcloud.orderservice.service;
import com.roy.springcloud.orderservice.dto.OrderDto;
import java.util.List;
public interface OrderService {
OrderDto createOrder(OrderDto orderDto);
OrderDto getOrderByOrderId(String orderId);
List<OrderDto> getOrderByUserId(String userId);
}

View File

@@ -0,0 +1,47 @@
package com.roy.springcloud.orderservice.service.impl;
import com.roy.springcloud.orderservice.domain.Order;
import com.roy.springcloud.orderservice.dto.OrderDto;
import com.roy.springcloud.orderservice.repository.OrderRepository;
import com.roy.springcloud.orderservice.service.OrderService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import static com.roy.springcloud.util.mapper.MapperUtil.toObject;
@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.getQuantity() * orderDto.getUnitPrice());
Order newOrder = toObject(orderDto, Order.class);
orderRepository.save(newOrder);
return toObject(newOrder, OrderDto.class);
}
@Override
public OrderDto getOrderByOrderId(String orderId) {
Order savedOrder = orderRepository.findByOrderId(orderId)
.orElseThrow(() -> new IllegalArgumentException("Cannot found order"));
return toObject(savedOrder, OrderDto.class);
}
@Override
public List<OrderDto> getOrderByUserId(String userId) {
Iterable<Order> savedOrders = orderRepository.findAllByUserId(userId);
List<OrderDto> response = new ArrayList<>();
savedOrders.forEach(order -> {
response.add(toObject(order, OrderDto.class));
});
return response;
}
}

View File

@@ -0,0 +1,10 @@
package com.roy.springcloud.orderservice.vo.request;
import lombok.Data;
@Data
public class OrderSaveRequest {
private String productId;
private Integer quantity;
private Integer unitPrice;
}

View File

@@ -0,0 +1,18 @@
package com.roy.springcloud.orderservice.vo.response;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderResponse {
private String productId;
private Integer quantity;
private Integer unitPrice;
private Integer totalPrice;
private LocalDateTime createdAt;
private String orderId;
}

View File

@@ -10,6 +10,9 @@ spring:
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
@@ -24,4 +27,8 @@ eureka:
defaultZone: http://localhost:8761/eureka
greeting:
message: Welcome to the Simple E-Commerce(Order Service).
message: Welcome to the Simple E-Commerce(Order Service).
logging:
level:
com.roy.springcloud.orderservice: DEBUG