Skip to content

Commit c925217

Browse files
committed
FINERACT-2461: Refactor EmailReadPlatformServiceImpl to use Prepared Statements
1 parent 0ed6b7f commit c925217

2 files changed

Lines changed: 32 additions & 18 deletions

File tree

fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailReadPlatformServiceImpl.java

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.sql.ResultSet;
2222
import java.sql.SQLException;
2323
import java.time.LocalDate;
24+
import java.util.ArrayList;
2425
import java.util.Collection;
2526
import java.util.List;
2627
import lombok.RequiredArgsConstructor;
@@ -98,7 +99,8 @@ public EmailData mapRow(final ResultSet rs, @SuppressWarnings("unused") final in
9899

99100
final EnumOptionData status = EmailMessageEnumerations.status(statusId);
100101

101-
return EmailData.instance(id, groupId, clientId, staffId, status, emailAddress, emailSubject, message, null, null, null, null,
102+
return EmailData.instance(id, groupId, clientId, staffId, status, emailAddress, emailSubject, message, null,
103+
null, null, null,
102104
null, campaignName, sentDate, errorMessage);
103105
}
104106
}
@@ -124,42 +126,41 @@ public EmailData retrieveOne(final Long resourceId) {
124126

125127
@Override
126128
public Collection<EmailData> retrieveAllPending(final SearchParameters searchParameters) {
127-
final String sqlPlusLimit = (searchParameters.getLimit() > 0) ? " " + sqlGenerator.limit(searchParameters.getLimit()) : "";
128-
final String sql = "select " + this.emailRowMapper.schema() + " where emo.status_enum =? " + sqlPlusLimit;
129-
130-
return this.jdbcTemplate.query(sql, this.emailRowMapper, EmailMessageStatusType.PENDING.getValue()); // NOSONAR
129+
final String sqlPlusLimit = (searchParameters.getLimit() > 0)
130+
? " " + sqlGenerator.limit(searchParameters.getLimit())
131+
: "";
132+
return retrieveEmailByStatus(EmailMessageStatusType.PENDING.getValue(), sqlPlusLimit);
131133
}
132134

133135
@Override
134136
public Collection<EmailData> retrieveAllSent(final SearchParameters searchParameters) {
135-
final String sqlPlusLimit = (searchParameters.getLimit() > 0) ? " " + sqlGenerator.limit(searchParameters.getLimit()) : "";
136-
final String sql = "select " + this.emailRowMapper.schema() + " where emo.status_enum = ?" + sqlPlusLimit;
137-
138-
return this.jdbcTemplate.query(sql, this.emailRowMapper, EmailMessageStatusType.SENT.getValue()); // NOSONAR
137+
final String sqlPlusLimit = (searchParameters.getLimit() > 0)
138+
? " " + sqlGenerator.limit(searchParameters.getLimit())
139+
: "";
140+
return retrieveEmailByStatus(EmailMessageStatusType.SENT.getValue(), sqlPlusLimit);
139141
}
140142

141143
@Override
142144
public List<Long> retrieveExternalIdsOfAllSent(final Integer limit) {
143145
final String sqlPlusLimit = (limit > 0) ? " " + sqlGenerator.limit(limit) : "";
144-
final String sql = "select external_id from " + this.emailRowMapper.tableName() + " where status_enum =? " + sqlPlusLimit;
146+
final String sql = "select external_id from " + this.emailRowMapper.tableName() + " where status_enum =? "
147+
+ sqlPlusLimit;
145148

146149
return this.jdbcTemplate.queryForList(sql, Long.class, EmailMessageStatusType.SENT.getValue()); // NOSONAR
147150
}
148151

149152
@Override
150153
public Collection<EmailData> retrieveAllDelivered(final Integer limit) {
151154
final String sqlPlusLimit = (limit > 0) ? " " + sqlGenerator.limit(limit) : "";
152-
final String sql = "select " + this.emailRowMapper.schema() + " where emo.status_enum = ?" + sqlPlusLimit;
153-
154-
return this.jdbcTemplate.query(sql, this.emailRowMapper, EmailMessageStatusType.DELIVERED.getValue()); // NOSONAR
155+
return retrieveEmailByStatus(EmailMessageStatusType.DELIVERED.getValue(), sqlPlusLimit);
155156
}
156157

157158
@Override
158159
public Collection<EmailData> retrieveAllFailed(final SearchParameters searchParameters) {
159-
final String sqlPlusLimit = (searchParameters.getLimit() > 0) ? " " + sqlGenerator.limit(searchParameters.getLimit()) : "";
160-
final String sql = "select " + this.emailRowMapper.schema() + " where emo.status_enum = ?" + sqlPlusLimit;
161-
162-
return this.jdbcTemplate.query(sql, this.emailRowMapper, EmailMessageStatusType.FAILED.getValue()); // NOSONAR
160+
final String sqlPlusLimit = (searchParameters.getLimit() > 0)
161+
? " " + sqlGenerator.limit(searchParameters.getLimit())
162+
: "";
163+
return retrieveEmailByStatus(EmailMessageStatusType.FAILED.getValue(), sqlPlusLimit);
163164
}
164165

165166
@Override
@@ -185,4 +186,16 @@ public Page<EmailData> retrieveEmailByStatus(final Integer limit, final Integer
185186
return this.paginationHelper.fetchPage(this.jdbcTemplate, sqlBuilder.toString(),
186187
new Object[] { status, fromDateString, toDateString }, this.emailRowMapper);
187188
}
189+
190+
private Collection<EmailData> retrieveEmailByStatus(Integer status, String sqlPlusLimit) {
191+
String sql = "select " + this.emailRowMapper.schema() + " where emo.status_enum = ?";
192+
List<Object> args = new ArrayList<>();
193+
args.add(status);
194+
195+
if (sqlPlusLimit != null) {
196+
sql += sqlPlusLimit;
197+
}
198+
199+
return this.jdbcTemplate.query(sql, this.emailRowMapper, args.toArray());
200+
}
188201
}

integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ public void testCreateDelinquencyRanges() {
120120
assertNotNull(delinquencyRangeResponse01);
121121
assertNotNull(ranges);
122122
assertFalse(ranges.isEmpty());
123-
DelinquencyRangeData range = ranges.get(ranges.size() - 1);
123+
DelinquencyRangeData range = ranges.stream().filter(r -> r.getId().equals(delinquencyRangeResponse01.getResourceId())).findFirst()
124+
.orElseThrow(() -> new AssertionError("Range with id " + delinquencyRangeResponse01.getResourceId() + " not found"));
124125
assertEquals(1, range.getMinimumAgeDays(), "Expected Min Age Days to 1");
125126
assertEquals(3, range.getMaximumAgeDays(), "Expected Max Age Days to 3");
126127
}

0 commit comments

Comments
 (0)