Commit 5a288691 authored by Alex Segers's avatar Alex Segers

Merge branch 'AFP-129' into 'dev'

🔀 [AFP-129] 🌱 Orders Collection Seeder

See merge request !27
parents aeea3190 7f73aef5
Pipeline #1709 failed with stage
in 39 seconds
......@@ -2,35 +2,7 @@ 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 + '\'' +
'}';
}
private String street, city, state, zip;
}
......@@ -6,11 +6,7 @@ import java.util.Objects;
@Data
public class Item {
private String itemId;
private String itemName;
private String itemSku;
private String itemId, itemName, itemSku;
private int itemQuantity;
private double itemPrice;
}
package com.afp.ordermanagement.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
import java.util.Objects;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "orders")
public class Order {
public Order(OrderStatus status) {
this.orderStatus = status;
}
@Id
private String id;
......@@ -20,91 +23,12 @@ public class Order {
private String orderTrackingCode;
private OrderStatus orderStatus;
private long orderCreatedAt;
private long orderUpdatedAt;
private String customerId;
private String customerEmailAddress;
private List<Item> orderItems;
private CustomerAddress customerAddress;
public Order(){
}
public Order(OrderStatus status) {
this.orderStatus = status;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getOrderTrackingCode() {
return orderTrackingCode;
}
public void setOrderTrackingCode(String orderTrackingCode) {
this.orderTrackingCode = orderTrackingCode;
}
public OrderStatus getOrderStatus() {
return orderStatus;
}
private long orderCreatedAt, orderUpdatedAt;
public void setOrderStatus(OrderStatus orderStatus) {
this.orderStatus = orderStatus;
}
private String customerId, customerEmailAddress;
public long getOrderCreatedAt() {
return orderCreatedAt;
}
public void setOrderCreatedAt(long orderCreatedAt) {
this.orderCreatedAt = orderCreatedAt;
}
public long getOrderUpdatedAt() {
return orderUpdatedAt;
}
public void setOrderUpdatedAt(long orderUpdatedAt) {
this.orderUpdatedAt = orderUpdatedAt;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public String getCustomerEmailAddress() {
return customerEmailAddress;
}
public void setCustomerEmailAddress(String customerEmailAddress) {
this.customerEmailAddress = customerEmailAddress;
}
public List<Item> getOrderItems() {
return orderItems;
}
public void setOrderItems(List<Item> orderItems) {
this.orderItems = orderItems;
}
public CustomerAddress getCustomerAddress() {
return customerAddress;
}
private List<Item> orderItems;
public void setCustomerAddress(CustomerAddress customerAddress) {
this.customerAddress = customerAddress;
}
private CustomerAddress customerAddress;
}
......@@ -10,11 +10,13 @@ import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.stream.IntStream;
@Component
public class ManagerSeeder {
// Toggle
static private final boolean RUN_SEEDER = false; // FIXME: <- Set to `true` to run seeder on app start-up (in development)
@Autowired
ManagerRepository managerRepository;
......@@ -36,7 +38,7 @@ public class ManagerSeeder {
@EventListener
public void seedManagers(ContextRefreshedEvent event) {
// Only generate seeds if in development environment
if (isEnvDevelopment()) {
if (isEnvDevelopment() && RUN_SEEDER && SEED_COUNT > 0) {
managerRepository
.deleteAll()
.subscribe();
......
package com.afp.ordermanagement.seeder;
import com.afp.ordermanagement.model.CustomerAddress;
import com.afp.ordermanagement.model.Item;
import com.afp.ordermanagement.model.Order;
import com.afp.ordermanagement.model.OrderStatus;
import com.afp.ordermanagement.repository.OrderRepository;
import com.github.javafaker.Faker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
@Component
public class OrderSeeder {
// Toggle
static private final boolean RUN_SEEDER = false; // FIXME: <- Set to `true` to run seeder on app start-up (in development)
@Autowired
OrderRepository orderRepository;
@Autowired
Faker faker;
@Autowired
Environment env;
// Verify that the current environment is NOT production or test
boolean isEnvDevelopment() {
return env.acceptsProfiles(Profiles.of("default", "dev", "development", "local"));
}
static private Stream<String> CUSTOMER_USERNAMES = Stream.of(
"nrobinson", "rsara", "agannamaneni", "rsayannagari", // Superiors
"ccottier", "kmuldoon", "nmoosapet", "spangburn", "xlu", // ECom Team
"asegers", "dbhuller", "earndt", "kkaminski", "svalencia", "vivaddadhi" // OMan Team
);
// Create order seeds as soon as app is up and running
@EventListener
public void seedOrders(ContextRefreshedEvent event) {
// Only generate seeds if in development environment
if (isEnvDevelopment() && RUN_SEEDER) {
orderRepository
.deleteAll()
.subscribe();
CUSTOMER_USERNAMES.forEach(username -> {
String email = String.format("%s@nisum.com", username);
orderRepository
.insert(generateOrder(email))
.subscribe();
});
}
}
private Order generateOrder(String email){
OrderStatus randStatus = OrderStatus.values()[faker.number().numberBetween(0, 2)]; // exclusive range
Order order = new Order(randStatus);
order.setOrderTrackingCode(faker.number().digits(27));
long unixTime = System.currentTimeMillis();
order.setOrderCreatedAt(unixTime);
order.setOrderUpdatedAt(unixTime);
order.setCustomerId(faker.number().digits(12));
order.setCustomerEmailAddress(email);
// Order items
int randOrderCount = faker.number().numberBetween(1, 10);
List<Item> orderItems = IntStream
.range(0, randOrderCount)
.mapToObj(n -> generateItem())
.collect(Collectors.toList());
order.setOrderItems(orderItems);
// Order address
order.setCustomerAddress(generateOrderAddress());
return order;
}
private Item generateItem(){
Item item = new Item();
item.setItemId(faker.number().digits(12));
item.setItemName(faker.commerce().productName());
item.setItemSku(faker.random().hex(12));
item.setItemQuantity(faker.number().numberBetween(1, 30));
item.setItemPrice(faker.number().randomDouble(2, 5, 1000));
return item;
}
private CustomerAddress generateOrderAddress(){
CustomerAddress address = new CustomerAddress();
address.setStreet(faker.address().streetAddress());
address.setCity(faker.address().city());
String stateAbbr = faker.address().stateAbbr();
address.setState(stateAbbr);
address.setZip(faker.address().zipCode());
return address;
}
}
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