Commit a003e5dc authored by earndt's avatar earndt

[AFP-18] Adds Order GET, POST, PUT endpoints [@earndt]

parent 30bafe54
......@@ -2,23 +2,43 @@ package com.afp.ordermanagement.controller;
import com.afp.ordermanagement.model.Order;
import com.afp.ordermanagement.repository.OrderRepository;
import com.afp.ordermanagement.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@RestController
@RequestMapping("/api")
public class OrderController {
@Autowired
OrderRepository orderRepository;
private OrderService orderService;
@GetMapping("/order")
public Flux<Order> getAllManagers() {
System.out.println("here");
Flux<Order> managerFlux = orderRepository.findAll();
return managerFlux;
@GetMapping("/orders")
public Flux<Order> getAllOrders(){
return orderService.getAllOrders();
}
@GetMapping("/orders/{userId}")
public Flux<Order> getAllOrdersByUserId(@PathVariable("userId") String userId) {
return orderService.getAllOrdersByUserId(userId);
}
@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.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
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.Objects;
@Data
@Builder
@AllArgsConstructor
@Document(collection = "orders")
public class Order {
......@@ -16,7 +21,9 @@ public class Order {
private String userId;
private String emailAddress;
private String trackingCode;
@Builder.Default
private String trackingCode = "N/A";
private enum Status {
UNFULFILLED,
......@@ -24,11 +31,25 @@ public class Order {
CANCELLED
};
private double createdAt;
private double updatedAt;
@Builder.Default
private Status status = Status.UNFULFILLED;
@Builder.Default
private double createdAt = System.currentTimeMillis();
@Builder.Default
private double updatedAt = System.currentTimeMillis();
private List<Item> items;
private Address address;
public Order(){
status = Status.UNFULFILLED;
createdAt = System.currentTimeMillis();
updatedAt = System.currentTimeMillis();
trackingCode = "N/A";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
......
......@@ -3,7 +3,11 @@ package com.afp.ordermanagement.repository;
import com.afp.ordermanagement.model.Order;
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Flux;
import java.util.List;
@Repository
public interface OrderRepository extends ReactiveMongoRepository<Order, String> {
Flux<Order> findByUserId(String userId);
}
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 {
@Autowired
OrderRepository orderRepository;
public Mono<Order> createOrder(Order newOrder){
return orderRepository.save(newOrder);
}
public Flux<Order> getAllOrders(){
return orderRepository.findAll();
}
public Flux<Order> getAllOrdersByUserId(String userId){
return orderRepository.findByUserId(userId);
}
public Mono<Order> updateOrderByOrderId(String orderId, Order newOrder){
return orderRepository.findById(orderId)
.flatMap(existingOrder -> {
existingOrder.setAddress(newOrder.getAddress());
existingOrder.setEmailAddress(newOrder.getEmailAddress());
existingOrder.setTrackingCode(newOrder.getTrackingCode());
existingOrder.setItems(newOrder.getItems());
existingOrder.setStatus(newOrder.getStatus());
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