Commit d99ef97e authored by Shaphen Pangburn's avatar Shaphen Pangburn

[Ecom Team]: Complete conversion to maven files with integrated master branch from previous repo

parent 2cf4ca5d
No preview for this file type
package com.nisum.ecomservice.config;
public class AppConfig {
private static String orderManagementAPI = "http://localhost:8084/api";
public static String getOrderManagementAPI() {
return orderManagementAPI;
}
}
package com.nisum.ecomservice.controller; package com.nisum.ecomservice.controller;
import com.nisum.ecomservice.dto.Order;
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.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping; import reactor.core.publisher.Mono;
import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@RequestMapping("/api/orders") @RequestMapping("/api/orders")
...@@ -13,5 +14,10 @@ public class OrdersController { ...@@ -13,5 +14,10 @@ public class OrdersController {
@Autowired @Autowired
private OrderService orderService; private OrderService orderService;
@PostMapping
private Mono<Order> postOrder(@RequestBody OrderRequest orderRequest){
return orderService.postOrder(orderRequest);
}
} }
package com.nisum.ecomservice.dto;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class Order {
@JsonCreator
public Order(
@JsonProperty("id") String id,
@JsonProperty("customerId") String customerId,
@JsonProperty("customerEmailAddress") String customerEmailAddress,
@JsonProperty("orderTrackingCode") String orderTrackingCode,
@JsonProperty("orderStatus") String orderStatus,
@JsonProperty("orderCreatedAt") Double orderCreatedAt,
@JsonProperty("orderUpdatedAt") Double orderUpdatedAt,
@JsonProperty("orderItems") List<OrderItemParse> orderItems,
@JsonProperty("customerAddress") OrderAddressParse customerAddress
){
this.id = id;
this.customerAddress = customerAddress;
this.customerId = customerId;
this.customerEmailAddress = customerEmailAddress;
this.orderTrackingCode = orderTrackingCode;
this.orderStatus = orderStatus;
this.orderCreatedAt = orderCreatedAt;
this.orderUpdatedAt = orderUpdatedAt;
this.orderItems = orderItems;
}
private String id;
private String customerId;
private String customerEmailAddress;
private String orderTrackingCode;
private String orderStatus;
private Double orderCreatedAt;
private Double orderUpdatedAt;
private List<OrderItemParse> orderItems;
private OrderAddressParse customerAddress;
}
package com.nisum.ecomservice.dto;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class OrderAddressParse {
@JsonCreator
public OrderAddressParse(
@JsonProperty("street") String street,
@JsonProperty("city") String city,
@JsonProperty("state") String state,
@JsonProperty("zip") String zip
) {
this.street = street;
this.city = city;
this.state = state;
this.zip = zip;
}
private String street;
private String city;
private String state;
private String zip;
}
package com.nisum.ecomservice.dto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class OrderItem {
private String itemName;
private String itemId;
private Integer itemQuantity;
private Float itemPrice;
private String itemSku;
}
package com.nisum.ecomservice.dto;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class OrderItemParse {
@JsonCreator
public OrderItemParse(
@JsonProperty("itemName") String itemName,
@JsonProperty("itemId") String itemId,
@JsonProperty("itemQuantity") Integer itemQuantity,
@JsonProperty("itemPrice") Float itemPrice,
@JsonProperty("itemSku") String itemSku
) {
this.itemName = itemName;
this.itemId = itemId;
this.itemQuantity = itemQuantity;
this.itemPrice = itemPrice;
this.itemSku = itemSku;
}
private String itemName;
private String itemId;
private Integer itemQuantity;
private Float itemPrice;
private String itemSku;
}
package com.nisum.ecomservice.dto;
import com.nisum.ecomservice.model.Address;
import com.nisum.ecomservice.model.Cart;
import com.nisum.ecomservice.model.User;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
public class OrderRequest {
private User user;
private Address address;
private Cart cart;
}
package com.nisum.ecomservice.dto;
import com.nisum.ecomservice.model.Address;
import lombok.*;
import java.util.List;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class OrderSubmission {
private String customerId;
private String customerEmailAddress;
private List<OrderItem> orderItems;
private Address customerAddress;
// private String orderStatus = "order status";
// private long orderCreatedAt = 1;
// private long orderUpdatedAt = 1;
// private String orderTrackingCode = "tracking code";
}
...@@ -3,10 +3,12 @@ package com.nisum.ecomservice.model; ...@@ -3,10 +3,12 @@ package com.nisum.ecomservice.model;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.ToString;
@Getter @Getter
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
@ToString
public class Address { public class Address {
private String street; private String street;
......
...@@ -3,23 +3,18 @@ package com.nisum.ecomservice.model; ...@@ -3,23 +3,18 @@ package com.nisum.ecomservice.model;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
import java.util.List; import java.util.List;
@Document(collection = "carts")
@Getter @Getter
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
public class Order { public class Cart {
@Id
private String id; private String id;
private String customerId; private String userId;
private String customerEmailAddress; private List<CartItem> cartItems;
private String orderTrackingCode;
private String orderStatus;
private Double orderCreatedAt;
private Double orderUpdatedAt;
private List<Product> orderItems;
private Address customerAddress;
} }
...@@ -5,10 +5,12 @@ import lombok.AllArgsConstructor; ...@@ -5,10 +5,12 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.ToString;
@Getter @Getter
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
@ToString
@Data @Data
public class CartItem { public class CartItem {
private ProductRef productRef; private ProductRef productRef;
......
...@@ -2,16 +2,14 @@ package com.nisum.ecomservice.model; ...@@ -2,16 +2,14 @@ package com.nisum.ecomservice.model;
import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.*;
import org.springframework.data.annotation.Id;
@Getter @Getter
@Setter @Setter
public class Product { public class Product {
private String id; private String id;
private String sku; private String sku;
private String upc; private String upc;
...@@ -36,7 +34,8 @@ public class Product { ...@@ -36,7 +34,8 @@ public class Product {
@JsonProperty("blockedStock") Integer blockedStock, @JsonProperty("blockedStock") Integer blockedStock,
@JsonProperty("productImageUrl") String productImageUrl, @JsonProperty("productImageUrl") String productImageUrl,
@JsonProperty("brand") String brand, @JsonProperty("brand") String brand,
@JsonProperty("category") String category) { @JsonProperty("category") String category
){
this.id = id; this.id = id;
this.sku = sku; this.sku = sku;
this.upc = upc; this.upc = upc;
......
...@@ -3,10 +3,12 @@ package com.nisum.ecomservice.model; ...@@ -3,10 +3,12 @@ package com.nisum.ecomservice.model;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.ToString;
@Getter @Getter
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
@ToString
public class ProductRef { public class ProductRef {
private String id; private String id;
private String sku; private String sku;
......
package com.nisum.ecomservice.model; package com.nisum.ecomservice.model;
import lombok.*;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
@Document(collection = "users") @Document(collection = "users")
@Getter @Getter
@Setter @Setter
@AllArgsConstructor
@ToString
public class User { public class User {
@Id @Id
......
package com.nisum.ecomservice.service; package com.nisum.ecomservice.service;
import com.nisum.ecomservice.config.AppConfig;
import com.nisum.ecomservice.dto.Order;
import com.nisum.ecomservice.dto.OrderItem;
import com.nisum.ecomservice.dto.OrderRequest;
import com.nisum.ecomservice.dto.OrderSubmission;
import com.nisum.ecomservice.model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.List;
import java.util.stream.Collectors;
@Service @Service
public class OrderService { public class OrderService {
@Autowired
ProductService productService;
public Mono<Order> postOrder(OrderRequest orderRequest) {
//create user object from user object details
User user = orderRequest.getUser();
Address address = orderRequest.getAddress();
Cart cart = orderRequest.getCart();
//for each item grab product details from products API
List<Mono<Product>> productsToOrder = cart.getCartItems().stream()
.map(cartItem -> cartItem.getProductRef().getSku())
.map(sku -> productService.getProductBySku(sku))
.collect(Collectors.toList());
Flux<Product> productFlux = Flux.concat(productsToOrder);
Flux<OrderItem> orderItems = productFlux.map(product -> {
OrderItem orderItem = new OrderItem();
orderItem.setItemId(product.getSku());
orderItem.setItemName(product.getProductName());
orderItem.setItemSku(product.getSku());
orderItem.setItemPrice(product.getPrice());
List<CartItem> items = cart.getCartItems().stream().filter(cartItem -> cartItem.getProductRef().getSku()
.equals(product.getSku()))
.collect(Collectors.toList());
Integer quantity = items.get(0).getQuantity();
orderItem.setItemQuantity(quantity);
return orderItem;
});
//
Mono<Mono<Order>> map = orderItems.collectList().map(itemList -> {
OrderSubmission orderSubmission = new OrderSubmission();
orderSubmission.setOrderItems(itemList);
orderSubmission.setCustomerAddress(address);
orderSubmission.setCustomerId(user.getUserId());
orderSubmission.setCustomerEmailAddress(user.getEmail());
System.out.println(orderSubmission);
return orderSubmission;
}).map(orderSubmission -> postOrderToAPI(orderSubmission));
//post order to OMS team
//retrieve their response
return map.flatMap(orderMono -> orderMono);
}
public Mono<Order> postOrderToAPI(OrderSubmission orderSubmission){
return WebClient.create(String.format("%s/orders", AppConfig.getOrderManagementAPI()))
.post()
.bodyValue(orderSubmission)
.retrieve()
.bodyToMono(Order.class);
}
} }
/*
.map(productMono -> {
productMono
.map(product -> {
OrderItem orderItem = new OrderItem();
orderItem.setItemId(product.getSku());
orderItem.setItemName(product.getProductName());
orderItem.setItemSku(product.getSku());
orderItem.setItemPrice(product.getPrice());
List<CartItem> items = user.getCart().stream().filter(cartItem -> cartItem.getProductRef().getSku()
.equals(product.getSku()))
.collect(Collectors.toList());
Integer quantity = items.get(0).getQuantity();
orderItem.setItemQuantity(quantity);
System.out.println(orderItem);
return orderItem;
})
})
*/
\ No newline at end of file
package com.nisum.ecomservice.service; package com.nisum.ecomservice.service;
import com.nisum.ecomservice.model.Product; import com.nisum.ecomservice.model.Product;
import com.nisum.ecomservice.model.Promotion;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import com.nisum.ecomservice.model.Promotion;
import reactor.core.publisher.Flux; import reactor.core.publisher.Flux;
@Service @Service
public class ProductService { public class ProductService {
public Mono<Product> getProductBySku(String sku){
return WebClient.create(String.format("http://localhost:8082/api/products/%s",sku))
.get()
.retrieve()
.bodyToMono(Product.class);
}
public Flux<Product> getAllProducts() { public Flux<Product> getAllProducts() {
return WebClient return WebClient
......
spring.data.mongodb.uri=mongodb+srv://ecom:ecom@e-commerce-db-cluster.va815.mongodb.net/e-commerce-db?retryWrites=true&w=majority spring.data.mongodb.uri=mongodb+srv://ecom:ecom@e-commerce-db-cluster.va815.mongodb.net/e-commerce-db?retryWrites=true&w=majority
spring.data.mongodb.database=e-commerce-db spring.data.mongodb.database=e-commerce-db
security.enable-csrf=false
server.port=8080 server.port=8080
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