MattermostService.java
package com.tdmconsult.ete.services.mattermost;
import com.tdmconsult.ete.documents.FinancialDocument;
import com.tdmconsult.ete.utils.DateUtils;
import java.time.LocalDate;
import java.util.List;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
@Slf4j
@Service
@RequiredArgsConstructor
public class MattermostService {
@Value("${tdm.baseurl-frontend}")
private String baseurlFrontend;
private final RestTemplate mattermostRestTemplate;
private void sendPayload(final @NonNull MattermostPayload payload) {
final var headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
final HttpEntity<MattermostPayload> request = new HttpEntity<>(payload, headers);
try {
mattermostRestTemplate.postForObject("", request, String.class);
} catch (final RestClientException e) {
log.error("Fehler beim Senden der Mattermost-Nachricht: {}", e.getMessage(), e);
}
}
public void informAboutNewDocument(
final String publicId,
final String uploadBy,
final FinancialDocument.TypeOfDocument typeOfDocument,
final LocalDate dateReceived) {
final var typeOfDocumentField = new MattermostPayload.Field()
.setTitle("Dokumentenart")
.setValue(typeOfDocument.getDisplayName()).setShortForm(true);
final var uploadByField = new MattermostPayload.Field()
.setTitle("Erfasser")
.setValue("@%s".formatted(uploadBy)).setShortForm(true);
final var dateReceivedField = new MattermostPayload.Field()
.setTitle("Dokumenteneingang")
.setValue(DateUtils.toDisplayString(dateReceived)).setShortForm(true);
final var attachment = new MattermostPayload.Attachment()
.setColor("#2ebd59")
.setTitle("Neues Finanzdokument verfügbar")
.setTitleLink("%s/ete-frontend/postoffice/documents/edit/%s".formatted(baseurlFrontend, publicId))
.setText("Ein neues Finanzdokument mit der Dokumentennummer %s steht jetzt zur Bearbeitung bereit."
.formatted(publicId))
.setFallback("Neues Finanzdokument verfügbar")
.setFields(List.of(typeOfDocumentField, uploadByField, dateReceivedField));
final var payload = new MattermostPayload()
.setIconUrl("https://ete.tdm-consult.com/ete-frontend/favicon.svg")
.setUsername(uploadBy)
.setAttachments(List.of(attachment));
sendPayload(payload);
}
}