Untitled
unknown
plain_text
a year ago
9.2 kB
12
Indexable
package pl.santander.bancassurance.comparison.document.service.mail.apk;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import pl.santander.bancassurance.comparison.document.docsend.integration.api.SendMailService;
import pl.santander.bancassurance.comparison.document.docsend.integration.api.dto.DocSendResponseDto;
import pl.santander.bancassurance.comparison.document.domain.mailrequest.MailRequest;
import pl.santander.bancassurance.comparison.document.domain.mailrequest.MailRequestRepository;
import pl.santander.bancassurance.comparison.document.domain.mailrequest.MailRequestTemplateType;
import pl.santander.bancassurance.comparison.document.service.mail.MailDocumentType;
import java.util.Map;
import java.util.UUID;
@Service
@Slf4j
@RequiredArgsConstructor
@EnableConfigurationProperties(DocSendApkDocumentProperties.class)
public class SignedApkDocumentMailService {
private final SendMailService sendMailService;
private final DocSendApkDocumentProperties properties;
private final MailRequestRepository mailRequestRepository;
@Transactional
public void send(ApkDocumentMailRequestDto mailRequestDto,
String apkNodeId,
UUID applicationNumber,
UUID offerNumber) {
final var docSendRequestDto =
new DocSendApkDocumentDtoConverter(
properties,
Map.of(MailDocumentType.APK_DOCUMENT, apkNodeId),
mailRequestDto
).convert();
final var response = sendMailService.sendMailRequest(docSendRequestDto);
storeRequest(response, mailRequestDto.email(), applicationNumber, offerNumber);
}
private void storeRequest(DocSendResponseDto responseDto,
String email,
UUID applicationNumber,
UUID offerNumber) {
final var mailRequest = MailRequest.builder()
.applicationNumber(applicationNumber)
.offerNumber(offerNumber)
.email(email)
.deliveryId(responseDto.getDeliveryId())
.templateType(MailRequestTemplateType.SIGNED_APK_DOCUMENT)
.documentSentContent(responseDto.getRequestContent())
.build();
mailRequestRepository.save(mailRequest);
}
}
package pl.santander.bancassurance.comparison.document.service.mail.apk;
public record ApkDocumentMailRequestDto(String cif,
String email,
String pesel,
String registrationNumber) {
}
package pl.santander.bancassurance.comparison.document.docsend.integration.api.dto;
import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Builder
public class DocSendResponseDto {
private String deliveryId;
private String requestContent;
}
package pl.santander.bancassurance.comparison.document.domain.mailrequest;
import jakarta.persistence.*;
import lombok.*;
import java.io.Serializable;
import java.util.UUID;
@Entity
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class MailRequest implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "application_number", nullable = false)
private UUID applicationNumber;
@Column(name = "offer_number")
private UUID offerNumber;
@Column(name = "policy_number")
private String policyNumber;
@Column(name = "email", nullable = false)
private String email;
@Column(name = "delivery_id", nullable = false)
private String deliveryId;
@Enumerated(EnumType.STRING)
@Column(name = "template_type", nullable = false)
private MailRequestTemplateType templateType;
@Column(name = "document_sent_content", nullable = false)
private String documentSentContent;
}
package pl.santander.bancassurance.comparison.document.domain.mailrequest;
public enum MailRequestTemplateType {
SIGNED_APK_DOCUMENT,
SIGNED_POLICY_DOCUMENT
}
package pl.santander.bancassurance.comparison.document.service.mail.apk;
import lombok.RequiredArgsConstructor;
import org.springframework.util.ObjectUtils;
import pl.santander.bancassurance.comparison.document.docsend.integration.api.dto.DocSendRequestDto;
import pl.santander.bancassurance.comparison.document.docsend.integration.api.dto.Document;
import pl.santander.bancassurance.comparison.document.docsend.integration.api.dto.ProtectionMethod;
import pl.santander.bancassurance.comparison.document.service.mail.MailDocumentType;
import pl.santander.bancassurance.comparison.document.service.mail.PasswordGenerator;
import java.util.List;
import java.util.Map;
@RequiredArgsConstructor
class DocSendApkDocumentDtoConverter {
private final DocSendApkDocumentProperties properties;
private final Map<MailDocumentType, String> documents;
private final ApkDocumentMailRequestDto mailRequestDto;
DocSendRequestDto convert() {
return new DocSendRequestDto(
properties.getBusinessProcessId(),
properties.getWfd(),
properties.getTemplateType(),
properties.getInsuranceType(),
properties.getPasswordDescription(),
properties.getAttachments(),
properties.getContactMethods(),
properties.isProtectDocuments(),
ProtectionMethod.valueOf(properties.getProtectionMethod()),
mailRequestDto.cif(),
documents(),
properties.getDeliveryType(),
mailRequestDto.email(),
password(),
properties.getSubject(),
properties.getCustomerSegment()
);
}
private String password() {
return new PasswordGenerator(mailRequestDto.pesel(), mailRequestDto.registrationNumber()).generate();
}
private List<Document> documents() {
if (!ObjectUtils.isEmpty(documents) && ObjectUtils.isEmpty(properties.getDocuments())) {
throw new IllegalStateException("No configurations for documents");
}
return documents.entrySet()
.stream()
.map(entry -> {
final var nodeId = properties.getDocuments().get(entry.getKey());
if (nodeId == null) {
throw new IllegalStateException("No configurations for document type: " + entry.getKey());
}
return new Document(entry.getValue(), nodeId);
}).toList();
}
}
package pl.santander.bancassurance.comparison.document.service.mail;
public enum MailDocumentType {
APK_DOCUMENT
}
package pl.santander.bancassurance.comparison.document.service.mail.apk;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.boot.context.properties.ConfigurationProperties;
import pl.santander.bancassurance.comparison.document.service.mail.DocSendBasicProperties;
@EqualsAndHashCode(callSuper = true)
@Data
@ConfigurationProperties(prefix = "doc-send.signed-apk-document")
public class DocSendApkDocumentProperties extends DocSendBasicProperties {
}
package pl.santander.bancassurance.comparison.document.service.mail;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.List;
import java.util.Map;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class DocSendBasicProperties {
private String customerSegment;
private String businessProcessId;
private String wfd;
private String templateType;
private String insuranceType;
private List<String> attachments;
private List<String> contactMethods;
private boolean protectDocuments;
private String protectionMethod;
private Map<MailDocumentType, String> documents;
private String deliveryType;
private String passwordDescription;
private String subject;
}
package pl.santander.bancassurance.comparison.document.service.mail;
import jakarta.validation.constraints.NotNull;
public class PasswordGenerator {
private final String pesel;
private final String registrationNumber;
public PasswordGenerator(@NotNull String pesel, @NotNull String registrationNumber) {
this.pesel = pesel;
this.registrationNumber = registrationNumber;
}
public String generate() {
return pesel + registrationNumber.substring(registrationNumber.length() - 3);
}
}
Editor is loading...
Leave a Comment