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; ...@@ -2,35 +2,7 @@ package com.afp.ordermanagement.model;
import lombok.Data; import lombok.Data;
import java.util.Objects;
@Data @Data
public class CustomerAddress { public class CustomerAddress {
private String street; private String street, city, state, zip;
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 + '\'' +
'}';
}
} }
...@@ -6,11 +6,7 @@ import java.util.Objects; ...@@ -6,11 +6,7 @@ import java.util.Objects;
@Data @Data
public class Item { public class Item {
private String itemId, itemName, itemSku;
private String itemId;
private String itemName;
private String itemSku;
private int itemQuantity; private int itemQuantity;
private double itemPrice; private double itemPrice;
} }
package com.afp.ordermanagement.model; package com.afp.ordermanagement.model;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
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.List;
import java.util.Objects;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor
@Document(collection = "orders") @Document(collection = "orders")
public class Order { public class Order {
public Order(OrderStatus status) {
this.orderStatus = status;
}
@Id @Id
private String id; private String id;
...@@ -20,91 +23,12 @@ public class Order { ...@@ -20,91 +23,12 @@ public class Order {
private String orderTrackingCode; private String orderTrackingCode;
private OrderStatus orderStatus; 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() { private long orderCreatedAt, orderUpdatedAt;
return orderStatus;
}
public void setOrderStatus(OrderStatus orderStatus) { private String customerId, customerEmailAddress;
this.orderStatus = orderStatus;
}
public long getOrderCreatedAt() { private List<Item> orderItems;
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;
}
public void setCustomerAddress(CustomerAddress customerAddress) { private CustomerAddress customerAddress;
this.customerAddress = customerAddress;
}
} }
...@@ -10,11 +10,13 @@ import org.springframework.core.env.Environment; ...@@ -10,11 +10,13 @@ import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles; import org.springframework.core.env.Profiles;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.stream.IntStream; import java.util.stream.IntStream;
@Component @Component
public class ManagerSeeder { 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 @Autowired
ManagerRepository managerRepository; ManagerRepository managerRepository;
...@@ -36,7 +38,7 @@ public class ManagerSeeder { ...@@ -36,7 +38,7 @@ public class ManagerSeeder {
@EventListener @EventListener
public void seedManagers(ContextRefreshedEvent event) { public void seedManagers(ContextRefreshedEvent event) {
// Only generate seeds if in development environment // Only generate seeds if in development environment
if (isEnvDevelopment()) { if (isEnvDevelopment() && RUN_SEEDER && SEED_COUNT > 0) {
managerRepository managerRepository
.deleteAll() .deleteAll()
.subscribe(); .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