Commit 7f73aef5 authored by Alex Segers's avatar Alex Segers

[AFP-129] 🌱 Create 'Order' model seeder (@asegers)

parent af28a51a
Pipeline #1708 failed with stage
in 38 seconds
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