From 7cf9753bb7b992d46cba30290a1547efc3419229 Mon Sep 17 00:00:00 2001
From: rowe42 <25983841+rowe42@users.noreply.github.com>
Date: Wed, 17 Sep 2025 15:54:32 +0200
Subject: [PATCH 01/11] Updated version; now postkorb message is only sent when
sende_nachricht_nach_extern is set; and only the latest public article is
sent
---
ticketing-eai/api-client-internal/pom.xml | 4 +
.../api-spec-internal-without-security.json | 3 +
.../src/main/resources/api-spec-internal.json | 3 +
ticketing-eventing/README.md | 4 +-
.../src/main/resources/application-local.yml | 4 +-
ticketing-eventing/handler-core/pom.xml | 2 +-
.../mail-handler-service/pom.xml | 2 +-
.../usecase/EventHandlingUseCase.java | 84 +++++++++++++------
.../config/MailHandlerProperties.java | 4 +-
.../exceptions/NoValidArticleException.java | 7 ++
.../src/main/resources/application-local.yml | 9 +-
.../src/main/resources/application.yml | 3 +-
12 files changed, 88 insertions(+), 41 deletions(-)
create mode 100644 ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/exceptions/NoValidArticleException.java
diff --git a/ticketing-eai/api-client-internal/pom.xml b/ticketing-eai/api-client-internal/pom.xml
index 3f212a6d..7f56e07d 100644
--- a/ticketing-eai/api-client-internal/pom.xml
+++ b/ticketing-eai/api-client-internal/pom.xml
@@ -79,6 +79,10 @@
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
+
+ org.junit.jupiter
+ junit-jupiter
+
diff --git a/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal-without-security.json b/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal-without-security.json
index 97e92bbe..5df2c403 100644
--- a/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal-without-security.json
+++ b/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal-without-security.json
@@ -1862,6 +1862,9 @@
"direktkennwort": {
"type": "string"
},
+ "sende_nachricht_nach_extern": {
+ "type": "string"
+ },
"ticket_time_accounting_ids": {
"type": "array",
"items": {
diff --git a/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal.json b/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal.json
index eeedbad4..c0bf3f11 100644
--- a/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal.json
+++ b/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal.json
@@ -1972,6 +1972,9 @@
"direktkennwort": {
"type": "string"
},
+ "sende_nachricht_nach_extern": {
+ "type": "string"
+ },
"ticket_time_accounting_ids": {
"type": "array",
"items": {
diff --git a/ticketing-eventing/README.md b/ticketing-eventing/README.md
index 149c45bb..9ce35b48 100644
--- a/ticketing-eventing/README.md
+++ b/ticketing-eventing/README.md
@@ -24,7 +24,7 @@ Open **Event-Service** via Swagger (http://localhost:8080/swagger-ui/index.html)
- User: zammad
- Password: password
- Method: POST `/api/event`
-- X-Zammad-Trigger: `Trigger Name`
+- X-Zammad-Trigger: `T2805_Event_Nachricht_In_Postkorb`
- X-Zammad-Delivery: `myID`
- Request Body:
```json
@@ -33,7 +33,7 @@ Open **Event-Service** via Swagger (http://localhost:8080/swagger-ui/index.html)
"status": "closed",
"status_id": "1",
"anliegenart": "technischer Bürgersupport",
- "lhmExtId": "33caabe6-317c-4c2d-8bf7-6c36230599db"
+ "lhmextid": "33caabe6-317c-4c2d-8bf7-6c36230599db"
}
```
diff --git a/ticketing-eventing/eventing-service/src/main/resources/application-local.yml b/ticketing-eventing/eventing-service/src/main/resources/application-local.yml
index 046f0de8..8be36479 100644
--- a/ticketing-eventing/eventing-service/src/main/resources/application-local.yml
+++ b/ticketing-eventing/eventing-service/src/main/resources/application-local.yml
@@ -37,5 +37,7 @@ logging:
dbs:
eventing:
trigger-mapping:
- - trigger-name: "Trigger Name"
+ - trigger-name: "T2800_Event_Statusaenderung"
action: "state_changed"
+ - trigger-name: "T2805_Event_Nachricht_In_Postkorb"
+ action: "send_to_postbox"
diff --git a/ticketing-eventing/handler-core/pom.xml b/ticketing-eventing/handler-core/pom.xml
index 5702cab0..e90e2c62 100644
--- a/ticketing-eventing/handler-core/pom.xml
+++ b/ticketing-eventing/handler-core/pom.xml
@@ -67,7 +67,7 @@
0.2.0
- 0.3.0
+ 0.4.0-SNAPSHOT
diff --git a/ticketing-eventing/mail-handler-service/pom.xml b/ticketing-eventing/mail-handler-service/pom.xml
index ab93bfc2..b852ef7c 100644
--- a/ticketing-eventing/mail-handler-service/pom.xml
+++ b/ticketing-eventing/mail-handler-service/pom.xml
@@ -43,7 +43,7 @@
2025.0.0
- 0.1.0
+ 0.2.0-SNAPSHOT
8.1
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
index 8ce294f3..b3581271 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
@@ -11,7 +11,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
-import java.util.stream.Collectors;
+import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.exceptions.NoValidArticleException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -22,6 +22,11 @@
public class EventHandlingUseCase implements EventHandlerInPort {
private static final String INTERNAL_ATTACHMENTS_ARTICLE_TITLE = "Interner Artikel für interne Anhänge.";
private static final String FORM_ATTACHMENT_NAME = "XML-Daten.xml";
+ public static final String TICKETING_VERTRAUENSNIVEAU = "ticketingVertrauensniveau";
+ public static final String LEGACY_POSTKORB_HANDLE = "legacyPostkorbHandle";
+ public static final String ACCOUNT_SOURCE = "accountSource";
+ public static final String TO_POSTBOX_DEFAULT = "2";
+ public static final String TO_POSTBOX_HIGH = "3";
private final XmlMapper xmlMapper = new XmlMapper();
private final MailHandlerProperties mailHandlerProperties;
@@ -36,51 +41,76 @@ public void handleEvent(final Event event) {
return;
}
log.info("Handling event");
- // find event ticket
- final TicketInternal ticket = ticketingOutPort.getTicket(event.ticket());
- // get parsed form
- final Map form = getParsedForm(ticket);
- // send mail
- final String subject = buildSubject(ticket, form);
- final String body = buildBody(ticket);
- sendMailOutport.sendMail(
- mailHandlerProperties.getRecipient(), subject, body);
- log.info("Handled event successfully");
+ try {
+ // find event ticket
+ final TicketInternal ticket = ticketingOutPort.getTicket(event.ticket());
+ //TODO dummy-setting entfernen
+ ticket.setSendeNachrichtNachExtern("3");
+ //check if ticket should be sent
+ if (!isRelevantTicket(ticket)) {
+ log.debug("Ticket not relevant");
+ return;
+ }
+ // get parsed form
+ final Map form = getParsedForm(ticket);
+ // send mail
+ final String subject = buildSubject(ticket, form);
+ log.debug("Created subject: " + subject);
+ final String body = buildBody(ticket);
+ log.debug("Created body: " + body);
+ sendMailOutport.sendMail(
+ mailHandlerProperties.getRecipient(), subject, body);
+ log.info("Event handled successfully");
+ } catch (NoValidArticleException e) {
+ log.error(e.getMessage());
+ log.error("Event NOT handled successfully");
+ }
}
private boolean isRelevantEvent(final Event event) {
log.debug("checking event: " + event);
return
- // state was changed
- mailHandlerProperties.getStateChangeAction().equals(event.action()) &&
- // new state is closed
- mailHandlerProperties.getClosedState().equals(event.status()) &&
+ // state was changed by trigger send-to-postbox
+ mailHandlerProperties.getTicketChangeAction().equals(event.action()) &&
// is relevant anliegen
mailHandlerProperties.getRelevantTicketTypes().contains(event.anliegenart()) &&
// user does have an lhmExtId (i.e. BayernID or BundID user)
event.lhmExtId() != null && !event.lhmExtId().isEmpty();
}
+ private boolean isRelevantTicket(TicketInternal ticket) {
+ log.debug("Checking value of sende_nachricht_nach_extern: " + ticket.getSendeNachrichtNachExtern());
+ return TO_POSTBOX_DEFAULT.equals(ticket.getSendeNachrichtNachExtern()) || TO_POSTBOX_HIGH.equals(ticket.getSendeNachrichtNachExtern());
+ }
+
+
private String buildSubject(final TicketInternal ticket, final Map form) {
- return "[%s;%s;%s;%s] Ihr Anliegen '%s' wurde abschließend bearbeitet"
+ String authlevel;
+ if (form.get(TICKETING_VERTRAUENSNIVEAU) == null) {
+ log.error("no ticketingVertrauensniveau found in ticket " + ticket.getId() + " - setting level1");
+ authlevel = "level1";
+ } else {
+ authlevel = "3".equals(ticket.getSendeNachrichtNachExtern()) ? "level3" : String.valueOf(form.get(TICKETING_VERTRAUENSNIVEAU));
+ }
+
+ return "[%s;%s;%s;%s] Neue Nachricht zu Ihrem Anliegen '%s'"
.formatted(
- form.get("legacyPostkorbHandle"),
- form.get("accountSource"),
- form.get("ticketingVertrauensniveau"),
- "Dummy",
+ form.get(LEGACY_POSTKORB_HANDLE),
+ form.get(ACCOUNT_SOURCE),
+ authlevel,
+ "Zammad-Eventing",
ticket.getTitle());
}
- private String buildBody(final TicketInternal ticket) {
+ private String buildBody(final TicketInternal ticket) throws NoValidArticleException {
assert ticket.getArticles() != null;
return ticket.getArticles().stream()
- // only public articles of type "web" or "note"
+ // find last public articles of type "note"
.filter(i -> Boolean.FALSE.equals(i.getInternal()) &&
- (ArticleInternal.TypeEnum.WEB.equals(i.getType()) || ArticleInternal.TypeEnum.NOTE.equals(i.getType())))
- // format single article
- .map(i -> "Titel: %s
Body: %s".formatted(i.getSubject(), i.getBody()))
- // build body
- .collect(Collectors.joining("
"));
+ ArticleInternal.TypeEnum.NOTE.equals(i.getType()))
+ .reduce((first, second) -> second)
+ .map(ArticleInternal::getBody)
+ .orElseThrow(() -> new NoValidArticleException("no valid article found in ticket " + ticket.getId()));
}
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/config/MailHandlerProperties.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/config/MailHandlerProperties.java
index db90aed9..f581bf32 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/config/MailHandlerProperties.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/config/MailHandlerProperties.java
@@ -18,9 +18,7 @@ public class MailHandlerProperties {
@NotBlank
private String recipient;
@NotBlank
- private String stateChangeAction;
- @NotBlank
- private String closedState;
+ private String ticketChangeAction;
@NotNull
private List relevantTicketTypes;
}
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/exceptions/NoValidArticleException.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/exceptions/NoValidArticleException.java
new file mode 100644
index 00000000..475cdc06
--- /dev/null
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/exceptions/NoValidArticleException.java
@@ -0,0 +1,7 @@
+package de.muenchen.oss.dbs.ticketing.eventing.mailhandler.exceptions;
+
+public class NoValidArticleException extends Exception {
+ public NoValidArticleException(String s) {
+ super(s);
+ }
+}
diff --git a/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml b/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
index 22cc2f0a..88d19647 100644
--- a/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
+++ b/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
@@ -23,18 +23,19 @@ spring:
client:
provider:
zammad:
- issuer-uri: TODO
+ issuer-uri: https://ssodev.muenchen.de/auth/realms/KM81
registration:
zammad:
provider: zammad
authorization-grant-type: client_credentials
- client-id: TODO
- client-secret: TODO
+ client-id: mpdz-ticketing-fk
+ client-secret: V8zmjkcqgXE9xIWhljjVT45Bxli2c02B
dbs:
eai:
client:
- eai-base-url: http://localhost:8082/
+ eai-base-url: https://dbs-ticketing-eai-integration-dbs-ticketing-eai.apps.capk.muenchen.de/
+ # eai-base-url: http://localhost:8082/
eventing:
mail:
recipient: test@example.com
diff --git a/ticketing-eventing/mail-handler-service/src/main/resources/application.yml b/ticketing-eventing/mail-handler-service/src/main/resources/application.yml
index 85fd19d4..09292684 100644
--- a/ticketing-eventing/mail-handler-service/src/main/resources/application.yml
+++ b/ticketing-eventing/mail-handler-service/src/main/resources/application.yml
@@ -28,8 +28,7 @@ dbs:
mail:
smtp:
from-address: ${spring.mail.username}
- state-change-action: "state_changed"
- closed-state: "closed"
+ ticket-change-action: "send_to_postbox"
server:
shutdown: "graceful"
From 06c5cbeb7dc246a49b6e562fe3256597d5aeaba3 Mon Sep 17 00:00:00 2001
From: rowe42 <25983841+rowe42@users.noreply.github.com>
Date: Thu, 18 Sep 2025 12:25:52 +0200
Subject: [PATCH 02/11] added handling of attachments
---
.../mailhandler/adapter/out/mail/Mail.java | 16 ++++++
.../adapter/out/mail/MailAdapter.java | 42 ++++++++++++--
.../application/port/out/SendMailOutPort.java | 3 +-
.../usecase/EventHandlingUseCase.java | 55 +++++++++++++------
.../src/main/resources/application.yml | 2 +
5 files changed, 95 insertions(+), 23 deletions(-)
create mode 100644 ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/Mail.java
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/Mail.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/Mail.java
new file mode 100644
index 00000000..847ecd4a
--- /dev/null
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/Mail.java
@@ -0,0 +1,16 @@
+package de.muenchen.oss.dbs.ticketing.eventing.mailhandler.adapter.out.mail;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.io.InputStream;
+import java.util.Map;
+
+@Data
+@AllArgsConstructor
+public class Mail {
+ private String recipient;
+ private String subject;
+ private String body;
+ private Map attachments;
+}
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/MailAdapter.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/MailAdapter.java
index 2062213a..837e36df 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/MailAdapter.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/MailAdapter.java
@@ -1,31 +1,61 @@
package de.muenchen.oss.dbs.ticketing.eventing.mailhandler.adapter.out.mail;
import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.application.port.out.SendMailOutPort;
+import jakarta.activation.DataSource;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
+import jakarta.mail.util.ByteArrayDataSource;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.io.InputStreamSource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
@Service
@RequiredArgsConstructor
+@Slf4j
public class MailAdapter implements SendMailOutPort {
private final JavaMailSender mailSender;
private final MailProperties mailProperties;
@Override
- public void sendMail(final String recipient, final String subject, final String body) {
+ public void sendMail(Mail mail) {
final MimeMessage mimeMessage = mailSender.createMimeMessage();
- final MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, "utf-8");
try {
+ final MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "utf-8");
helper.setFrom(mailProperties.getFromAddress());
- helper.setTo(recipient);
- helper.setSubject(subject);
- helper.setText(body, true);
+ helper.setTo(mail.getRecipient());
+ helper.setSubject(mail.getSubject());
+ helper.setText(mail.getBody(), true);
+ for (Map.Entry e : mail.getAttachments().entrySet()) {
+ //TODO is there a way to do this with streaming? The following line loads the attachment into RAM...
+ DataSource dataSource = new ByteArrayDataSource(e.getValue(), "application/octet-stream");
+ helper.addAttachment(e.getKey(), dataSource);
+ //maybe like this?
+ //helper.addAttachment(e.getKey(), new InputStreamSourceImpl(e.getValue()));
+ }
mailSender.send(mimeMessage);
- } catch (MessagingException e) {
+ } catch (MessagingException | IOException e) {
throw new RuntimeException(e);
}
}
+
+// private class InputStreamSourceImpl implements InputStreamSource {
+// private final InputStream inputStream;
+//
+// public InputStreamSourceImpl(InputStream inputStream) {
+// this.inputStream = inputStream;
+// }
+//
+// @Override
+// public InputStream getInputStream() {
+// return inputStream;
+// }
+// }
+
}
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/port/out/SendMailOutPort.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/port/out/SendMailOutPort.java
index 9ef8a4d5..2e9806af 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/port/out/SendMailOutPort.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/port/out/SendMailOutPort.java
@@ -1,5 +1,6 @@
package de.muenchen.oss.dbs.ticketing.eventing.mailhandler.application.port.out;
+import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.adapter.out.mail.Mail;
public interface SendMailOutPort {
- void sendMail(String recipient, String subject, String body);
+ void sendMail(Mail mail);
}
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
index b3581271..594ca7bc 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
@@ -1,16 +1,21 @@
package de.muenchen.oss.dbs.ticketing.eventing.mailhandler.application.usecase;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import de.muenchen.oss.dbs.ticketing.eai.client.model.ArticleAttachment;
import de.muenchen.oss.dbs.ticketing.eai.client.model.ArticleInternal;
import de.muenchen.oss.dbs.ticketing.eai.client.model.TicketInternal;
import de.muenchen.oss.dbs.ticketing.eventing.handlercore.application.port.in.EventHandlerInPort;
import de.muenchen.oss.dbs.ticketing.eventing.handlercore.application.port.out.TicketingOutPort;
import de.muenchen.oss.dbs.ticketing.eventing.handlercore.domain.model.Event;
+import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.adapter.out.mail.Mail;
import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.application.port.out.SendMailOutPort;
import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.config.MailHandlerProperties;
import java.io.IOException;
import java.io.InputStream;
+import java.util.HashMap;
import java.util.Map;
+import java.util.stream.Collectors;
+
import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.exceptions.NoValidArticleException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -53,13 +58,10 @@ public void handleEvent(final Event event) {
}
// get parsed form
final Map form = getParsedForm(ticket);
- // send mail
- final String subject = buildSubject(ticket, form);
- log.debug("Created subject: " + subject);
- final String body = buildBody(ticket);
- log.debug("Created body: " + body);
- sendMailOutport.sendMail(
- mailHandlerProperties.getRecipient(), subject, body);
+ //find relevant article
+ final ArticleInternal article = findRelevantArticle(ticket);
+ sendMail(ticket, form, article);
+
log.info("Event handled successfully");
} catch (NoValidArticleException e) {
log.error(e.getMessage());
@@ -84,6 +86,26 @@ private boolean isRelevantTicket(TicketInternal ticket) {
}
+ private ArticleInternal findRelevantArticle(final TicketInternal ticket) throws NoValidArticleException {
+ assert ticket.getArticles() != null;
+ return ticket.getArticles().stream()
+ // find last public articles of type "note"
+ .filter(i -> Boolean.FALSE.equals(i.getInternal()) &&
+ ArticleInternal.TypeEnum.NOTE.equals(i.getType()))
+ .reduce((first, second) -> second)
+ .orElseThrow(() -> new NoValidArticleException("no valid article found in ticket " + ticket.getId()));
+ }
+
+ private void sendMail(TicketInternal ticket, Map form, ArticleInternal article) {
+ final String recipient = mailHandlerProperties.getRecipient();
+ final String subject = buildSubject(ticket, form);
+ log.debug("Created subject: " + subject);
+ final String body = buildBody(article);
+ log.debug("Created body: " + body);
+ final Map attachments = buildAttachments(article);
+ sendMailOutport.sendMail(new Mail(recipient, subject, body, attachments));
+ }
+
private String buildSubject(final TicketInternal ticket, final Map form) {
String authlevel;
if (form.get(TICKETING_VERTRAUENSNIVEAU) == null) {
@@ -102,16 +124,17 @@ private String buildSubject(final TicketInternal ticket, final Map Boolean.FALSE.equals(i.getInternal()) &&
- ArticleInternal.TypeEnum.NOTE.equals(i.getType()))
- .reduce((first, second) -> second)
- .map(ArticleInternal::getBody)
- .orElseThrow(() -> new NoValidArticleException("no valid article found in ticket " + ticket.getId()));
+ private String buildBody(final ArticleInternal article) {
+ return article.getBody();
+ }
+
+ private Map buildAttachments(final ArticleInternal article) {
+ if (article.getAttachments() == null) {
+ return new HashMap<>();
+ }
+ return article.getAttachments().stream().collect(Collectors.toMap(ArticleAttachment::getFilename,
+ a -> ticketingOutPort.getAttachmentContent(article.getTicketId(), article.getId(), a.getId())));
}
private Map getParsedForm(final TicketInternal ticket) {
diff --git a/ticketing-eventing/mail-handler-service/src/main/resources/application.yml b/ticketing-eventing/mail-handler-service/src/main/resources/application.yml
index 09292684..957eac92 100644
--- a/ticketing-eventing/mail-handler-service/src/main/resources/application.yml
+++ b/ticketing-eventing/mail-handler-service/src/main/resources/application.yml
@@ -22,6 +22,8 @@ spring:
json:
trusted:
packages: '*'
+ codec:
+ max-in-memory-size: 5MB
dbs:
eventing:
From 58188b220e577099b3233e60d3424e2b2d4232df Mon Sep 17 00:00:00 2001
From: rowe42 <25983841+rowe42@users.noreply.github.com>
Date: Fri, 19 Sep 2025 17:17:26 +0200
Subject: [PATCH 03/11] now resetting the field sende_nachricht_nach_extern in
the ticket after sending
---
.../api-spec-internal-without-security.json | 6 +++
.../src/main/resources/api-spec-internal.json | 6 +++
.../adapter/out/zammad/ZammadAdapter.java | 17 +++++++
.../port/out/TicketingOutPort.java | 3 ++
.../adapter/out/mail/MailAdapter.java | 48 +++++++++----------
.../out/mail/{Mail.java => MailMessage.java} | 7 ++-
.../application/port/out/SendMailOutPort.java | 5 +-
.../usecase/EventHandlingUseCase.java | 31 +++++++-----
.../exceptions/NoValidArticleException.java | 8 +++-
.../src/main/resources/application-local.yml | 4 +-
10 files changed, 90 insertions(+), 45 deletions(-)
rename ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/{Mail.java => MailMessage.java} (92%)
diff --git a/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal-without-security.json b/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal-without-security.json
index 5df2c403..2107e3ec 100644
--- a/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal-without-security.json
+++ b/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal-without-security.json
@@ -2169,6 +2169,9 @@
"direktkennwort": {
"type": "string"
},
+ "sende_nachricht_nach_extern": {
+ "type": "string"
+ },
"state": {
"type": "string",
"enum": [
@@ -2202,6 +2205,9 @@
"direktkennwort": {
"type": "string"
},
+ "sende_nachricht_nach_extern": {
+ "type": "string"
+ },
"state": {
"type": "string",
"enum": [
diff --git a/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal.json b/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal.json
index c0bf3f11..bebbfede 100644
--- a/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal.json
+++ b/ticketing-eai/api-client-internal/src/main/resources/api-spec-internal.json
@@ -2279,6 +2279,9 @@
"direktkennwort": {
"type": "string"
},
+ "sende_nachricht_nach_extern": {
+ "type": "string"
+ },
"state": {
"type": "string",
"enum": [
@@ -2312,6 +2315,9 @@
"direktkennwort": {
"type": "string"
},
+ "sende_nachricht_nach_extern": {
+ "type": "string"
+ },
"state": {
"type": "string",
"enum": [
diff --git a/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/adapter/out/zammad/ZammadAdapter.java b/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/adapter/out/zammad/ZammadAdapter.java
index 4a8d2340..2c870343 100644
--- a/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/adapter/out/zammad/ZammadAdapter.java
+++ b/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/adapter/out/zammad/ZammadAdapter.java
@@ -3,15 +3,19 @@
import de.muenchen.oss.dbs.ticketing.eai.client.api.AttachmentsApi;
import de.muenchen.oss.dbs.ticketing.eai.client.api.TicketsApi;
import de.muenchen.oss.dbs.ticketing.eai.client.model.TicketInternal;
+import de.muenchen.oss.dbs.ticketing.eai.client.model.UpdateTicketDTO;
import de.muenchen.oss.dbs.ticketing.eventing.handlercore.application.port.out.TicketingOutPort;
import java.io.InputStream;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClientResponseException;
@Service
@RequiredArgsConstructor
+@Slf4j
public class ZammadAdapter implements TicketingOutPort {
private final TicketsApi ticketsApi;
private final AttachmentsApi attachmentsApi;
@@ -26,6 +30,19 @@ public TicketInternal getTicket(final String ticketId) {
}
}
+ @Override
+ public TicketInternal updateTicket(final UpdateTicketDTO updateTicketDTO) {
+ assert updateTicketDTO != null;
+ //TODO use v2 here --> article has to come out as mandatory-param for that
+ try {
+ final ResponseEntity response = ticketsApi.updateTicket1WithHttpInfo(updateTicketDTO.getId(), updateTicketDTO, null, null).block();
+ return response != null ? response.getBody() : null;
+ } catch (WebClientResponseException e) {
+ log.error(e.getResponseBodyAsString());
+ throw new RuntimeException(e);
+ }
+ }
+
@Override
public InputStream getAttachmentContent(final String ticketId, final String articleId, final String attachmentId) {
try {
diff --git a/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/application/port/out/TicketingOutPort.java b/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/application/port/out/TicketingOutPort.java
index 81086be1..d8f9878d 100644
--- a/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/application/port/out/TicketingOutPort.java
+++ b/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/application/port/out/TicketingOutPort.java
@@ -1,10 +1,13 @@
package de.muenchen.oss.dbs.ticketing.eventing.handlercore.application.port.out;
import de.muenchen.oss.dbs.ticketing.eai.client.model.TicketInternal;
+import de.muenchen.oss.dbs.ticketing.eai.client.model.UpdateTicketDTO;
import java.io.InputStream;
public interface TicketingOutPort {
TicketInternal getTicket(String ticketId);
+ TicketInternal updateTicket(UpdateTicketDTO updateTicketDTO);
+
InputStream getAttachmentContent(String ticketId, String articleId, String attachmentId);
}
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/MailAdapter.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/MailAdapter.java
index 837e36df..ff7d4c5e 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/MailAdapter.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/MailAdapter.java
@@ -5,17 +5,15 @@
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import jakarta.mail.util.ByteArrayDataSource;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.core.io.InputStreamSource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-
@Service
@RequiredArgsConstructor
@Slf4j
@@ -24,38 +22,38 @@ public class MailAdapter implements SendMailOutPort {
private final MailProperties mailProperties;
@Override
- public void sendMail(Mail mail) {
+ public void sendMail(final MailMessage mailMessage) {
final MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
final MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "utf-8");
helper.setFrom(mailProperties.getFromAddress());
- helper.setTo(mail.getRecipient());
- helper.setSubject(mail.getSubject());
- helper.setText(mail.getBody(), true);
- for (Map.Entry e : mail.getAttachments().entrySet()) {
+ helper.setTo(mailMessage.getRecipient());
+ helper.setSubject(mailMessage.getSubject());
+ helper.setText(mailMessage.getBody(), true);
+ for (final Map.Entry entry : mailMessage.getAttachments().entrySet()) {
//TODO is there a way to do this with streaming? The following line loads the attachment into RAM...
- DataSource dataSource = new ByteArrayDataSource(e.getValue(), "application/octet-stream");
- helper.addAttachment(e.getKey(), dataSource);
+ final DataSource dataSource = new ByteArrayDataSource(entry.getValue(), "application/octet-stream");
+ helper.addAttachment(entry.getKey(), dataSource);
//maybe like this?
//helper.addAttachment(e.getKey(), new InputStreamSourceImpl(e.getValue()));
}
mailSender.send(mimeMessage);
- } catch (MessagingException | IOException e) {
+ } catch (final MessagingException | IOException e) {
throw new RuntimeException(e);
}
}
-// private class InputStreamSourceImpl implements InputStreamSource {
-// private final InputStream inputStream;
-//
-// public InputStreamSourceImpl(InputStream inputStream) {
-// this.inputStream = inputStream;
-// }
-//
-// @Override
-// public InputStream getInputStream() {
-// return inputStream;
-// }
-// }
+ // private class InputStreamSourceImpl implements InputStreamSource {
+ // private final InputStream inputStream;
+ //
+ // public InputStreamSourceImpl(InputStream inputStream) {
+ // this.inputStream = inputStream;
+ // }
+ //
+ // @Override
+ // public InputStream getInputStream() {
+ // return inputStream;
+ // }
+ // }
}
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/Mail.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/MailMessage.java
similarity index 92%
rename from ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/Mail.java
rename to ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/MailMessage.java
index 847ecd4a..9703ddb9 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/Mail.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/adapter/out/mail/MailMessage.java
@@ -1,14 +1,13 @@
package de.muenchen.oss.dbs.ticketing.eventing.mailhandler.adapter.out.mail;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
import java.io.InputStream;
import java.util.Map;
+import lombok.AllArgsConstructor;
+import lombok.Data;
@Data
@AllArgsConstructor
-public class Mail {
+public class MailMessage {
private String recipient;
private String subject;
private String body;
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/port/out/SendMailOutPort.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/port/out/SendMailOutPort.java
index 2e9806af..65b60f1d 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/port/out/SendMailOutPort.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/port/out/SendMailOutPort.java
@@ -1,6 +1,7 @@
package de.muenchen.oss.dbs.ticketing.eventing.mailhandler.application.port.out;
-import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.adapter.out.mail.Mail;
+
+import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.adapter.out.mail.MailMessage;
public interface SendMailOutPort {
- void sendMail(Mail mail);
+ void sendMail(MailMessage mailMessage);
}
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
index 594ca7bc..868e50ad 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
@@ -4,19 +4,19 @@
import de.muenchen.oss.dbs.ticketing.eai.client.model.ArticleAttachment;
import de.muenchen.oss.dbs.ticketing.eai.client.model.ArticleInternal;
import de.muenchen.oss.dbs.ticketing.eai.client.model.TicketInternal;
+import de.muenchen.oss.dbs.ticketing.eai.client.model.UpdateTicketDTO;
import de.muenchen.oss.dbs.ticketing.eventing.handlercore.application.port.in.EventHandlerInPort;
import de.muenchen.oss.dbs.ticketing.eventing.handlercore.application.port.out.TicketingOutPort;
import de.muenchen.oss.dbs.ticketing.eventing.handlercore.domain.model.Event;
-import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.adapter.out.mail.Mail;
+import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.adapter.out.mail.MailMessage;
import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.application.port.out.SendMailOutPort;
import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.config.MailHandlerProperties;
+import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.exceptions.NoValidArticleException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
-
-import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.exceptions.NoValidArticleException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -62,6 +62,9 @@ public void handleEvent(final Event event) {
final ArticleInternal article = findRelevantArticle(ticket);
sendMail(ticket, form, article);
+ //reset flag sende_nachricht_nach_extern
+ resetTicket(ticket);
+
log.info("Event handled successfully");
} catch (NoValidArticleException e) {
log.error(e.getMessage());
@@ -74,18 +77,17 @@ private boolean isRelevantEvent(final Event event) {
return
// state was changed by trigger send-to-postbox
mailHandlerProperties.getTicketChangeAction().equals(event.action()) &&
- // is relevant anliegen
+ // is relevant anliegen
mailHandlerProperties.getRelevantTicketTypes().contains(event.anliegenart()) &&
// user does have an lhmExtId (i.e. BayernID or BundID user)
event.lhmExtId() != null && !event.lhmExtId().isEmpty();
}
- private boolean isRelevantTicket(TicketInternal ticket) {
+ private boolean isRelevantTicket(final TicketInternal ticket) {
log.debug("Checking value of sende_nachricht_nach_extern: " + ticket.getSendeNachrichtNachExtern());
- return TO_POSTBOX_DEFAULT.equals(ticket.getSendeNachrichtNachExtern()) || TO_POSTBOX_HIGH.equals(ticket.getSendeNachrichtNachExtern());
+ return TO_POSTBOX_DEFAULT.equals(ticket.getSendeNachrichtNachExtern()) || TO_POSTBOX_HIGH.equals(ticket.getSendeNachrichtNachExtern());
}
-
private ArticleInternal findRelevantArticle(final TicketInternal ticket) throws NoValidArticleException {
assert ticket.getArticles() != null;
return ticket.getArticles().stream()
@@ -96,18 +98,18 @@ private ArticleInternal findRelevantArticle(final TicketInternal ticket) throws
.orElseThrow(() -> new NoValidArticleException("no valid article found in ticket " + ticket.getId()));
}
- private void sendMail(TicketInternal ticket, Map form, ArticleInternal article) {
+ private void sendMail(final TicketInternal ticket, final Map form, final ArticleInternal article) {
final String recipient = mailHandlerProperties.getRecipient();
final String subject = buildSubject(ticket, form);
log.debug("Created subject: " + subject);
final String body = buildBody(article);
log.debug("Created body: " + body);
final Map attachments = buildAttachments(article);
- sendMailOutport.sendMail(new Mail(recipient, subject, body, attachments));
+ sendMailOutport.sendMail(new MailMessage(recipient, subject, body, attachments));
}
private String buildSubject(final TicketInternal ticket, final Map form) {
- String authlevel;
+ final String authlevel;
if (form.get(TICKETING_VERTRAUENSNIVEAU) == null) {
log.error("no ticketingVertrauensniveau found in ticket " + ticket.getId() + " - setting level1");
authlevel = "level1";
@@ -124,7 +126,6 @@ private String buildSubject(final TicketInternal ticket, final Map getParsedForm(final TicketInternal ticket) {
throw new RuntimeException(e);
}
}
+
+ private void resetTicket(final TicketInternal ticket) {
+ final UpdateTicketDTO updateTicketDTO = new UpdateTicketDTO();
+ updateTicketDTO.setId(ticket.getId());
+ updateTicketDTO.setDirektkennwort(ticket.getDirektkennwort());
+ updateTicketDTO.setSendeNachrichtNachExtern(null);
+ ticketingOutPort.updateTicket(updateTicketDTO);
+ }
}
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/exceptions/NoValidArticleException.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/exceptions/NoValidArticleException.java
index 475cdc06..405dea25 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/exceptions/NoValidArticleException.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/exceptions/NoValidArticleException.java
@@ -1,7 +1,13 @@
package de.muenchen.oss.dbs.ticketing.eventing.mailhandler.exceptions;
+import java.io.Serial;
+
public class NoValidArticleException extends Exception {
- public NoValidArticleException(String s) {
+ // Default access modifier is private
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ public NoValidArticleException(final String s) {
super(s);
}
}
diff --git a/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml b/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
index 88d19647..d7718ae9 100644
--- a/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
+++ b/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
@@ -34,8 +34,8 @@ spring:
dbs:
eai:
client:
- eai-base-url: https://dbs-ticketing-eai-integration-dbs-ticketing-eai.apps.capk.muenchen.de/
- # eai-base-url: http://localhost:8082/
+# eai-base-url: https://dbs-ticketing-eai-integration-dbs-ticketing-eai.apps.capk.muenchen.de/
+ eai-base-url: http://localhost:39146
eventing:
mail:
recipient: test@example.com
From e4acec7aa53391015b19aa901e6dcfe56a12619d Mon Sep 17 00:00:00 2001
From: rowe42 <25983841+rowe42@users.noreply.github.com>
Date: Fri, 19 Sep 2025 17:18:20 +0200
Subject: [PATCH 04/11] now resetting the field sende_nachricht_nach_extern in
the ticket after sending
---
.../eventing/handlercore/adapter/out/zammad/ZammadAdapter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/adapter/out/zammad/ZammadAdapter.java b/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/adapter/out/zammad/ZammadAdapter.java
index 2c870343..50332ec9 100644
--- a/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/adapter/out/zammad/ZammadAdapter.java
+++ b/ticketing-eventing/handler-core/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/handlercore/adapter/out/zammad/ZammadAdapter.java
@@ -32,7 +32,7 @@ public TicketInternal getTicket(final String ticketId) {
@Override
public TicketInternal updateTicket(final UpdateTicketDTO updateTicketDTO) {
- assert updateTicketDTO != null;
+ assert updateTicketDTO != null && updateTicketDTO.getId() != null;
//TODO use v2 here --> article has to come out as mandatory-param for that
try {
final ResponseEntity response = ticketsApi.updateTicket1WithHttpInfo(updateTicketDTO.getId(), updateTicketDTO, null, null).block();
From ec83ee6e271347d2c26cba8ebbbce407482f9508 Mon Sep 17 00:00:00 2001
From: rowe42 <25983841+rowe42@users.noreply.github.com>
Date: Mon, 22 Sep 2025 10:01:09 +0200
Subject: [PATCH 05/11] set dependency to api-client-internal 0.5.0-SNAPSHOT
---
ticketing-eventing/handler-core/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ticketing-eventing/handler-core/pom.xml b/ticketing-eventing/handler-core/pom.xml
index 7c4170a8..747ac3e3 100644
--- a/ticketing-eventing/handler-core/pom.xml
+++ b/ticketing-eventing/handler-core/pom.xml
@@ -67,7 +67,7 @@
0.2.0
- 0.4.0-SNAPSHOT
+ 0.5.0-SNAPSHOT
From fca1c640ba6cdea57a63c109f728650e252c1ebb Mon Sep 17 00:00:00 2001
From: rowe42 <25983841+rowe42@users.noreply.github.com>
Date: Mon, 22 Sep 2025 12:39:12 +0200
Subject: [PATCH 06/11] now using ticketing-eai-internal 0.5.0 instead of
Snapshot
---
ticketing-eventing/handler-core/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ticketing-eventing/handler-core/pom.xml b/ticketing-eventing/handler-core/pom.xml
index 747ac3e3..1472ac0f 100644
--- a/ticketing-eventing/handler-core/pom.xml
+++ b/ticketing-eventing/handler-core/pom.xml
@@ -67,7 +67,7 @@
0.2.0
- 0.5.0-SNAPSHOT
+ 0.5.0
From 14b66f25619810b65a10b63e0d6f2154de1fdd2d Mon Sep 17 00:00:00 2001
From: rowe42 <25983841+rowe42@users.noreply.github.com>
Date: Mon, 22 Sep 2025 14:19:03 +0200
Subject: [PATCH 07/11] now using dbs-handler-core v0.2.0 instead of SNAPSHOT
---
ticketing-eventing/mail-handler-service/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ticketing-eventing/mail-handler-service/pom.xml b/ticketing-eventing/mail-handler-service/pom.xml
index 762ffa01..59e4ac58 100644
--- a/ticketing-eventing/mail-handler-service/pom.xml
+++ b/ticketing-eventing/mail-handler-service/pom.xml
@@ -43,7 +43,7 @@
2025.0.0
- 0.2.0-SNAPSHOT
+ 0.2.0
8.1
From 6b04ba727adc4aa7325ad7b8d6f7b4d02b1ff802 Mon Sep 17 00:00:00 2001
From: rowe42 <25983841+rowe42@users.noreply.github.com>
Date: Mon, 22 Sep 2025 15:54:01 +0200
Subject: [PATCH 08/11] dependency to jupiter removed
---
ticketing-eai/api-client-internal/pom.xml | 4 ----
1 file changed, 4 deletions(-)
diff --git a/ticketing-eai/api-client-internal/pom.xml b/ticketing-eai/api-client-internal/pom.xml
index 4c3f69d0..02fa8864 100644
--- a/ticketing-eai/api-client-internal/pom.xml
+++ b/ticketing-eai/api-client-internal/pom.xml
@@ -79,10 +79,6 @@
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
-
- org.junit.jupiter
- junit-jupiter
-
From 4bfcad2d04ed812d5cb7546e06e587ecafdc5bc8 Mon Sep 17 00:00:00 2001
From: rowe42 <25983841+rowe42@users.noreply.github.com>
Date: Mon, 22 Sep 2025 16:42:13 +0200
Subject: [PATCH 09/11] fixed data model of sende_nachricht_nach_extern
---
.../application/usecase/EventHandlingUseCase.java | 7 +++----
.../src/main/resources/application-local.yml | 4 ++--
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
index 868e50ad..6fb9239b 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
@@ -30,8 +30,9 @@ public class EventHandlingUseCase implements EventHandlerInPort {
public static final String TICKETING_VERTRAUENSNIVEAU = "ticketingVertrauensniveau";
public static final String LEGACY_POSTKORB_HANDLE = "legacyPostkorbHandle";
public static final String ACCOUNT_SOURCE = "accountSource";
- public static final String TO_POSTBOX_DEFAULT = "2";
- public static final String TO_POSTBOX_HIGH = "3";
+
+ public static final String TO_POSTBOX_DEFAULT = "send";
+ public static final String TO_POSTBOX_HIGH = "send_high_authLevel";
private final XmlMapper xmlMapper = new XmlMapper();
private final MailHandlerProperties mailHandlerProperties;
@@ -49,8 +50,6 @@ public void handleEvent(final Event event) {
try {
// find event ticket
final TicketInternal ticket = ticketingOutPort.getTicket(event.ticket());
- //TODO dummy-setting entfernen
- ticket.setSendeNachrichtNachExtern("3");
//check if ticket should be sent
if (!isRelevantTicket(ticket)) {
log.debug("Ticket not relevant");
diff --git a/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml b/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
index d7718ae9..2b50fd26 100644
--- a/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
+++ b/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
@@ -34,8 +34,8 @@ spring:
dbs:
eai:
client:
-# eai-base-url: https://dbs-ticketing-eai-integration-dbs-ticketing-eai.apps.capk.muenchen.de/
- eai-base-url: http://localhost:39146
+ eai-base-url: https://dbs-ticketing-eai-integration-dbs-ticketing-eai.apps.capk.muenchen.de/
+# eai-base-url: http://localhost:39146
eventing:
mail:
recipient: test@example.com
From b67d46cdc9831aecaa57653adf1662fdc6d5788b Mon Sep 17 00:00:00 2001
From: rowe42 <25983841+rowe42@users.noreply.github.com>
Date: Mon, 22 Sep 2025 16:52:49 +0200
Subject: [PATCH 10/11] sensible config removed
---
.../src/main/resources/application-local.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml b/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
index 2b50fd26..6c5020c9 100644
--- a/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
+++ b/ticketing-eventing/mail-handler-service/src/main/resources/application-local.yml
@@ -23,13 +23,13 @@ spring:
client:
provider:
zammad:
- issuer-uri: https://ssodev.muenchen.de/auth/realms/KM81
+ issuer-uri: TODO
registration:
zammad:
provider: zammad
authorization-grant-type: client_credentials
- client-id: mpdz-ticketing-fk
- client-secret: V8zmjkcqgXE9xIWhljjVT45Bxli2c02B
+ client-id: TODO
+ client-secret: TODO
dbs:
eai:
From 3ef5086487f8c6557488a999fda6ccb5a03569c2 Mon Sep 17 00:00:00 2001
From: rowe42 <25983841+rowe42@users.noreply.github.com>
Date: Tue, 23 Sep 2025 09:24:14 +0200
Subject: [PATCH 11/11] Fixes from review
---
.../application/usecase/EventHandlingUseCase.java | 2 +-
.../src/main/resources/application-local.yml | 9 ++++-----
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
index 6fb9239b..495dbcc3 100644
--- a/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
+++ b/ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java
@@ -113,7 +113,7 @@ private String buildSubject(final TicketInternal ticket, final Map