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