templateToDto(EmailMessageTemplate)   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 23
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 23
dl 0
loc 23
rs 9.328
c 1
b 0
f 0
cc 2
1
package com.osomapps.pt.admin.email;
2
3
import com.osomapps.pt.ResourceNotFoundException;
4
import com.osomapps.pt.dictionary.DictionaryName;
5
import com.osomapps.pt.dictionary.DictionaryService;
6
import com.osomapps.pt.email.EmailMessageTemplate;
7
import com.osomapps.pt.email.EmailMessageTemplateRepository;
8
import com.osomapps.pt.email.EmailMessageType;
9
import com.osomapps.pt.email.EmailMessageTypeRepository;
10
import java.util.List;
11
import java.util.stream.Collectors;
12
import org.springframework.data.domain.Sort;
13
import org.springframework.stereotype.Service;
14
15
@Service
16
class AdminEmailMessageTemplateService {
17
18
    private final EmailMessageTemplateRepository emailMessageTemplateRepository;
19
    private final EmailMessageTypeRepository emailMessageTypeRepository;
20
    private final DictionaryService dictionaryService;
21
22
    AdminEmailMessageTemplateService(
23
            EmailMessageTemplateRepository emailMessageTemplateRepository,
24
            EmailMessageTypeRepository emailMessageTypeRepository,
25
            DictionaryService dictionaryService) {
26
        this.emailMessageTemplateRepository = emailMessageTemplateRepository;
27
        this.emailMessageTypeRepository = emailMessageTypeRepository;
28
        this.dictionaryService = dictionaryService;
29
    }
30
31
    List<EmailMessageTemplateResponseDTO> findAll() {
32
        return emailMessageTemplateRepository.findAll(sortByIdAsc()).stream()
33
                .map(template -> templateToDto(template))
34
                .collect(Collectors.toList());
35
    }
36
37
    private Sort sortByIdAsc() {
38
        return Sort.by(Sort.Direction.ASC, "id");
39
    }
40
41
    private EmailMessageTemplateResponseDTO templateToDto(EmailMessageTemplate template) {
42
        return EmailMessageTemplateResponseDTO.builder()
43
                .id(template.getId())
44
                .emailSubjectEn(
45
                        dictionaryService.getEnValue(
46
                                DictionaryName.email_subject, template.getDEmailSubject(), ""))
47
                .emailSubjectNo(
48
                        dictionaryService.getNoValue(
49
                                DictionaryName.email_subject, template.getDEmailSubject(), ""))
50
                .emailTextEn(
51
                        dictionaryService.getEnValue(
52
                                DictionaryName.email_text, template.getDEmailSubject(), ""))
53
                .emailTextNo(
54
                        dictionaryService.getNoValue(
55
                                DictionaryName.email_text, template.getDEmailSubject(), ""))
56
                .type(
57
                        template.getEmailMessageType() == null
58
                                ? null
59
                                : EmailMessageTypeResponseDTO.builder()
60
                                        .id(template.getEmailMessageType().getId())
61
                                        .name(template.getEmailMessageType().getName())
62
                                        .build())
63
                .build();
64
    }
65
66
    EmailMessageTemplateResponseDTO findOne(Long id) {
67
        final EmailMessageTemplate emailMessageTemplate =
68
                emailMessageTemplateRepository.findById(id).orElse(null);
69
        if (emailMessageTemplate == null) {
70
            throw new ResourceNotFoundException(
71
                    "EmailMessageTemplate with id " + id + " not found.");
72
        }
73
        return templateToDto(emailMessageTemplate);
74
    }
75
76
    EmailMessageTemplateResponseDTO create(EmailMessageTemplateRequestDTO templateRequestDTO) {
77
        final EmailMessageType emailMessageTypeDb =
78
                templateRequestDTO.getType() == null
79
                        ? null
80
                        : emailMessageTypeRepository
81
                                .findById(templateRequestDTO.getType().getId())
82
                                .orElse(null);
83
        final String dataKey =
84
                dictionaryService.createDictionaryDataKey(
85
                        DictionaryName.email_subject,
86
                        dictionaryService.getNewDictionaryDataKey(DictionaryName.email_subject),
87
                        templateRequestDTO.getEmailSubjectEn(),
88
                        templateRequestDTO.getEmailSubjectNo());
89
        final String data2Key =
90
                dictionaryService.createDictionaryDataKey(
91
                        DictionaryName.email_text,
92
                        dictionaryService.getNewDictionaryDataKey(DictionaryName.email_text),
93
                        templateRequestDTO.getEmailTextEn(),
94
                        templateRequestDTO.getEmailTextNo());
95
        final EmailMessageTemplate emailMessageTemplate = new EmailMessageTemplate();
96
        emailMessageTemplate.setDEmailSubject(dataKey);
97
        emailMessageTemplate.setDEmailText(data2Key);
98
        emailMessageTemplate.setEmailMessageType(emailMessageTypeDb);
99
        return templateToDto(emailMessageTemplateRepository.save(emailMessageTemplate));
100
    }
101
102
    EmailMessageTemplateResponseDTO update(
103
            Long id, EmailMessageTemplateRequestDTO templateRequestDTO) {
104
        final EmailMessageTemplate existedEmailMessageTemplate =
105
                emailMessageTemplateRepository.findById(id).orElse(null);
106
        if (existedEmailMessageTemplate == null) {
107
            throw new ResourceNotFoundException("EmailMessageTemplate with id not found: " + id);
108
        }
109
        final String dataKey =
110
                dictionaryService.createDictionaryDataKey(
111
                        DictionaryName.email_subject,
112
                        existedEmailMessageTemplate.getDEmailSubject(),
113
                        templateRequestDTO.getEmailSubjectEn(),
114
                        templateRequestDTO.getEmailSubjectNo());
115
        final String data2Key =
116
                dictionaryService.createDictionaryDataKey(
117
                        DictionaryName.email_text,
118
                        existedEmailMessageTemplate.getDEmailSubject(),
119
                        templateRequestDTO.getEmailTextEn(),
120
                        templateRequestDTO.getEmailTextNo());
121
        final EmailMessageType emailMessageTypeDb =
122
                templateRequestDTO.getType().getId() == null
123
                        ? null
124
                        : emailMessageTypeRepository
125
                                .findById(templateRequestDTO.getType().getId())
126
                                .orElse(null);
127
        existedEmailMessageTemplate.setEmailMessageType(emailMessageTypeDb);
128
        existedEmailMessageTemplate.setDEmailSubject(dataKey);
129
        existedEmailMessageTemplate.setDEmailText(data2Key);
130
        final EmailMessageTemplate savedEmailMessageTemplate =
131
                emailMessageTemplateRepository.save(existedEmailMessageTemplate);
132
        return templateToDto(savedEmailMessageTemplate);
133
    }
134
135
    EmailMessageTemplateResponseDTO delete(Long id) {
136
        final EmailMessageTemplate existedEmailMessageTemplate =
137
                emailMessageTemplateRepository.findById(id).orElse(null);
138
        if (existedEmailMessageTemplate == null) {
139
            throw new ResourceNotFoundException(
140
                    "EmailMessageTemplate with id " + id + " not found.");
141
        }
142
        dictionaryService.deleteDatas(
143
                DictionaryName.email_subject, existedEmailMessageTemplate.getDEmailSubject());
144
        dictionaryService.deleteDatas(
145
                DictionaryName.email_text, existedEmailMessageTemplate.getDEmailText());
146
        final EmailMessageTemplateResponseDTO emailMessageTemplateResponseDTO =
147
                templateToDto(existedEmailMessageTemplate);
148
        emailMessageTemplateRepository.deleteById(id);
149
        return emailMessageTemplateResponseDTO;
150
    }
151
}
152