Hey, temat wydaje się dość powszechny i zastanawiam się jak do tego podchodzicie/co googlować.
Stack: JPA + Spring
Problem:
Wyślij mail gdy dane pole w encji zostanie zaktualizowane. Np status płatności. Status ten może być aktualizowany przez różne klasy (powszechnie znane jako OrderServce, UpdateOrderUseCase, ChangeOrederUseCase, czy inne takie w zależności od kontekstu). Mail oczywiście powinien być wysłany gdy zapytanie wykona się na bazie - tj. gdy transakcja się zakończy i wiemy że wszystko cacy na bazie.
rozwiązanie ChatGPT to @EntityListeners
, z
public class OrderListener {
@PreUpdate
public void beforeUpdate(Order order) {
// Assuming you have a way to fetch the previous state (like with `@Version` or by querying the DB)
Order oldOrder = getPreviousOrder(order.getId());
if (!Objects.equals(oldOrder.getStatus(), order.getStatus())) {
// If status has changed, publish the event
ApplicationContextProvider.getApplicationContext()
.publishEvent(new OrderStatusChangedEvent(order));
}
}
private Order getPreviousOrder(Long orderId) {
// Fetch the previous order state from the DB (for comparison)
// Typically, you'd use a repository to retrieve the old state
return orderRepository.findById(orderId).orElseThrow();
}
}
Wydaje się sensowne, ale troche mierzi getPreviousOrder
Jest to dobre rozwiązanie czy polecacie inne podejści ?