DataSeeder.java
package cz.vsb.crm.config;
import cz.vsb.crm.dto.AccountRequest;
import cz.vsb.crm.dto.AccountResponse;
import cz.vsb.crm.dto.LeadLineRequest;
import cz.vsb.crm.dto.LeadRequest;
import cz.vsb.crm.dto.OrderLineRequest;
import cz.vsb.crm.dto.OrderRequest;
import cz.vsb.crm.dto.ProductRequest;
import cz.vsb.crm.dto.ProductResponse;
import cz.vsb.crm.dto.UserRequest;
import cz.vsb.crm.dto.UserResponse;
import cz.vsb.crm.repository.AccountRepository;
import cz.vsb.crm.service.AccountService;
import cz.vsb.crm.service.LeadService;
import cz.vsb.crm.service.OrderService;
import cz.vsb.crm.service.ProductService;
import cz.vsb.crm.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
@Component
@Profile("dev")
@RequiredArgsConstructor
public class DataSeeder implements CommandLineRunner {
private final AccountRepository accountRepository;
private final AccountService accountService;
private final UserService userService;
private final ProductService productService;
private final LeadService leadService;
private final OrderService orderService;
@Override
public void run(String... args) {
if (accountRepository.count() > 0) {
return;
}
UserResponse admin = userService.create(
new UserRequest("admin", "Admin", "admin@vsb.cz", "admin12345"));
UserResponse manager = userService.create(
new UserRequest("manager", "Manager", "manager@vsb.cz", "manager12345"));
userService.create(
new UserRequest("operator", "User", "operator@vsb.cz", "operator12345"));
AccountResponse acme = accountService.create(new AccountRequest(
"Acme Corporation", "Manufacturing", "1 Industrial Way, Ostrava",
"+420 555 010 100", "info@acme.example", "Customer",
"Jan Novak", "jan.novak@acme.example", "+420 555 010 101", "Procurement", null));
AccountResponse globex = accountService.create(new AccountRequest(
"Globex s.r.o.", "Retail", "42 Market Street, Brno",
"+420 555 020 200", "contact@globex.example", "Customer",
"Eva Svobodova", "eva@globex.example", "+420 555 020 201", "Buyer", null));
accountService.create(new AccountRequest(
"Initech a.s.", "Software", "7 Tech Park, Praha",
"+420 555 030 300", "hello@initech.example", "Prospect",
"Petr Dvorak", "petr@initech.example", "+420 555 030 301", "CTO", null));
accountService.create(new AccountRequest(
"Oldcorp", "Legacy", null, null, null, "Inactive",
null, null, null, null, LocalDate.now().minusDays(30)));
ProductResponse laptop = productService.create(new ProductRequest(
"Laptop Pro 15", "15-inch business laptop", new BigDecimal("1299.00"), 100, null));
ProductResponse mouse = productService.create(new ProductRequest(
"Wireless Mouse", "Ergonomic wireless mouse", new BigDecimal("24.90"), 500, null));
ProductResponse monitor = productService.create(new ProductRequest(
"4K Monitor 27", "27-inch 4K UHD monitor", new BigDecimal("389.00"), 80, null));
ProductResponse keyboard = productService.create(new ProductRequest(
"Mechanical Keyboard", "Tactile mechanical keyboard", new BigDecimal("89.00"), 200, null));
productService.create(new ProductRequest(
"USB-C Dock", "Docking station with charging", new BigDecimal("159.00"), 120, null));
productService.create(new ProductRequest(
"Webcam HD", "1080p webcam", new BigDecimal("49.00"), 300, null));
leadService.create(new LeadRequest(acme.id(), manager.id(), "Website", "Qualified",
new BigDecimal("5000.00"), null,
List.of(new LeadLineRequest(laptop.id(), 3), new LeadLineRequest(monitor.id(), 3))));
leadService.create(new LeadRequest(globex.id(), admin.id(), "Referral", "New",
new BigDecimal("1200.00"), null,
List.of(new LeadLineRequest(keyboard.id(), 10))));
orderService.create(new OrderRequest(acme.id(), null, manager.id(), "Processing", "Standard", null,
List.of(new OrderLineRequest(laptop.id(), 2, null),
new OrderLineRequest(mouse.id(), 5, null))));
orderService.create(new OrderRequest(globex.id(), null, admin.id(), "New", "Express", null,
List.of(new OrderLineRequest(monitor.id(), 4, null),
new OrderLineRequest(keyboard.id(), 4, null))));
}
}