Order 모듈 코드 작성
This commit is contained in:
@@ -30,6 +30,10 @@ spring:
|
|||||||
uri: lb://CATALOG-SERVICE
|
uri: lb://CATALOG-SERVICE
|
||||||
predicates:
|
predicates:
|
||||||
- Path=/catalog-service/**
|
- Path=/catalog-service/**
|
||||||
|
- id: order-service
|
||||||
|
uri: lb://ORDER-SERVICE
|
||||||
|
predicates:
|
||||||
|
- Path=/order-service/**
|
||||||
- id: test-server-1
|
- id: test-server-1
|
||||||
uri: lb://TEST-SERVER-1
|
uri: lb://TEST-SERVER-1
|
||||||
predicates:
|
predicates:
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(":util"))
|
||||||
|
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -10,6 +10,9 @@ spring:
|
|||||||
settings:
|
settings:
|
||||||
web-allow-others: true
|
web-allow-others: true
|
||||||
path: /h2-console
|
path: /h2-console
|
||||||
|
jpa:
|
||||||
|
hibernate:
|
||||||
|
ddl-auto: update
|
||||||
datasource:
|
datasource:
|
||||||
driver-class-name: org.h2.Driver
|
driver-class-name: org.h2.Driver
|
||||||
url: jdbc:h2:mem:testdb
|
url: jdbc:h2:mem:testdb
|
||||||
@@ -24,4 +27,8 @@ eureka:
|
|||||||
defaultZone: http://localhost:8761/eureka
|
defaultZone: http://localhost:8761/eureka
|
||||||
|
|
||||||
greeting:
|
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
|
||||||
Reference in New Issue
Block a user