Commit 8284503d authored by Vishal Vaddadhi's avatar Vishal Vaddadhi

Merge branch 'dev' of https://gitlab.mynisum.com/ascend/order-management into vishal_init_kafka

Merging into new branch
parents 542c80a8 1c578ac7
...@@ -25,6 +25,12 @@ ...@@ -25,6 +25,12 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId> <artifactId>spring-boot-starter-webflux</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
......
...@@ -2,23 +2,43 @@ package com.afp.ordermanagement.controller; ...@@ -2,23 +2,43 @@ package com.afp.ordermanagement.controller;
import com.afp.ordermanagement.model.Order; import com.afp.ordermanagement.model.Order;
import com.afp.ordermanagement.repository.OrderRepository; import com.afp.ordermanagement.repository.OrderRepository;
import com.afp.ordermanagement.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux; import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@RestController @RestController
@RequestMapping("/api") @RequestMapping("/api")
public class OrderController { public class OrderController {
@Autowired @Autowired
OrderRepository orderRepository; private OrderService orderService;
@GetMapping("/order") @GetMapping("/orders")
public Flux<Order> getAllManagers() { public Flux<Order> getAllOrders(){
System.out.println("here"); return orderService.getAllOrders();
Flux<Order> managerFlux = orderRepository.findAll();
return managerFlux;
} }
@GetMapping("/orders/{customerId}")
public Flux<Order> getAllOrdersByCustomerId(@PathVariable("customerId") String customerId) {
return orderService.getAllOrdersByCustomerId(customerId);
}
@PostMapping("/orders")
@ResponseStatus(HttpStatus.CREATED)
public Mono<Order> saveOrder(@RequestBody Order order){
return orderService.createOrder(order);
}
@PutMapping("/order/{orderId}")
public Mono<ResponseEntity<Order>> updateOrder(@PathVariable(value = "orderId") String orderId, @RequestBody Order order){
return orderService.updateOrderByOrderId(orderId, order)
.map(updatedOrder -> ResponseEntity.ok(updatedOrder))
.defaultIfEmpty(ResponseEntity.notFound().build());
}
} }
package com.afp.ordermanagement.model;
import lombok.Data;
import java.util.Objects;
@Data
public class CustomerAddress {
private String street;
private String city;
private String state;
private String zip;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof CustomerAddress)) return false;
CustomerAddress that = (CustomerAddress) o;
return getStreet().equals(that.getStreet()) && getCity().equals(that.getCity()) && getState().equals(that.getState()) && getZip().equals(that.getZip());
}
@Override
public int hashCode() {
return Objects.hash(getStreet(), getCity(), getState(), getZip());
}
@Override
public String toString() {
return "CustomerAddress{" +
"street='" + street + '\'' +
", city='" + city + '\'' +
", state='" + state + '\'' +
", zip='" + zip + '\'' +
'}';
}
}
package com.afp.ordermanagement.model;
import lombok.Data;
import java.util.Objects;
@Data
public class Item {
private String itemId;
private int itemQuantity;
private double itemPrice;
private int itemSku;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Item)) return false;
Item item = (Item) o;
return getItemQuantity() == item.getItemQuantity() && Double.compare(item.getItemPrice(), getItemPrice()) == 0 && getItemSku() == item.getItemSku() && getItemId().equals(item.getItemId());
}
@Override
public int hashCode() {
return Objects.hash(getItemId(), getItemQuantity(), getItemPrice(), getItemSku());
}
@Override
public String toString() {
return "Item{" +
"itemId='" + itemId + '\'' +
", itemQuantity=" + itemQuantity +
", itemPrice=" + itemPrice +
", itemSku=" + itemSku +
'}';
}
}
package com.afp.ordermanagement.model; package com.afp.ordermanagement.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
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;
import java.util.Objects;
@Data
@Builder
@AllArgsConstructor
@Document(collection = "orders") @Document(collection = "orders")
public class Order { public class Order {
@Id @Id
private String id; private String id;
private String emailAddress;
public String getId() { private String customerId;
return id; private String customerEmailAddress;
@Builder.Default
private String orderTrackingCode = "N/A";
private enum OrderStatus {
RECEIVED,
FULFILLED,
CANCELLED
};
@Builder.Default
private OrderStatus orderStatus = OrderStatus.RECEIVED;
@Builder.Default
private double orderCreatedAt = System.currentTimeMillis();
@Builder.Default
private double orderUpdatedAt = System.currentTimeMillis();
private List<Item> orderItems;
private CustomerAddress customerAddress;
public Order(){
orderStatus = OrderStatus.RECEIVED;
orderCreatedAt = System.currentTimeMillis();
orderUpdatedAt = System.currentTimeMillis();
orderTrackingCode = "N/A";
} }
public void setId(String id) { @Override
this.id = id; public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Order)) return false;
Order order = (Order) o;
return Double.compare(order.getOrderCreatedAt(), getOrderCreatedAt()) == 0 && Double.compare(order.getOrderUpdatedAt(), getOrderUpdatedAt()) == 0 && getId().equals(order.getId()) && getCustomerId().equals(order.getCustomerId()) && getCustomerEmailAddress().equals(order.getCustomerEmailAddress()) && Objects.equals(getOrderTrackingCode(), order.getOrderTrackingCode()) && getOrderStatus() == order.getOrderStatus() && getOrderItems().equals(order.getOrderItems()) && getCustomerAddress().equals(order.getCustomerAddress());
} }
public String getEmailAddress() { @Override
return emailAddress; public int hashCode() {
return Objects.hash(getId(), getCustomerId(), getCustomerEmailAddress(), getOrderTrackingCode(), getOrderStatus(), getOrderCreatedAt(), getOrderUpdatedAt(), getOrderItems(), getCustomerAddress());
} }
public void setEmailAddress(String emailAddress) { @Override
this.emailAddress = emailAddress; public String toString() {
return "Order{" +
"id='" + id + '\'' +
", customerId='" + customerId + '\'' +
", customerEmailAddress='" + customerEmailAddress + '\'' +
", orderTrackingCode='" + orderTrackingCode + '\'' +
", orderStatus=" + orderStatus +
", orderCreatedAt=" + orderCreatedAt +
", orderUpdatedAt=" + orderUpdatedAt +
", orderItems=" + orderItems +
", customerAddress=" + customerAddress +
'}';
} }
} }
...@@ -3,7 +3,11 @@ package com.afp.ordermanagement.repository; ...@@ -3,7 +3,11 @@ package com.afp.ordermanagement.repository;
import com.afp.ordermanagement.model.Order; import com.afp.ordermanagement.model.Order;
import org.springframework.data.mongodb.repository.ReactiveMongoRepository; import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import reactor.core.publisher.Flux;
import java.util.List;
@Repository @Repository
public interface OrderRepository extends ReactiveMongoRepository<Order, String> { public interface OrderRepository extends ReactiveMongoRepository<Order, String> {
Flux<Order> findByCustomerId(String customerId);
} }
package com.afp.ordermanagement.service; package com.afp.ordermanagement.service;
import com.afp.ordermanagement.model.Order;
import com.afp.ordermanagement.repository.OrderRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@Service
public class OrderService { public class OrderService {
@Autowired
OrderRepository orderRepository;
public Mono<Order> createOrder(Order newOrder){
return orderRepository.save(newOrder);
}
public Flux<Order> getAllOrders(){
return orderRepository.findAll();
}
public Flux<Order> getAllOrdersByCustomerId(String customerId){
return orderRepository.findByCustomerId(customerId);
}
public Mono<Order> updateOrderByOrderId(String orderId, Order newOrder){
return orderRepository.findById(orderId)
.flatMap(existingOrder -> {
existingOrder.setCustomerAddress(newOrder.getCustomerAddress());
existingOrder.setCustomerEmailAddress(newOrder.getCustomerEmailAddress());
existingOrder.setOrderTrackingCode(newOrder.getOrderTrackingCode());
existingOrder.setOrderItems(newOrder.getOrderItems());
existingOrder.setOrderStatus(newOrder.getOrderStatus());
return orderRepository.save(existingOrder);
});
}
} }
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