Skip to content

Commit 054f826

Browse files
committed
feat: show similar series on a page with series info.
Fix #967
1 parent f1212d7 commit 054f826

File tree

10 files changed

+56
-10
lines changed

10 files changed

+56
-10
lines changed

NEWS.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
- (infrastructure) use WireMock in integration tests for mocking external services
2626
- (functionality) suggest a possible country on a series creation page (contributed by John Shkarin)
2727
- (functionality) suggest a possible category on a series creation page
28+
- (functionality) show similar series on a page with series info
2829

2930
0.3
3031
- (functionality) implemented possibility to user to add series to his collection

src/main/java/ru/mystamps/web/feature/series/JdbcSeriesDao.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ public class JdbcSeriesDao implements SeriesDao {
5757
@Value("${series.find_all_for_sitemap}")
5858
private String findAllForSitemapSql;
5959

60+
@Value("${series.find_similar_series}")
61+
private String findSimilarSeriesSql;
62+
6063
@Value("${series.find_last_added}")
6164
private String findLastAddedSeriesSql;
6265

@@ -163,6 +166,15 @@ public List<SitemapInfoDto> findAllForSitemap() {
163166
);
164167
}
165168

169+
@Override
170+
public List<SeriesLinkDto> findSimilarSeries(Integer seriesId, String lang) {
171+
Map<String, Object> params = new HashMap<>();
172+
params.put("id", seriesId);
173+
params.put("lang", lang);
174+
175+
return jdbcTemplate.query(findSimilarSeriesSql, params, RowMappers::forSeriesLinkDto);
176+
}
177+
166178
@Override
167179
public List<SeriesLinkDto> findLastAdded(int quantity, String lang) {
168180
Map<String, Object> params = new HashMap<>();

src/main/java/ru/mystamps/web/feature/series/SeriesController.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ public String showInfo(
249249
return null;
250250
}
251251

252-
Map<String, ?> commonAttrs = prepareCommonAttrsForSeriesInfo(series, currentUserId);
252+
Map<String, ?> commonAttrs = prepareCommonAttrsForSeriesInfo(series, currentUserId, lang);
253253
model.addAllAttributes(commonAttrs);
254254

255255
addSeriesSalesFormToModel(model);
@@ -323,7 +323,8 @@ public String processImage(
323323
model.addAttribute("maxQuantityOfImagesExceeded", maxQuantityOfImagesExceeded);
324324

325325
if (result.hasErrors() || maxQuantityOfImagesExceeded) {
326-
Map<String, ?> commonAttrs = prepareCommonAttrsForSeriesInfo(series, currentUserId);
326+
Map<String, ?> commonAttrs =
327+
prepareCommonAttrsForSeriesInfo(series, currentUserId, lang);
327328
model.addAllAttributes(commonAttrs);
328329

329330
addSeriesSalesFormToModel(model);
@@ -382,7 +383,7 @@ public String addToCollection(
382383
return null;
383384
}
384385

385-
Map<String, ?> commonAttrs = prepareCommonAttrsForSeriesInfo(series, userId);
386+
Map<String, ?> commonAttrs = prepareCommonAttrsForSeriesInfo(series, userId, lang);
386387
model.addAllAttributes(commonAttrs);
387388

388389
addSeriesSalesFormToModel(model);
@@ -456,7 +457,8 @@ public String processAskForm(
456457
model.addAttribute("maxQuantityOfImagesExceeded", maxQuantityOfImagesExceeded);
457458

458459
if (result.hasErrors() || maxQuantityOfImagesExceeded) {
459-
Map<String, ?> commonAttrs = prepareCommonAttrsForSeriesInfo(series, currentUserId);
460+
Map<String, ?> commonAttrs =
461+
prepareCommonAttrsForSeriesInfo(series, currentUserId, lang);
460462
model.addAllAttributes(commonAttrs);
461463

462464
addSeriesSalesFormToModel(model);
@@ -587,13 +589,19 @@ public static void loadErrorsFromDownloadInterceptor(
587589
request.removeAttribute(DownloadImageInterceptor.ERROR_CODE_ATTR_NAME);
588590
}
589591

590-
// CheckStyle: ignore LineLength for next 1 line
591-
private Map<String, ?> prepareCommonAttrsForSeriesInfo(SeriesDto series, Integer currentUserId) {
592+
private Map<String, ?> prepareCommonAttrsForSeriesInfo(
593+
SeriesDto series,
594+
Integer currentUserId,
595+
String lang) {
596+
592597
Map<String, Object> model = new HashMap<>();
593598
Integer seriesId = series.getId();
594599

595600
model.put("series", series);
596601

602+
List<SeriesLinkDto> similarSeries = seriesService.findSimilarSeries(seriesId, lang);
603+
model.put("similarSeries", similarSeries);
604+
597605
String michelNumbers = CatalogUtils.toShortForm(series.getMichel().getNumbers());
598606
String scottNumbers = CatalogUtils.toShortForm(series.getScott().getNumbers());
599607
String yvertNumbers = CatalogUtils.toShortForm(series.getYvert().getNumbers());

src/main/java/ru/mystamps/web/feature/series/SeriesDao.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public interface SeriesDao {
2626
Integer add(AddSeriesDbDto series);
2727
void markAsModified(Integer seriesId, Date updateAt, Integer updatedBy);
2828
List<SitemapInfoDto> findAllForSitemap();
29+
List<SeriesLinkDto> findSimilarSeries(Integer seriesId, String lang);
2930
List<SeriesLinkDto> findLastAdded(int quantity, String lang);
3031
SeriesFullInfoDto findByIdAsSeriesFullInfo(Integer seriesId, String lang);
3132
List<SeriesInfoDto> findByIdsAsSeriesInfo(List<Integer> seriesIds, String lang);

src/main/java/ru/mystamps/web/feature/series/SeriesService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public interface SeriesService {
4444
List<SeriesInfoDto> findByCategorySlug(String slug, String lang);
4545
List<SeriesInfoDto> findByCountrySlug(String slug, String lang);
4646
List<SeriesLinkDto> findRecentlyAdded(int quantity, String lang);
47+
List<SeriesLinkDto> findSimilarSeries(Integer seriesId, String lang);
4748
List<SitemapInfoDto> findAllForSitemap();
4849

4950
List<PurchaseAndSaleDto> findPurchasesAndSales(Integer seriesId);

src/main/java/ru/mystamps/web/feature/series/SeriesServiceImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,15 @@ public List<SeriesLinkDto> findRecentlyAdded(int quantity, String lang) {
292292
return seriesDao.findLastAdded(quantity, lang);
293293
}
294294

295+
// @todo #967 SeriesServiceImpl.findSimilarSeries(): add unit tests
296+
@Override
297+
@Transactional(readOnly = true)
298+
public List<SeriesLinkDto> findSimilarSeries(Integer seriesId, String lang) {
299+
Validate.isTrue(seriesId != null, "Series id must be non null");
300+
301+
return seriesDao.findSimilarSeries(seriesId, lang);
302+
}
303+
295304
@Override
296305
@Transactional(readOnly = true)
297306
public List<SitemapInfoDto> findAllForSitemap() {

src/main/resources/ru/mystamps/i18n/Messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ t_sold_to = sold to
163163
t_sold_for = for
164164
t_not_chosen_masculine = Not chosen
165165
t_imported_from = Imported from
166+
t_similar_series = Similar series
166167

167168
# category/add.html
168169

src/main/resources/ru/mystamps/i18n/Messages_ru.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ t_sold_to = продал
162162
t_sold_for = за
163163
t_not_chosen_masculine = Не выбран
164164
t_imported_from = Импортировано с
165+
t_similar_series = Похожие серии
165166

166167
# category/add.html
167168

src/main/resources/sql/series_dao_queries.properties

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,19 @@ series.find_all_for_sitemap = \
5151
SELECT s.id, s.updated_at \
5252
FROM series s
5353

54+
series.find_similar_series = \
55+
SELECT CASE WHEN ss.similar_series_id != :id THEN ss.similar_series_id ELSE ss.series_id END AS id \
56+
, s.release_year \
57+
, s.quantity \
58+
, s.perforated \
59+
, CASE WHEN 'ru' = :lang THEN COALESCE(count.name_ru, count.name) ELSE count.name END AS country_name \
60+
FROM similar_series ss \
61+
JOIN series s \
62+
ON s.id = ss.series_id OR s.id = ss.similar_series_id \
63+
LEFT JOIN countries count \
64+
ON count.id = s.country_id \
65+
WHERE s.id = :id
66+
5467
series.find_last_added = \
5568
SELECT s.id \
5669
, s.release_year \

src/main/webapp/WEB-INF/views/series/info.html

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -338,13 +338,13 @@
338338
</dl>
339339
</div>
340340
</div>
341-
<!--/*-->
342-
<div class="row">
341+
<div class="row" th:if="${not #lists.isEmpty(similarSeries)}">
342+
<!--/* @todo #967 Add integration tests for showing similar series */-->
343343
<div class="col-sm-10 col-sm-offset-2">
344344
<h5 class="text-center" th:text="#{t_similar_series}">
345345
Similar series
346346
</h5>
347-
<ul>
347+
<ul th:remove="all-but-first">
348348
<li th:each="series : ${similarSeries}">
349349
<a href="../series/info.html" th:href="@{${INFO_SERIES_PAGE}(id=${series.id})}">
350350
<span th:remove="tag" th:if="${series.country != null}" th:text="|${series.country}, |">Italy, </span>
@@ -358,7 +358,6 @@ <h5 class="text-center" th:text="#{t_similar_series}">
358358
</ul>
359359
</div>
360360
</div>
361-
<!--*/-->
362361
</div>
363362

364363
<div class="col-sm-4">

0 commit comments

Comments
 (0)