Commit 20818a17 authored by Xiyang Lu's avatar Xiyang Lu

resolve merge conflict when git pull

parents cb9f4636 1a5114b0
FROM maven:3.6.0-jdk-11-slim AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package -DskipTests
FROM openjdk:11-jre-slim FROM openjdk:11-jre-slim
COPY --from=build /home/app/target/ecom-service-0.0.1-SNAPSHOT.jar /usr/local/lib/ecomservice.jar COPY target/ecom-service-0.0.1-SNAPSHOT.jar /usr/local/lib/ecomservice.jar
EXPOSE 8080 EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/lib/ecomservice.jar"] ENTRYPOINT ["java","-jar","/usr/local/lib/ecomservice.jar"]
#FROM maven:3.6.0-jdk-11-slim AS build
#COPY src /home/app/src
#COPY pom.xml /home/app
#RUN mvn -f /home/app/pom.xml clean package -DskipTests
#FROM openjdk:11-jre-slim
#COPY --from=build /home/app/target/ecom-service-0.0.1-SNAPSHOT.jar /usr/local/lib/ecomservice.jar
#EXPOSE 8080
#ENTRYPOINT ["java","-jar","/usr/local/lib/ecomservice.jar"]
#FROM openjdk:8-alpine
#VOLUME /tmp
#ADD target/ecom-service-0.0.1-SNAPSHOT.jar
#ENTRYPOINT ["java","-jar","/ecom-service-0.0.1-SNAPSHOT.jar"]
...@@ -41,6 +41,18 @@ ...@@ -41,6 +41,18 @@
<artifactId>reactor-test</artifactId> <artifactId>reactor-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.nisum.ecomservice.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Ecommerce Microservice")
.build();
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
}
package com.nisum.ecomservice.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.config.EnableWebFlux;
import org.springframework.web.reactive.config.ResourceHandlerRegistry;
import org.springframework.web.reactive.config.WebFluxConfigurer;
@Configuration
@EnableWebFlux
public class WebFluxConfig implements WebFluxConfigurer
{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui.html**")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
\ No newline at end of file
package com.nisum.ecomservice.controller; package com.nisum.ecomservice.controller;
import com.nisum.ecomservice.dto.CartDTO;
import com.nisum.ecomservice.dto.Order; import com.nisum.ecomservice.dto.Order;
import com.nisum.ecomservice.dto.OrderRequest; import com.nisum.ecomservice.dto.OrderRequest;
import com.nisum.ecomservice.service.OrderService; import com.nisum.ecomservice.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
@RestController @RestController
...@@ -18,4 +21,9 @@ public class OrdersController { ...@@ -18,4 +21,9 @@ public class OrdersController {
private Mono<Order> postOrder(@RequestBody OrderRequest orderRequest){ private Mono<Order> postOrder(@RequestBody OrderRequest orderRequest){
return orderService.postOrder(orderRequest); return orderService.postOrder(orderRequest);
} }
@GetMapping("/byUser/{userId}")
private ResponseEntity<Flux<Order>> getUserOrderHistory(@PathVariable String userId){
return ResponseEntity.ok(orderService.getOrderFromOmsAPI(userId));
}
} }
package com.nisum.ecomservice.dto;
//needed for post route, do not delete / change names
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class CartPostDTO {
private String id;
private String userId;
private List<CartItemDTO> cartItems;
}
package com.nisum.ecomservice.dto; package com.nisum.ecomservice.dto;
import com.nisum.ecomservice.model.Address; import com.nisum.ecomservice.model.Address;
import com.nisum.ecomservice.model.CartEntity;
import com.nisum.ecomservice.model.User; import com.nisum.ecomservice.model.User;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor
public class OrderRequest { public class OrderRequest {
private User user; private User user;
private Address address; private Address address;
private CartEntity cartEntity; private CartPostDTO cart;
} }
package com.nisum.ecomservice.model; package com.nisum.ecomservice.model;
import lombok.AllArgsConstructor; import lombok.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter @Getter
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor
@ToString @ToString
public class Address { public class Address {
......
package com.nisum.ecomservice.model; package com.nisum.ecomservice.model;
import lombok.AllArgsConstructor; import lombok.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter @Getter
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor
@ToString @ToString
public class ProductRef { public class ProductRef {
private String id; private String id;
......
...@@ -9,6 +9,7 @@ import org.springframework.data.mongodb.core.mapping.Document; ...@@ -9,6 +9,7 @@ import org.springframework.data.mongodb.core.mapping.Document;
@Getter @Getter
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor
@ToString @ToString
public class User { public class User {
......
package com.nisum.ecomservice.service; package com.nisum.ecomservice.service;
import com.nisum.ecomservice.config.AppConfig; import com.nisum.ecomservice.config.AppConfig;
import com.nisum.ecomservice.dto.Order; import com.nisum.ecomservice.dto.*;
import com.nisum.ecomservice.dto.OrderItem;
import com.nisum.ecomservice.dto.OrderRequest;
import com.nisum.ecomservice.dto.OrderSubmission;
import com.nisum.ecomservice.model.*; import com.nisum.ecomservice.model.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -26,10 +23,10 @@ public class OrderService { ...@@ -26,10 +23,10 @@ public class OrderService {
//create user object from user object details //create user object from user object details
User user = orderRequest.getUser(); User user = orderRequest.getUser();
Address address = orderRequest.getAddress(); Address address = orderRequest.getAddress();
CartEntity cartEntity = orderRequest.getCartEntity(); CartPostDTO cart = orderRequest.getCart();
//for each item grab product details from products API //for each item grab product details from products API
List<Mono<Product>> productsToOrder = cartEntity.getCartItems().stream() List<Mono<Product>> productsToOrder = cart.getCartItems().stream()
.map(cartItem -> cartItem.getProductRef().getSku()) .map(cartItem -> cartItem.getProductRef().getSku())
.map(sku -> productService.getProductBySku(sku)) .map(sku -> productService.getProductBySku(sku))
...@@ -44,7 +41,7 @@ public class OrderService { ...@@ -44,7 +41,7 @@ public class OrderService {
orderItem.setItemSku(product.getSku()); orderItem.setItemSku(product.getSku());
orderItem.setItemPrice(product.getPrice()); orderItem.setItemPrice(product.getPrice());
List<CartItemEntity> items = cartEntity.getCartItems().stream().filter(cartItem -> cartItem.getProductRef().getSku() List<CartItemDTO> items = cart.getCartItems().stream().filter(cartItem -> cartItem.getProductRef().getSku()
.equals(product.getSku())) .equals(product.getSku()))
.collect(Collectors.toList()); .collect(Collectors.toList());
...@@ -81,6 +78,13 @@ public class OrderService { ...@@ -81,6 +78,13 @@ public class OrderService {
.retrieve() .retrieve()
.bodyToMono(Order.class); .bodyToMono(Order.class);
} }
public Flux<Order> getOrderFromOmsAPI(String userId){
return WebClient.create(String.format("%s/orders/byCustomer/%s", AppConfig.getOrderManagementAPI(),userId))
.get()
.retrieve()
.bodyToFlux(Order.class);
}
} }
/* /*
.map(productMono -> { .map(productMono -> {
......
...@@ -11,7 +11,7 @@ import reactor.core.publisher.Flux; ...@@ -11,7 +11,7 @@ import reactor.core.publisher.Flux;
@Service @Service
public class ProductService { public class ProductService {
public Mono<Product> getProductBySku(String sku){ public Mono<Product> getProductBySku(String sku){
return WebClient.create(String.format("http://localhost:8082/api/products/%s",sku)) return WebClient.create(String.format("http://localhost:8083/api/products/%s",sku))
.get() .get()
.retrieve() .retrieve()
.bodyToMono(Product.class); .bodyToMono(Product.class);
......
class Config { class Config {
static baseApiUrl = "http://localhost:8080/api"; //env file static baseApiUrl = "http://localhost:8080/api"; //env file
static orderHistoryApiUrlMethod = (userId) => `${this.baseApiUrl}/users/${userId}/orders`; static orderHistoryApiUrlMethod = (userId) => `${this.baseApiUrl}/orders/byUser/${userId}`;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment