Skip to content

Commit 0c32c0e

Browse files
committed
Series import: make lookup for a category/country case insensitive.
Fix #819
1 parent f8eee29 commit 0c32c0e

File tree

4 files changed

+42
-16
lines changed

4 files changed

+42
-16
lines changed

src/main/java/ru/mystamps/web/service/CategoryServiceImpl.java

+15-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Date;
2222
import java.util.List;
2323
import java.util.Locale;
24+
import java.util.stream.Collectors;
2425

2526
import org.apache.commons.lang3.StringUtils;
2627
import org.apache.commons.lang3.Validate;
@@ -81,16 +82,25 @@ public String add(AddCategoryDto dto, Integer userId) {
8182
return slug;
8283
}
8384

85+
// @todo #819 CategoryServiceImpl.findIdsByNames(): add unit test for converting to lower case
8486
@Override
8587
@Transactional(readOnly = true)
8688
public List<Integer> findIdsByNames(List<String> names) {
8789
if (names == null || names.isEmpty()) {
8890
return Collections.emptyList();
8991
}
9092

91-
return categoryDao.findIdsByNames(names);
93+
// converting to lowercase to perform a case-insensitive search
94+
List<String> lowerCasesNames = names
95+
.stream()
96+
.map(name -> name.toLowerCase(Locale.ENGLISH))
97+
.collect(Collectors.toList());
98+
99+
return categoryDao.findIdsByNames(lowerCasesNames);
92100
}
93101

102+
// CheckStyle: ignore LineLength for next 1 line
103+
// @todo #819 CategoryServiceImpl.findIdsWhenNameStartsWith(): add unit test for converting to lower case
94104
@Override
95105
@Transactional(readOnly = true)
96106
public List<Integer> findIdsWhenNameStartsWith(String name) {
@@ -102,7 +112,10 @@ public List<Integer> findIdsWhenNameStartsWith(String name) {
102112
"Name must not contain '%' or '_' chars"
103113
);
104114

105-
return categoryDao.findIdsByNamePattern(name + '%');
115+
// converting to lowercase to perform a case-insensitive search
116+
String pattern = name.toLowerCase(Locale.ENGLISH) + '%';
117+
118+
return categoryDao.findIdsByNamePattern(pattern);
106119
}
107120

108121
@Override

src/main/java/ru/mystamps/web/service/CountryServiceImpl.java

+15-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Date;
2222
import java.util.List;
2323
import java.util.Locale;
24+
import java.util.stream.Collectors;
2425

2526
import org.apache.commons.lang3.StringUtils;
2627
import org.apache.commons.lang3.Validate;
@@ -81,16 +82,25 @@ public String add(AddCountryDto dto, Integer userId) {
8182
return slug;
8283
}
8384

85+
// @todo #819 CountryServiceImpl.findIdsByNames(): add unit test for converting to lower case
8486
@Override
8587
@Transactional(readOnly = true)
8688
public List<Integer> findIdsByNames(List<String> names) {
8789
if (names == null || names.isEmpty()) {
8890
return Collections.emptyList();
8991
}
9092

91-
return countryDao.findIdsByNames(names);
93+
// converting to lowercase to perform a case-insensitive search
94+
List<String> lowerCasesNames = names
95+
.stream()
96+
.map(name -> name.toLowerCase(Locale.ENGLISH))
97+
.collect(Collectors.toList());
98+
99+
return countryDao.findIdsByNames(lowerCasesNames);
92100
}
93101

102+
// CheckStyle: ignore LineLength for next 1 line
103+
// @todo #819 CountryServiceImpl.findIdsWhenNameStartsWith(): add unit test for converting to lower case
94104
@Override
95105
@Transactional(readOnly = true)
96106
public List<Integer> findIdsWhenNameStartsWith(String name) {
@@ -102,7 +112,10 @@ public List<Integer> findIdsWhenNameStartsWith(String name) {
102112
"Name must not contain '%' or '_' chars"
103113
);
104114

105-
return countryDao.findIdsByNamePattern(name + '%');
115+
// converting to lowercase to perform a case-insensitive search
116+
String pattern = name.toLowerCase(Locale.ENGLISH) + '%';
117+
118+
return countryDao.findIdsByNamePattern(pattern);
106119
}
107120

108121
@Override

src/main/resources/sql/category_dao_queries.properties

+6-6
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,16 @@ category.find_ids_by_names = \
7272
FROM categories c \
7373
LEFT JOIN categories_aliases ca \
7474
ON ca.category_id = c.id \
75-
WHERE c.name IN (:names) \
76-
OR c.name_ru IN (:names) \
77-
OR ca.name IN (:names) \
78-
OR ca.name_ru IN (:names)
75+
WHERE LOWER(c.name) IN (:names) \
76+
OR LOWER(c.name_ru) IN (:names) \
77+
OR LOWER(ca.name) IN (:names) \
78+
OR LOWER(ca.name_ru) IN (:names)
7979

8080
category.find_ids_by_name_pattern = \
8181
SELECT id \
8282
FROM categories \
83-
WHERE name LIKE :pattern \
84-
OR name_ru LIKE :pattern
83+
WHERE LOWER(name) LIKE :pattern \
84+
OR LOWER(name_ru) LIKE :pattern
8585

8686
category.find_all_categories_names_with_slug = \
8787
SELECT CASE WHEN 'ru' = :lang THEN COALESCE(c.name_ru, c.name) ELSE c.name END AS name \

src/main/resources/sql/country_dao_queries.properties

+6-6
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,16 @@ country.find_ids_by_names = \
7272
FROM countries c \
7373
LEFT JOIN countries_aliases ca \
7474
ON ca.country_id = c.id \
75-
WHERE c.name IN (:names) \
76-
OR c.name_ru IN (:names) \
77-
OR ca.name IN (:names) \
78-
OR ca.name_ru IN (:names)
75+
WHERE LOWER(c.name) IN (:names) \
76+
OR LOWER(c.name_ru) IN (:names) \
77+
OR LOWER(ca.name) IN (:names) \
78+
OR LOWER(ca.name_ru) IN (:names)
7979

8080
country.find_ids_by_name_pattern = \
8181
SELECT id \
8282
FROM countries \
83-
WHERE name LIKE :pattern \
84-
OR name_ru LIKE :pattern
83+
WHERE LOWER(name) LIKE :pattern \
84+
OR LOWER(name_ru) LIKE :pattern
8585

8686
country.find_all_countries_names_with_slug = \
8787
SELECT CASE WHEN 'ru' = :lang THEN COALESCE(c.name_ru, c.name) ELSE c.name END AS name \

0 commit comments

Comments
 (0)