Skip to content

Commit 14583e1

Browse files
committed
Add support for specifying Solovyov catalog numbers.
Fix #770
1 parent bfa27a7 commit 14583e1

31 files changed

+298
-2
lines changed

NEWS.txt

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
- (functionality) add capability to specify image URL (as alternative to providing a file)
1919
- (functionality) admin can import a series from an external site
2020
- (integration) migrate from coveralls.io to codecov.io service for code coverage
21+
- (functionality) add support for specifying Solovyov catalog numbers
2122
- (functionality) add support for specifying Zagorski catalog numbers
2223

2324
0.3

src/main/java/ru/mystamps/web/config/DaoConfig.java

+10
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,16 @@ public SeriesSalesDao getSeriesSalesDao() {
107107
return new JdbcSeriesSalesDao(jdbcTemplate);
108108
}
109109

110+
@Bean
111+
public StampsCatalogDao getSolovyovCatalogDao() {
112+
return new JdbcStampsCatalogDao(
113+
jdbcTemplate,
114+
env.getRequiredProperty("solovyov.create"),
115+
env.getRequiredProperty("series_solovyov.add"),
116+
env.getRequiredProperty("series_solovyov.find_by_series_id")
117+
);
118+
}
119+
110120
@Bean
111121
public UserDao getUserDao() {
112122
return new JdbcUserDao(jdbcTemplate);

src/main/java/ru/mystamps/web/config/ServicesConfig.java

+10
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ public SeriesService getSeriesService() {
159159
getScottCatalogService(),
160160
getYvertCatalogService(),
161161
getGibbonsCatalogService(),
162+
getSolovyovCatalogService(),
162163
getZagorskiCatalogService()
163164
);
164165
}
@@ -246,6 +247,15 @@ public StampsCatalogService getGibbonsCatalogService() {
246247
);
247248
}
248249

250+
@Bean
251+
public StampsCatalogService getSolovyovCatalogService() {
252+
return new StampsCatalogServiceImpl(
253+
LoggerFactory.getLogger(StampsCatalogServiceImpl.class),
254+
"Solovyov",
255+
daoConfig.getSolovyovCatalogDao()
256+
);
257+
}
258+
249259
@Bean
250260
public StampsCatalogService getZagorskiCatalogService() {
251261
return new StampsCatalogServiceImpl(

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

+4
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ protected void initSeriesFormBinder(WebDataBinder binder) {
120120
binder.registerCustomEditor(String.class, "scottNumbers", editor);
121121
binder.registerCustomEditor(String.class, "yvertNumbers", editor);
122122
binder.registerCustomEditor(String.class, "gibbonsNumbers", editor);
123+
binder.registerCustomEditor(String.class, "solovyovNumbers", editor);
123124
binder.registerCustomEditor(String.class, "zagorskiNumbers", editor);
124125
binder.registerCustomEditor(String.class, "comment", new StringTrimmerEditor(true));
125126
}
@@ -457,6 +458,7 @@ public String searchSeriesByCatalog(
457458
}
458459

459460
// @todo #769 Support search by Zagorski number
461+
// @todo #770 Support search by Solovyov number
460462
String lang = LocaleUtils.getLanguageOrNull(userLocale);
461463
List<SeriesInfoDto> series;
462464
switch (catalogName) {
@@ -550,11 +552,13 @@ protected static void loadErrorsFromDownloadInterceptor(
550552
String scottNumbers = CatalogUtils.toShortForm(series.getScott().getNumbers());
551553
String yvertNumbers = CatalogUtils.toShortForm(series.getYvert().getNumbers());
552554
String gibbonsNumbers = CatalogUtils.toShortForm(series.getGibbons().getNumbers());
555+
String solovyovNumbers = CatalogUtils.toShortForm(series.getSolovyov().getNumbers());
553556
String zagorskiNumbers = CatalogUtils.toShortForm(series.getZagorski().getNumbers());
554557
model.put("michelNumbers", michelNumbers);
555558
model.put("scottNumbers", scottNumbers);
556559
model.put("yvertNumbers", yvertNumbers);
557560
model.put("gibbonsNumbers", gibbonsNumbers);
561+
model.put("solovyovNumbers", solovyovNumbers);
558562
model.put("zagorskiNumbers", zagorskiNumbers);
559563

560564
boolean isSeriesInCollection =

src/main/java/ru/mystamps/web/controller/dto/AddSeriesForm.java

+8
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,14 @@ public class AddSeriesForm implements AddSeriesDto, HasImageOrImageUrl, Nullable
131131
@Price
132132
private BigDecimal gibbonsPrice;
133133

134+
// @todo #770 /series/add: validate that Solovyov numbers are specified only for stamps
135+
// from USSR/Russia
136+
@CatalogNumbers
137+
private String solovyovNumbers;
138+
139+
@Price
140+
private BigDecimal solovyovPrice;
141+
134142
// @todo #769 /series/add: validate that Zagorski numbers are specified only for stamps
135143
// from USSR/Russia
136144
@CatalogNumbers

src/main/java/ru/mystamps/web/controller/dto/ImportSeriesForm.java

+10
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,16 @@ public BigDecimal getGibbonsPrice() {
144144
return null;
145145
}
146146

147+
@Override
148+
public String getSolovyovNumbers() {
149+
return null;
150+
}
151+
152+
@Override
153+
public BigDecimal getSolovyovPrice() {
154+
return null;
155+
}
156+
147157
@Override
148158
public String getZagorskiNumbers() {
149159
return null;

src/main/java/ru/mystamps/web/dao/dto/AddSeriesDbDto.java

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public class AddSeriesDbDto {
4747
private BigDecimal gibbonsPrice;
4848
private String gibbonsCurrency;
4949

50+
private BigDecimal solovyovPrice;
5051
private BigDecimal zagorskiPrice;
5152

5253
private Integer releaseDay;

src/main/java/ru/mystamps/web/dao/dto/SeriesFullInfoDto.java

+1
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,6 @@ public class SeriesFullInfoDto {
4949
private final BigDecimal gibbonsPrice;
5050
private final String gibbonsCurrency;
5151

52+
private final BigDecimal solovyovPrice;
5253
private final BigDecimal zagorskiPrice;
5354
}

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

+1
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ public Integer add(AddSeriesDbDto series) {
134134
params.put("yvert_currency", series.getYvertCurrency());
135135
params.put("gibbons_price", series.getGibbonsPrice());
136136
params.put("gibbons_currency", series.getGibbonsCurrency());
137+
params.put("solovyov_price", series.getSolovyovPrice());
137138
params.put("zagorski_price", series.getZagorskiPrice());
138139
params.put("comment", series.getComment());
139140
params.put("created_at", series.getCreatedAt());

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

+2
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ public static SeriesFullInfoDto forSeriesFullInfoDto(ResultSet rs, int i) throws
126126
BigDecimal gibbonsPrice = rs.getBigDecimal("gibbons_price");
127127
String gibbonsCurrency = rs.getString("gibbons_currency");
128128

129+
BigDecimal solovyovPrice = rs.getBigDecimal("solovyov_price");
129130
BigDecimal zagorskiPrice = rs.getBigDecimal("zagorski_price");
130131

131132
LinkEntityDto category =
@@ -153,6 +154,7 @@ public static SeriesFullInfoDto forSeriesFullInfoDto(ResultSet rs, int i) throws
153154
yvertCurrency,
154155
gibbonsPrice,
155156
gibbonsCurrency,
157+
solovyovPrice,
156158
zagorskiPrice
157159
);
158160
}

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

+13
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public class SeriesServiceImpl implements SeriesService {
6060
private final StampsCatalogService scottCatalogService;
6161
private final StampsCatalogService yvertCatalogService;
6262
private final StampsCatalogService gibbonsCatalogService;
63+
private final StampsCatalogService solovyovCatalogService;
6364
private final StampsCatalogService zagorskiCatalogService;
6465

6566
@Override
@@ -113,6 +114,10 @@ public Integer add(AddSeriesDto dto, Integer userId, boolean userCanAddComments)
113114
series.setGibbonsCurrency(Currency.GBP.toString());
114115
}
115116

117+
if (dto.getSolovyovPrice() != null) {
118+
series.setSolovyovPrice(dto.getSolovyovPrice());
119+
}
120+
116121
if (dto.getZagorskiPrice() != null) {
117122
series.setZagorskiPrice(dto.getZagorskiPrice());
118123
}
@@ -159,6 +164,12 @@ public Integer add(AddSeriesDto dto, Integer userId, boolean userCanAddComments)
159164
gibbonsCatalogService.addToSeries(id, gibbonsNumbers);
160165
}
161166

167+
Set<String> solovyovNumbers = CatalogUtils.parseCatalogNumbers(dto.getSolovyovNumbers());
168+
if (!solovyovNumbers.isEmpty()) {
169+
solovyovCatalogService.add(solovyovNumbers);
170+
solovyovCatalogService.addToSeries(id, solovyovNumbers);
171+
}
172+
162173
Set<String> zagorskiNumbers = CatalogUtils.parseCatalogNumbers(dto.getZagorskiNumbers());
163174
if (!zagorskiNumbers.isEmpty()) {
164175
zagorskiCatalogService.add(zagorskiNumbers);
@@ -276,6 +287,7 @@ public SeriesDto findFullInfoById(Integer seriesId, String lang) {
276287
List<String> scottNumbers = scottCatalogService.findBySeriesId(seriesId);
277288
List<String> yvertNumbers = yvertCatalogService.findBySeriesId(seriesId);
278289
List<String> gibbonsNumbers = gibbonsCatalogService.findBySeriesId(seriesId);
290+
List<String> solovyovNumbers = solovyovCatalogService.findBySeriesId(seriesId);
279291
List<String> zagorskiNumbers = zagorskiCatalogService.findBySeriesId(seriesId);
280292

281293
List<Integer> imageIds = imageService.findBySeriesId(seriesId);
@@ -286,6 +298,7 @@ public SeriesDto findFullInfoById(Integer seriesId, String lang) {
286298
scottNumbers,
287299
yvertNumbers,
288300
gibbonsNumbers,
301+
solovyovNumbers,
289302
zagorskiNumbers,
290303
imageIds
291304
);

src/main/java/ru/mystamps/web/service/dto/AddSeriesDto.java

+3
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public interface AddSeriesDto {
4444
String getGibbonsNumbers();
4545
BigDecimal getGibbonsPrice();
4646

47+
String getSolovyovNumbers();
48+
BigDecimal getSolovyovPrice();
49+
4750
String getZagorskiNumbers();
4851
BigDecimal getZagorskiPrice();
4952

src/main/java/ru/mystamps/web/service/dto/SeriesDto.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ public class SeriesDto {
3939
@Getter
4040
private final CatalogInfoDto gibbons;
4141

42+
@Getter
43+
private final CatalogInfoDto solovyov;
44+
4245
@Getter
4346
private final CatalogInfoDto zagorski;
4447

@@ -52,15 +55,17 @@ public SeriesDto(
5255
List<String> scottNumbers,
5356
List<String> yvertNumbers,
5457
List<String> gibbonsNumbers,
58+
List<String> solovyovNumbers,
5559
List<String> zagorskiNumbers,
5660
List<Integer> imageIds) {
5761

5862
this.info = info;
59-
// CheckStyle: ignore LineLength for next 5 lines
63+
// CheckStyle: ignore LineLength for next 6 lines
6064
this.michel = new CatalogInfoDto(michelNumbers, info.getMichelPrice(), info.getMichelCurrency());
6165
this.scott = new CatalogInfoDto(scottNumbers, info.getScottPrice(), info.getScottCurrency());
6266
this.yvert = new CatalogInfoDto(yvertNumbers, info.getYvertPrice(), info.getYvertCurrency());
6367
this.gibbons = new CatalogInfoDto(gibbonsNumbers, info.getGibbonsPrice(), info.getGibbonsCurrency());
68+
this.solovyov = new CatalogInfoDto(solovyovNumbers, info.getSolovyovPrice(), null /* unused field currency */);
6469
this.zagorski = new CatalogInfoDto(zagorskiNumbers, info.getZagorskiPrice(), null /* unused field currency */);
6570
this.imageIds = imageIds;
6671
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
--
2+
-- Auto-generated by Maven, based on values from src/main/resources/test/spring/test-data.properties
3+
--
4+
5+
INSERT INTO solovyov_catalog(id, code) VALUES(1, '@existing_solovyov_number@');
6+
INSERT INTO series_solovyov_catalog(series_id, solovyov_id) VALUES(1, 1);

src/main/resources/liquibase/version/0.4.xml

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
<include file="0.4/2017-11-15--group_participants.xml" relativeToChangelogFile="true" />
4242
<include file="0.4/2017-11-22--import_request_series_id.xml" relativeToChangelogFile="true" />
4343
<include file="0.4/2017-12-18--unique_series_id_in_import_requests.xml" relativeToChangelogFile="true" />
44+
<include file="0.4/2017-12-21--solovyov_catalog.xml" relativeToChangelogFile="true" />
4445
<include file="0.4/2017-12-21--zagorski_catalog.xml" relativeToChangelogFile="true" />
4546

4647
</databaseChangeLog>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<databaseChangeLog
3+
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
6+
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
7+
8+
<changeSet id="create-solovyov_catalog-table" author="php-coder" context="scheme">
9+
10+
<createTable tableName="solovyov_catalog">
11+
<column name="id" type="INTEGER" autoIncrement="true">
12+
<constraints primaryKey="true" />
13+
</column>
14+
<column name="code" type="VARCHAR(4)">
15+
<constraints nullable="false" unique="true" uniqueConstraintName="uc_solovyov_catalog_code" />
16+
</column>
17+
</createTable>
18+
19+
</changeSet>
20+
21+
<changeSet id="create-series_solovyov_catalog-table" author="php-coder" context="scheme">
22+
23+
<createTable tableName="series_solovyov_catalog">
24+
<column name="series_id" type="INTEGER">
25+
<constraints primaryKey="true" references="series(id)" foreignKeyName="fk_series_solovyov_catalog_series_id" />
26+
</column>
27+
<column name="solovyov_id" type="INTEGER">
28+
<constraints primaryKey="true" references="solovyov_catalog(id)" foreignKeyName="fk_series_solovyov_catalog_solovyov_id" />
29+
</column>
30+
</createTable>
31+
32+
</changeSet>
33+
34+
<changeSet id="add-solovyov_price-field-to-series-field" author="php-coder" context="scheme">
35+
36+
<addColumn tableName="series">
37+
<column name="solovyov_price" type="DECIMAL(19,2)" afterColumn="gibbons_price" />
38+
</addColumn>
39+
40+
</changeSet>
41+
42+
<changeSet id="add-solovyov-numbers-to-series" author="php-coder" context="test-data">
43+
<sqlFile path="../../sql/test-series-with-solovyov-numbers.sql" relativeToChangelogFile="true" />
44+
</changeSet>
45+
46+
</databaseChangeLog>

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

+1
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ t_scott = Scott
119119
t_yvert = Yvert
120120
t_sg = Gibbons
121121
t_zagorski = Zagorski
122+
t_solovyov = Solovyov
122123

123124
t_add_comment = Add comment
124125
t_comment = Comment

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

+1
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ t_scott = Scott
119119
t_yvert = Yvert
120120
t_sg = Gibbons
121121
t_zagorski = Загорский
122+
t_solovyov = Соловьев
122123
t_add_comment = Добавить комментарий
123124
t_comment = Комментарий
124125
t_image = Изображение

src/main/resources/sql/series_dao_queries.properties

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ INSERT \
1616
, yvert_currency \
1717
, gibbons_price \
1818
, gibbons_currency \
19+
, solovyov_price \
1920
, zagorski_price \
2021
, comment \
2122
, created_at \
@@ -39,6 +40,7 @@ VALUES \
3940
, :yvert_currency \
4041
, :gibbons_price \
4142
, :gibbons_currency \
43+
, :solovyov_price \
4244
, :zagorski_price \
4345
, :comment \
4446
, :created_at \
@@ -99,6 +101,7 @@ series.find_full_info_by_id = \
99101
, s.yvert_currency \
100102
, s.gibbons_price \
101103
, s.gibbons_currency \
104+
, s.solovyov_price \
102105
, s.zagorski_price \
103106
, s.comment \
104107
, s.created_by \

src/main/resources/sql/stamps_catalog_dao_queries.properties

+30
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,17 @@ SELECT :code AS code \
4242
WHERE code = :code \
4343
)
4444

45+
solovyov.create = \
46+
INSERT \
47+
INTO solovyov_catalog(code) \
48+
SELECT :code AS code \
49+
FROM dual \
50+
WHERE NOT EXISTS( \
51+
SELECT * \
52+
FROM solovyov_catalog \
53+
WHERE code = :code \
54+
)
55+
4556
zagorski.create = \
4657
INSERT \
4758
INTO zagorski_catalog(code) \
@@ -101,6 +112,18 @@ SELECT :series_id \
101112
WHERE code \
102113
IN (:numbers)
103114

115+
series_solovyov.add = \
116+
INSERT \
117+
INTO series_solovyov_catalog \
118+
( series_id \
119+
, solovyov_id \
120+
) \
121+
SELECT :series_id \
122+
, id \
123+
FROM solovyov_catalog \
124+
WHERE code \
125+
IN (:numbers)
126+
104127
series_zagorski.add = \
105128
INSERT \
106129
INTO series_zagorski_catalog \
@@ -141,6 +164,13 @@ SELECT c.code \
141164
ON c.id = sc.yvert_id \
142165
WHERE sc.series_id = :series_id
143166

167+
series_solovyov.find_by_series_id = \
168+
SELECT c.code \
169+
FROM series_solovyov_catalog sc \
170+
JOIN solovyov_catalog c \
171+
ON c.id = sc.solovyov_id \
172+
WHERE sc.series_id = :series_id
173+
144174
series_zagorski.find_by_series_id = \
145175
SELECT c.code \
146176
FROM series_zagorski_catalog sc \

src/main/resources/test/spring/test-data.properties

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ existing_michel_number = 99
3232
existing_scott_number = 99
3333
existing_yvert_number = 99
3434
existing_gibbons_number = 99
35+
existing_solovyov_number = 77
3536
existing_zagorski_number = 83
3637

3738
# this category should always exist

0 commit comments

Comments
 (0)