Materialized View Pattern is recommend to store its own local copy of data in the microservice.
xxxxxxxxxx
public interface PurchaseOrderService {
void placeOrder(int userIndex, int productIndex);
List<PurchaseOrderSummaryDto> getSaleSummary();
}
@Service
public class PurchaseOrderServiceImpl implements PurchaseOrderService {
@Autowired
private PurchaseOrderSummaryRepository purchaseOrderSummaryRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private ProductRepository productRepository;
@Autowired
private PurchaseOrderRepository purchaseOrderRepository;
private List<User> users;
private List<Product> products;
@PostConstruct
private void init(){
this.users = this.userRepository.findAll();
this.products = this.productRepository.findAll();
}
@Override
public void placeOrder(int userIndex, int productIndex) {
PurchaseOrder purchaseOrder = new PurchaseOrder();
purchaseOrder.setProductId(this.products.get(productIndex).getId());
purchaseOrder.setUserId(this.users.get(userIndex).getId());
this.purchaseOrderRepository.save(purchaseOrder);
}
@Override
public List<PurchaseOrderSummaryDto> getSaleSummary() {
return this.purchaseOrderSummaryRepository.findAll()
.stream()
.map(pos -> {
PurchaseOrderSummaryDto dto = new PurchaseOrderSummaryDto();
dto.setState(pos.getState());
dto.setTotalSale(pos.getTotalSale());
return dto;
})
.collect(Collectors.toList());
}
}