Skip to content

Commit a9684be

Browse files
Merge pull request #610 from qbicsoftware/patch/fix-offer-upload
fix event handling when uploading offer pdfs
2 parents d8c0328 + 8b7d064 commit a9684be

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

project-management/src/main/java/life/qbic/projectmanagement/application/purchase/ProjectPurchaseService.java

+27-3
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
import static life.qbic.logging.service.LoggerFactory.logger;
55

66
import java.time.Instant;
7+
import java.util.ArrayList;
78
import java.util.List;
89
import java.util.Optional;
910
import life.qbic.application.commons.ApplicationException;
11+
import life.qbic.domain.concepts.DomainEvent;
1012
import life.qbic.domain.concepts.DomainEventDispatcher;
13+
import life.qbic.domain.concepts.DomainEventSubscriber;
14+
import life.qbic.domain.concepts.LocalDomainEventDispatcher;
1115
import life.qbic.logging.api.Logger;
1216
import life.qbic.projectmanagement.application.api.ProjectPurchaseStorage;
1317
import life.qbic.projectmanagement.application.api.PurchaseStoreException;
@@ -42,14 +46,21 @@ public void addPurchases(String projectId, List<OfferDTO> offers) {
4246

4347
var projectReference = ProjectId.parse(projectId);
4448
var purchaseDate = Instant.now();
49+
50+
List<DomainEvent> domainEventsCache = new ArrayList<>();
51+
var localDomainEventDispatcher = LocalDomainEventDispatcher.instance();
52+
localDomainEventDispatcher.reset();
53+
localDomainEventDispatcher.subscribe(
54+
new PurchaseCreatedDomainEventSubscriber(domainEventsCache));
55+
4556
List<ServicePurchase> servicePurchases = offers.stream()
4657
.map(it -> Offer.create(it.signed(), it.fileName(), it.content()))
4758
.map(it -> ServicePurchase.create(projectReference, purchaseDate, it))
4859
.toList();
4960
try {
50-
Iterable<ServicePurchase> storedPurchases = storage.storePurchases(servicePurchases);
51-
for (ServicePurchase storedPurchase : storedPurchases) {
52-
DomainEventDispatcher.instance().dispatch(new PurchaseCreatedEvent(storedPurchase.getId()));
61+
Iterable<ServicePurchase> results = storage.storePurchases(servicePurchases);
62+
for(ServicePurchase servicePurchase : results) {
63+
DomainEventDispatcher.instance().dispatch(new PurchaseCreatedEvent(servicePurchase.getId()));
5364
}
5465
} catch (PurchaseStoreException e) {
5566
throw ApplicationException.wrapping(e);
@@ -91,5 +102,18 @@ public Optional<Offer> getOfferWithContent(String projectId, Long offerId) {
91102
public Optional<ProjectId> findProjectIdOfPurchase(Long purchaseID) {
92103
return storage.findProjectIdOfPurchase(purchaseID);
93104
}
105+
private record PurchaseCreatedDomainEventSubscriber(
106+
List<DomainEvent> domainEventsCache) implements
107+
DomainEventSubscriber<DomainEvent> {
108+
109+
@Override
110+
public Class<? extends DomainEvent> subscribedToEventType() {
111+
return PurchaseCreatedEvent.class;
112+
}
94113

114+
@Override
115+
public void handleEvent(DomainEvent event) {
116+
domainEventsCache.add(event);
117+
}
118+
}
95119
}

project-management/src/main/java/life/qbic/projectmanagement/domain/model/project/purchase/ServicePurchase.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,9 @@ public Instant purchasedOn() {
6565
}
6666

6767
private void emitCreatedEvent() {
68-
var createdEvent = new PurchaseCreatedEvent(this.id);
69-
LocalDomainEventDispatcher.instance().dispatch(createdEvent);
68+
//FIXME id is null
69+
//var createdEvent = new PurchaseCreatedEvent(this.id);
70+
//LocalDomainEventDispatcher.instance().dispatch(createdEvent);
7071
}
7172

7273
@Override

0 commit comments

Comments
 (0)