getText(String,MessageType)   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 19
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 18
dl 0
loc 19
rs 9.5
c 0
b 0
f 0
cc 2
1
package com.osomapps.pt.tokenemail;
2
3
import com.osomapps.pt.dictionary.DictionaryName;
4
import com.osomapps.pt.dictionary.DictionaryService;
5
import com.osomapps.pt.email.EmailMessageType;
6
import com.osomapps.pt.email.EmailMessageTypeRepository;
7
import java.util.HashMap;
8
import java.util.List;
9
import java.util.Map;
10
import lombok.extern.slf4j.Slf4j;
11
import org.springframework.beans.factory.annotation.Value;
12
import org.springframework.mail.MailException;
13
import org.springframework.mail.MailSender;
14
import org.springframework.mail.SimpleMailMessage;
15
import org.springframework.stereotype.Service;
16
17
@Service
18
@Slf4j
19
public class SendEmailService {
20
    private final MailSender mailSender;
21
    private final EmailMessageTypeRepository emailMessageTypeRepository;
22
    private final DictionaryService dictionaryService;
23
    private final String emailConfirmUrl;
24
    private final String emailResetUrl;
25
26
    private enum MessageType {
27
        WelcomeMessage,
28
        ForgetPasswordMessage
29
    }
30
31
    SendEmailService(
32
            MailSender mailSender,
33
            EmailMessageTypeRepository emailMessageTypeRepository,
34
            DictionaryService dictionaryService,
35
            @Value("${app.email.confirm.url}") String emailConfirmUrl,
36
            @Value("${app.email.reset.url}") String emailResetUrl) {
37
        this.mailSender = mailSender;
38
        this.emailMessageTypeRepository = emailMessageTypeRepository;
39
        this.dictionaryService = dictionaryService;
40
        this.emailConfirmUrl = emailConfirmUrl;
41
        this.emailResetUrl = emailResetUrl;
42
    }
43
44
    String getSubject(String defaultValue, MessageType messageType) {
45
        List<EmailMessageType> emailMessageTypes =
46
                emailMessageTypeRepository.findByNameOrderByIdDesc(messageType.name());
47
        if (emailMessageTypes.isEmpty()) {
48
            return defaultValue;
49
        }
50
        return dictionaryService.getEnValue(
51
                DictionaryName.email_subject,
52
                emailMessageTypes
53
                        .get(emailMessageTypes.size() - 1)
54
                        .getEmailMessageTemplates()
55
                        .get(
56
                                emailMessageTypes
57
                                                .get(emailMessageTypes.size() - 1)
58
                                                .getEmailMessageTemplates()
59
                                                .size()
60
                                        - 1)
61
                        .getDEmailSubject(),
62
                defaultValue);
63
    }
64
65
    String getText(String defaultValue, MessageType messageType) {
66
        List<EmailMessageType> emailMessageTypes =
67
                emailMessageTypeRepository.findByNameOrderByIdDesc(messageType.name());
68
        if (emailMessageTypes.isEmpty()) {
69
            return defaultValue;
70
        }
71
        return dictionaryService.getEnValue(
72
                DictionaryName.email_text,
73
                emailMessageTypes
74
                        .get(emailMessageTypes.size() - 1)
75
                        .getEmailMessageTemplates()
76
                        .get(
77
                                emailMessageTypes
78
                                                .get(emailMessageTypes.size() - 1)
79
                                                .getEmailMessageTemplates()
80
                                                .size()
81
                                        - 1)
82
                        .getDEmailText(),
83
                defaultValue);
84
    }
85
86
    public void send(InUserEmail inUserEmail) {
87
        Map<String, String> parameters = new HashMap<>();
88
        parameters.put("user_name", inUserEmail.getUser_name());
89
        parameters.put("email_confirm_link", emailConfirmUrl + inUserEmail.getConfirmToken());
90
        SimpleMailMessage message = new SimpleMailMessage();
91
        message.setSubject(
92
                getSubject(
93
                        "Welcome to the Personal Trainer application!",
94
                        MessageType.WelcomeMessage));
95
        message.setFrom("PT <[email protected]>");
96
        message.setTo(inUserEmail.getLogin());
97
        message.setText(
98
                TemplateEngine.<String, String>template(
99
                                getText(
100
                                        "Dear {{user_name}}!\n"
101
                                                + "\n"
102
                                                + "Your registration was completed successfully.\n"
103
                                                + "Please click to the link to confirm your e-mail {{email_confirm_link}}.\n"
104
                                                + "\n"
105
                                                + "Yours PT support team.",
106
                                        MessageType.WelcomeMessage))
107
                        .apply(parameters));
108
        try {
109
            this.mailSender.send(message);
110
        } catch (MailException ex) {
111
            log.warn(ex.getMessage(), ex);
112
        }
113
    }
114
115
    void sendForgotPassword(InUserEmail inUserEmail) {
116
        Map<String, String> parameters = new HashMap<>();
117
        parameters.put("user_name", inUserEmail.getUser_name());
118
        parameters.put("reset_password_link", emailResetUrl + inUserEmail.getResetToken());
119
        SimpleMailMessage message = new SimpleMailMessage();
120
        message.setSubject(getSubject("Reset password service", MessageType.ForgetPasswordMessage));
121
        message.setFrom("PT <[email protected]>");
122
        message.setTo(inUserEmail.getLogin());
123
        message.setText(
124
                TemplateEngine.<String, String>template(
125
                                getText(
126
                                        "Dear {{user_name}}!\n"
127
                                                + "\n"
128
                                                + "Please click to the link to reset your password {{reset_password_link}}.\n"
129
                                                + "\n"
130
                                                + "Sincerely,\n"
131
                                                + "PT support team",
132
                                        MessageType.ForgetPasswordMessage))
133
                        .apply(parameters));
134
        try {
135
            this.mailSender.send(message);
136
        } catch (MailException ex) {
137
            log.warn(ex.getMessage(), ex);
138
        }
139
    }
140
}
141