Skip to content

Commit 3f4e886

Browse files
committed
SeriesService.findByCollectionId(): rename to CollectionService.findSeriesInCollection().
Fix #879
1 parent d9928a4 commit 3f4e886

13 files changed

+79
-79
lines changed

src/main/java/ru/mystamps/web/controller/CollectionController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public String showInfoBySlug(
8080
Integer collectionId = collection.getId();
8181
String lang = LocaleUtils.getLanguageOrNull(userLocale);
8282
List<SeriesInCollectionDto> seriesOfCollection =
83-
seriesService.findByCollectionId(collectionId, lang);
83+
collectionService.findSeriesInCollection(collectionId, lang);
8484
model.addAttribute("seriesOfCollection", seriesOfCollection);
8585

8686
if (seriesOfCollection.iterator().hasNext()) {

src/main/java/ru/mystamps/web/dao/CollectionDao.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,13 @@
2424
import ru.mystamps.web.dao.dto.AddToCollectionDbDto;
2525
import ru.mystamps.web.dao.dto.CollectionInfoDto;
2626
import ru.mystamps.web.dao.dto.LinkEntityDto;
27+
import ru.mystamps.web.dao.dto.SeriesInCollectionDto;
2728
import ru.mystamps.web.dao.dto.SeriesInCollectionWithPriceDto;
2829

30+
@SuppressWarnings("PMD.TooManyMethods")
2931
public interface CollectionDao {
3032
List<LinkEntityDto> findLastCreated(int quantity);
33+
List<SeriesInCollectionDto> findSeriesByCollectionId(Integer collectionId, String lang);
3134
List<SeriesInCollectionWithPriceDto> findSeriesWithPricesBySlug(String slug, String lang);
3235
long countCollectionsOfUsers();
3336
long countUpdatedSince(Date date);

src/main/java/ru/mystamps/web/dao/SeriesDao.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import ru.mystamps.web.dao.dto.AddSeriesDbDto;
2424
import ru.mystamps.web.dao.dto.PurchaseAndSaleDto;
2525
import ru.mystamps.web.dao.dto.SeriesFullInfoDto;
26-
import ru.mystamps.web.dao.dto.SeriesInCollectionDto;
2726
import ru.mystamps.web.dao.dto.SeriesInfoDto;
2827
import ru.mystamps.web.dao.dto.SeriesLinkDto;
2928
import ru.mystamps.web.dao.dto.SitemapInfoDto;
@@ -39,7 +38,6 @@ public interface SeriesDao {
3938
List<SeriesInfoDto> findByIdsAsSeriesInfo(List<Integer> seriesIds, String lang);
4039
List<SeriesInfoDto> findByCategorySlugAsSeriesInfo(String slug, String lang);
4140
List<SeriesInfoDto> findByCountrySlugAsSeriesInfo(String slug, String lang);
42-
List<SeriesInCollectionDto> findByCollectionId(Integer collectionId, String lang);
4341
List<PurchaseAndSaleDto> findPurchasesAndSales(Integer seriesId);
4442

4543
long countAll();

src/main/java/ru/mystamps/web/dao/impl/JdbcCollectionDao.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,11 @@
4242
import ru.mystamps.web.dao.dto.AddToCollectionDbDto;
4343
import ru.mystamps.web.dao.dto.CollectionInfoDto;
4444
import ru.mystamps.web.dao.dto.LinkEntityDto;
45+
import ru.mystamps.web.dao.dto.SeriesInCollectionDto;
4546
import ru.mystamps.web.dao.dto.SeriesInCollectionWithPriceDto;
4647

4748
@RequiredArgsConstructor
48-
@SuppressWarnings("PMD.AvoidDuplicateLiterals")
49+
@SuppressWarnings({ "PMD.AvoidDuplicateLiterals", "PMD.TooManyMethods" })
4950
public class JdbcCollectionDao implements CollectionDao {
5051
private static final Logger LOG = LoggerFactory.getLogger(JdbcCollectionDao.class);
5152

@@ -54,6 +55,9 @@ public class JdbcCollectionDao implements CollectionDao {
5455
@Value("${collection.find_last_created}")
5556
private String findLastCreatedCollectionsSql;
5657

58+
@Value("${collection.find_series_by_collection_id}")
59+
private String findSeriesByCollectionIdSql;
60+
5761
@Value("${collection.find_series_with_prices_by_slug}")
5862
private String findSeriesWithPricesBySlugSql;
5963

@@ -93,6 +97,19 @@ public List<LinkEntityDto> findLastCreated(int quantity) {
9397
);
9498
}
9599

100+
@Override
101+
public List<SeriesInCollectionDto> findSeriesByCollectionId(Integer collectionId, String lang) {
102+
Map<String, Object> params = new HashMap<>();
103+
params.put("collection_id", collectionId);
104+
params.put("lang", lang);
105+
106+
return jdbcTemplate.query(
107+
findSeriesByCollectionIdSql,
108+
params,
109+
RowMappers::forSeriesInCollectionDto
110+
);
111+
}
112+
96113
@Override
97114
public List<SeriesInCollectionWithPriceDto> findSeriesWithPricesBySlug(
98115
String slug,

src/main/java/ru/mystamps/web/dao/impl/JdbcSeriesDao.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import ru.mystamps.web.dao.dto.AddSeriesDbDto;
3939
import ru.mystamps.web.dao.dto.PurchaseAndSaleDto;
4040
import ru.mystamps.web.dao.dto.SeriesFullInfoDto;
41-
import ru.mystamps.web.dao.dto.SeriesInCollectionDto;
4241
import ru.mystamps.web.dao.dto.SeriesInfoDto;
4342
import ru.mystamps.web.dao.dto.SeriesLinkDto;
4443
import ru.mystamps.web.dao.dto.SitemapInfoDto;
@@ -79,9 +78,6 @@ public class JdbcSeriesDao implements SeriesDao {
7978
@Value("${series.find_by_country_slug}")
8079
private String findByCountrySlugSql;
8180

82-
@Value("${series.find_by_collection_id}")
83-
private String findByCollectionIdSql;
84-
8581
@Value("${series.find_purchases_and_sales_by_series_id}")
8682
private String findPurchasesAndSalesBySeriesIdSql;
8783

@@ -232,19 +228,6 @@ public List<SeriesInfoDto> findByCountrySlugAsSeriesInfo(String slug, String lan
232228
return jdbcTemplate.query(findByCountrySlugSql, params, RowMappers::forSeriesInfoDto);
233229
}
234230

235-
@Override
236-
public List<SeriesInCollectionDto> findByCollectionId(Integer collectionId, String lang) {
237-
Map<String, Object> params = new HashMap<>();
238-
params.put("collection_id", collectionId);
239-
params.put("lang", lang);
240-
241-
return jdbcTemplate.query(
242-
findByCollectionIdSql,
243-
params,
244-
RowMappers::forSeriesInCollectionDto
245-
);
246-
}
247-
248231
/**
249232
* @author Sergey Chechenev
250233
*/

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import ru.mystamps.web.dao.dto.CollectionInfoDto;
2424
import ru.mystamps.web.dao.dto.LinkEntityDto;
25+
import ru.mystamps.web.dao.dto.SeriesInCollectionDto;
2526
import ru.mystamps.web.dao.dto.SeriesInCollectionWithPriceDto;
2627
import ru.mystamps.web.service.dto.AddToCollectionDto;
2728

@@ -34,6 +35,7 @@ public interface CollectionService {
3435
long countUpdatedSince(Date date);
3536
long countStampsOf(Integer collectionId);
3637
List<LinkEntityDto> findRecentlyCreated(int quantity);
38+
List<SeriesInCollectionDto> findSeriesInCollection(Integer collectionId, String lang);
3739
List<SeriesInCollectionWithPriceDto> findSeriesWithPricesBySlug(String slug, String lang);
3840
CollectionInfoDto findBySlug(String slug);
3941
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@
3636
import ru.mystamps.web.dao.dto.AddToCollectionDbDto;
3737
import ru.mystamps.web.dao.dto.CollectionInfoDto;
3838
import ru.mystamps.web.dao.dto.LinkEntityDto;
39+
import ru.mystamps.web.dao.dto.SeriesInCollectionDto;
3940
import ru.mystamps.web.dao.dto.SeriesInCollectionWithPriceDto;
4041
import ru.mystamps.web.service.dto.AddToCollectionDto;
4142
import ru.mystamps.web.support.spring.security.HasAuthority;
4243
import ru.mystamps.web.util.SlugUtils;
4344

4445
@RequiredArgsConstructor
46+
@SuppressWarnings("PMD.TooManyMethods")
4547
public class CollectionServiceImpl implements CollectionService {
4648

4749
private final Logger log;
@@ -159,6 +161,14 @@ public List<LinkEntityDto> findRecentlyCreated(int quantity) {
159161
return collectionDao.findLastCreated(quantity);
160162
}
161163

164+
@Override
165+
@Transactional(readOnly = true)
166+
public List<SeriesInCollectionDto> findSeriesInCollection(Integer collectionId, String lang) {
167+
Validate.isTrue(collectionId != null, "Collection id must be non null");
168+
169+
return collectionDao.findSeriesByCollectionId(collectionId, lang);
170+
}
171+
162172
// @todo #884 CollectionService.findSeriesWithPricesBySlug(): add unit tests
163173
@Override
164174
@Transactional(readOnly = true)

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.util.List;
2222

2323
import ru.mystamps.web.dao.dto.PurchaseAndSaleDto;
24-
import ru.mystamps.web.dao.dto.SeriesInCollectionDto;
2524
import ru.mystamps.web.dao.dto.SeriesInfoDto;
2625
import ru.mystamps.web.dao.dto.SeriesLinkDto;
2726
import ru.mystamps.web.dao.dto.SitemapInfoDto;
@@ -53,9 +52,6 @@ public interface SeriesService {
5352

5453
List<SeriesInfoDto> findByCategorySlug(String slug, String lang);
5554
List<SeriesInfoDto> findByCountrySlug(String slug, String lang);
56-
// @todo #477 SeriesService.findByCollectionId():
57-
// rename to CollectionService.findSeriesInCollection()
58-
List<SeriesInCollectionDto> findByCollectionId(Integer collectionId, String lang);
5955
List<SeriesLinkDto> findRecentlyAdded(int quantity, String lang);
6056
List<SitemapInfoDto> findAllForSitemap();
6157

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

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import ru.mystamps.web.dao.dto.ImageInfoDto;
3838
import ru.mystamps.web.dao.dto.PurchaseAndSaleDto;
3939
import ru.mystamps.web.dao.dto.SeriesFullInfoDto;
40-
import ru.mystamps.web.dao.dto.SeriesInCollectionDto;
4140
import ru.mystamps.web.dao.dto.SeriesInfoDto;
4241
import ru.mystamps.web.dao.dto.SeriesLinkDto;
4342
import ru.mystamps.web.dao.dto.SitemapInfoDto;
@@ -301,14 +300,6 @@ public List<SeriesInfoDto> findByCountrySlug(String slug, String lang) {
301300
return seriesDao.findByCountrySlugAsSeriesInfo(slug, lang);
302301
}
303302

304-
@Override
305-
@Transactional(readOnly = true)
306-
public List<SeriesInCollectionDto> findByCollectionId(Integer collectionId, String lang) {
307-
Validate.isTrue(collectionId != null, "Collection id must be non null");
308-
309-
return seriesDao.findByCollectionId(collectionId, lang);
310-
}
311-
312303
@Override
313304
@Transactional(readOnly = true)
314305
public List<SeriesLinkDto> findRecentlyAdded(int quantity, String lang) {

src/main/resources/sql/collection_dao_queries.properties

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,29 @@ collection.find_last_created = \
1010
ORDER BY c.id DESC \
1111
LIMIT :quantity
1212

13+
collection.find_series_by_collection_id = \
14+
SELECT s.id \
15+
, cat.id AS category_id \
16+
, cat.slug AS category_slug \
17+
, CASE WHEN 'ru' = :lang THEN COALESCE(cat.name_ru, cat.name) ELSE cat.name END AS category_name \
18+
, count.id AS country_id \
19+
, count.slug AS country_slug \
20+
, CASE WHEN 'ru' = :lang THEN COALESCE(count.name_ru, count.name) ELSE count.name END AS country_name \
21+
, s.release_day \
22+
, s.release_month \
23+
, s.release_year \
24+
, s.quantity \
25+
, s.perforated \
26+
, cs.number_of_stamps \
27+
FROM collections_series cs \
28+
JOIN series s \
29+
ON s.id = cs.series_id \
30+
JOIN categories cat \
31+
ON cat.id = s.category_id \
32+
LEFT JOIN countries count \
33+
ON count.id = s.country_id \
34+
WHERE cs.collection_id = :collection_id
35+
1336
collection.find_series_with_prices_by_slug = \
1437
SELECT s.id \
1538
, s.release_year \

src/main/resources/sql/series_dao_queries.properties

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -151,29 +151,6 @@ LEFT JOIN countries count \
151151
ON count.id = s.country_id \
152152
WHERE count.slug = :slug
153153

154-
series.find_by_collection_id = \
155-
SELECT s.id \
156-
, cat.id AS category_id \
157-
, cat.slug AS category_slug \
158-
, CASE WHEN 'ru' = :lang THEN COALESCE(cat.name_ru, cat.name) ELSE cat.name END AS category_name \
159-
, count.id AS country_id \
160-
, count.slug AS country_slug \
161-
, CASE WHEN 'ru' = :lang THEN COALESCE(count.name_ru, count.name) ELSE count.name END AS country_name \
162-
, s.release_day \
163-
, s.release_month \
164-
, s.release_year \
165-
, s.quantity \
166-
, s.perforated \
167-
, cs.number_of_stamps \
168-
FROM collections_series cs \
169-
JOIN series s \
170-
ON s.id = cs.series_id \
171-
JOIN categories cat \
172-
ON cat.id = s.category_id \
173-
LEFT JOIN countries count \
174-
ON count.id = s.country_id \
175-
WHERE cs.collection_id = :collection_id
176-
177154
series.find_purchases_and_sales_by_series_id = \
178155
SELECT date \
179156
, seller.name AS seller_name \

src/test/groovy/ru/mystamps/web/service/CollectionServiceImplTest.groovy

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,28 @@ class CollectionServiceImplTest extends Specification {
353353
1 * collectionDao.findLastCreated(expectedQuantity) >> []
354354
}
355355

356+
//
357+
// Tests for findSeriesInCollection()
358+
//
359+
360+
def 'findSeriesInCollection() should throw exception when collection id is null'() {
361+
when:
362+
service.findSeriesInCollection(null, Random.lang())
363+
then:
364+
thrown IllegalArgumentException
365+
}
366+
367+
def 'findSeriesInCollection() should pass arguments to dao'() {
368+
given:
369+
Integer expectedCollectionId = Random.id()
370+
and:
371+
String expectedLang = Random.lang()
372+
when:
373+
service.findSeriesInCollection(expectedCollectionId, expectedLang)
374+
then:
375+
1 * collectionDao.findSeriesByCollectionId(expectedCollectionId, expectedLang) >> []
376+
}
377+
356378
//
357379
// Tests for findBySlug()
358380
//

src/test/groovy/ru/mystamps/web/service/SeriesServiceImplTest.groovy

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,28 +1075,6 @@ class SeriesServiceImplTest extends Specification {
10751075
result == expectedResult
10761076
}
10771077

1078-
//
1079-
// Tests for findByCollectionId()
1080-
//
1081-
1082-
def "findByCollectionId() should throw exception when collection id is null"() {
1083-
when:
1084-
service.findByCollectionId(null, Random.lang())
1085-
then:
1086-
thrown IllegalArgumentException
1087-
}
1088-
1089-
def "findByCollectionId() should pass arguments to dao"() {
1090-
given:
1091-
Integer expectedCollectionId = Random.id()
1092-
and:
1093-
String expectedLang = Random.lang()
1094-
when:
1095-
service.findByCollectionId(expectedCollectionId, expectedLang)
1096-
then:
1097-
1 * seriesDao.findByCollectionId(expectedCollectionId, expectedLang) >> []
1098-
}
1099-
11001078
//
11011079
// Tests for findRecentlyAdded
11021080
//

0 commit comments

Comments
 (0)