Skip to content

Commit bfa27a7

Browse files
committed
Add support for specifying Zagorski catalog numbers.
Fix #769
1 parent 3d69d8a commit bfa27a7

31 files changed

+387
-53
lines changed

NEWS.txt

Lines changed: 1 addition & 0 deletions
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 Zagorski catalog numbers
2122

2223
0.3
2324
- (functionality) implemented possibility to user to add series to his collection

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,16 @@ public StampsCatalogDao getYvertCatalogDao() {
135135
env.getRequiredProperty("series_yvert.add"),
136136
env.getRequiredProperty("series_yvert.find_by_series_id")
137137
);
138-
138+
}
139+
140+
@Bean
141+
public StampsCatalogDao getZagorskiCatalogDao() {
142+
return new JdbcStampsCatalogDao(
143+
jdbcTemplate,
144+
env.getRequiredProperty("zagorski.create"),
145+
env.getRequiredProperty("series_zagorski.add"),
146+
env.getRequiredProperty("series_zagorski.find_by_series_id")
147+
);
139148
}
140149

141150
}

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,8 @@ public SeriesService getSeriesService() {
158158
getMichelCatalogService(),
159159
getScottCatalogService(),
160160
getYvertCatalogService(),
161-
getGibbonsCatalogService()
161+
getGibbonsCatalogService(),
162+
getZagorskiCatalogService()
162163
);
163164
}
164165

@@ -245,6 +246,15 @@ public StampsCatalogService getGibbonsCatalogService() {
245246
);
246247
}
247248

249+
@Bean
250+
public StampsCatalogService getZagorskiCatalogService() {
251+
return new StampsCatalogServiceImpl(
252+
LoggerFactory.getLogger(StampsCatalogServiceImpl.class),
253+
"Zagorski",
254+
daoConfig.getZagorskiCatalogDao()
255+
);
256+
}
257+
248258
@Bean
249259
public TransactionParticipantService getTransactionParticipantService() {
250260
return new TransactionParticipantServiceImpl(

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

Lines changed: 8 additions & 4 deletions
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, "zagorskiNumbers", editor);
123124
binder.registerCustomEditor(String.class, "comment", new StringTrimmerEditor(true));
124125
}
125126

@@ -455,6 +456,7 @@ public String searchSeriesByCatalog(
455456
return "redirect:" + Url.INDEX_PAGE;
456457
}
457458

459+
// @todo #769 Support search by Zagorski number
458460
String lang = LocaleUtils.getLanguageOrNull(userLocale);
459461
List<SeriesInfoDto> series;
460462
switch (catalogName) {
@@ -544,14 +546,16 @@ protected static void loadErrorsFromDownloadInterceptor(
544546

545547
model.put("series", series);
546548

547-
String michelNumbers = CatalogUtils.toShortForm(series.getMichel().getNumbers());
548-
String scottNumbers = CatalogUtils.toShortForm(series.getScott().getNumbers());
549-
String yvertNumbers = CatalogUtils.toShortForm(series.getYvert().getNumbers());
550-
String gibbonsNumbers = CatalogUtils.toShortForm(series.getGibbons().getNumbers());
549+
String michelNumbers = CatalogUtils.toShortForm(series.getMichel().getNumbers());
550+
String scottNumbers = CatalogUtils.toShortForm(series.getScott().getNumbers());
551+
String yvertNumbers = CatalogUtils.toShortForm(series.getYvert().getNumbers());
552+
String gibbonsNumbers = CatalogUtils.toShortForm(series.getGibbons().getNumbers());
553+
String zagorskiNumbers = CatalogUtils.toShortForm(series.getZagorski().getNumbers());
551554
model.put("michelNumbers", michelNumbers);
552555
model.put("scottNumbers", scottNumbers);
553556
model.put("yvertNumbers", yvertNumbers);
554557
model.put("gibbonsNumbers", gibbonsNumbers);
558+
model.put("zagorskiNumbers", zagorskiNumbers);
555559

556560
boolean isSeriesInCollection =
557561
collectionService.isSeriesInCollection(currentUserId, series.getId());

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,14 @@ public class AddSeriesForm implements AddSeriesDto, HasImageOrImageUrl, Nullable
130130

131131
@Price
132132
private BigDecimal gibbonsPrice;
133+
134+
// @todo #769 /series/add: validate that Zagorski numbers are specified only for stamps
135+
// from USSR/Russia
136+
@CatalogNumbers
137+
private String zagorskiNumbers;
138+
139+
@Price
140+
private BigDecimal zagorskiPrice;
133141

134142
@Size(max = MAX_SERIES_COMMENT_LENGTH, message = "{value.too-long}")
135143
private String comment;

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

Lines changed: 10 additions & 0 deletions
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 getZagorskiNumbers() {
149+
return null;
150+
}
151+
152+
@Override
153+
public BigDecimal getZagorskiPrice() {
154+
return null;
155+
}
156+
147157
@Override
148158
public String getComment() {
149159
return null;

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ public class AddSeriesDbDto {
4747
private BigDecimal gibbonsPrice;
4848
private String gibbonsCurrency;
4949

50+
private BigDecimal zagorskiPrice;
51+
5052
private Integer releaseDay;
5153
private Integer releaseMonth;
5254
private Integer releaseYear;

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,6 @@ public class SeriesFullInfoDto {
4848

4949
private final BigDecimal gibbonsPrice;
5050
private final String gibbonsCurrency;
51+
52+
private final BigDecimal zagorskiPrice;
5153
}

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

Lines changed: 1 addition & 0 deletions
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("zagorski_price", series.getZagorskiPrice());
137138
params.put("comment", series.getComment());
138139
params.put("created_at", series.getCreatedAt());
139140
params.put("created_by", series.getCreatedBy());

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ 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 zagorskiPrice = rs.getBigDecimal("zagorski_price");
130+
129131
LinkEntityDto category =
130132
createLinkEntityDto(rs, "category_id", "category_slug", "category_name");
131133

@@ -150,7 +152,8 @@ public static SeriesFullInfoDto forSeriesFullInfoDto(ResultSet rs, int i) throws
150152
yvertPrice,
151153
yvertCurrency,
152154
gibbonsPrice,
153-
gibbonsCurrency
155+
gibbonsCurrency,
156+
zagorskiPrice
154157
);
155158
}
156159

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,16 @@ public class SeriesServiceImpl implements SeriesService {
6060
private final StampsCatalogService scottCatalogService;
6161
private final StampsCatalogService yvertCatalogService;
6262
private final StampsCatalogService gibbonsCatalogService;
63+
private final StampsCatalogService zagorskiCatalogService;
6364

6465
@Override
6566
@Transactional
6667
@PreAuthorize(HasAuthority.CREATE_SERIES)
67-
@SuppressWarnings({ "PMD.NPathComplexity", "PMD.ModifiedCyclomaticComplexity" })
68+
@SuppressWarnings({
69+
"PMD.NPathComplexity",
70+
"PMD.ModifiedCyclomaticComplexity",
71+
"PMD.ExcessiveMethodLength"
72+
})
6873
public Integer add(AddSeriesDto dto, Integer userId, boolean userCanAddComments) {
6974
Validate.isTrue(dto != null, "DTO must be non null");
7075
Validate.isTrue(dto.getQuantity() != null, "Stamps quantity must be non null");
@@ -108,6 +113,10 @@ public Integer add(AddSeriesDto dto, Integer userId, boolean userCanAddComments)
108113
series.setGibbonsCurrency(Currency.GBP.toString());
109114
}
110115

116+
if (dto.getZagorskiPrice() != null) {
117+
series.setZagorskiPrice(dto.getZagorskiPrice());
118+
}
119+
111120
if (userCanAddComments && dto.getComment() != null) {
112121
Validate.isTrue(
113122
!dto.getComment().trim().isEmpty(),
@@ -150,6 +159,12 @@ public Integer add(AddSeriesDto dto, Integer userId, boolean userCanAddComments)
150159
gibbonsCatalogService.addToSeries(id, gibbonsNumbers);
151160
}
152161

162+
Set<String> zagorskiNumbers = CatalogUtils.parseCatalogNumbers(dto.getZagorskiNumbers());
163+
if (!zagorskiNumbers.isEmpty()) {
164+
zagorskiCatalogService.add(zagorskiNumbers);
165+
zagorskiCatalogService.addToSeries(id, zagorskiNumbers);
166+
}
167+
153168
ImageInfoDto imageInfo = imageService.save(dto.getImage());
154169
Integer imageId = imageInfo.getId();
155170

@@ -261,6 +276,7 @@ public SeriesDto findFullInfoById(Integer seriesId, String lang) {
261276
List<String> scottNumbers = scottCatalogService.findBySeriesId(seriesId);
262277
List<String> yvertNumbers = yvertCatalogService.findBySeriesId(seriesId);
263278
List<String> gibbonsNumbers = gibbonsCatalogService.findBySeriesId(seriesId);
279+
List<String> zagorskiNumbers = zagorskiCatalogService.findBySeriesId(seriesId);
264280

265281
List<Integer> imageIds = imageService.findBySeriesId(seriesId);
266282

@@ -270,6 +286,7 @@ public SeriesDto findFullInfoById(Integer seriesId, String lang) {
270286
scottNumbers,
271287
yvertNumbers,
272288
gibbonsNumbers,
289+
zagorskiNumbers,
273290
imageIds
274291
);
275292
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public interface AddSeriesDto {
4444
String getGibbonsNumbers();
4545
BigDecimal getGibbonsPrice();
4646

47+
String getZagorskiNumbers();
48+
BigDecimal getZagorskiPrice();
49+
4750
String getComment();
4851
MultipartFile getImage();
4952
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public class SeriesDto {
3838

3939
@Getter
4040
private final CatalogInfoDto gibbons;
41+
42+
@Getter
43+
private final CatalogInfoDto zagorski;
4144

4245
@Getter
4346
private final List<Integer> imageIds;
@@ -49,14 +52,16 @@ public SeriesDto(
4952
List<String> scottNumbers,
5053
List<String> yvertNumbers,
5154
List<String> gibbonsNumbers,
55+
List<String> zagorskiNumbers,
5256
List<Integer> imageIds) {
5357

5458
this.info = info;
55-
// CheckStyle: ignore LineLength for next 4 lines
59+
// CheckStyle: ignore LineLength for next 5 lines
5660
this.michel = new CatalogInfoDto(michelNumbers, info.getMichelPrice(), info.getMichelCurrency());
5761
this.scott = new CatalogInfoDto(scottNumbers, info.getScottPrice(), info.getScottCurrency());
5862
this.yvert = new CatalogInfoDto(yvertNumbers, info.getYvertPrice(), info.getYvertCurrency());
5963
this.gibbons = new CatalogInfoDto(gibbonsNumbers, info.getGibbonsPrice(), info.getGibbonsCurrency());
64+
this.zagorski = new CatalogInfoDto(zagorskiNumbers, info.getZagorskiPrice(), null /* unused field currency */);
6065
this.imageIds = imageIds;
6166
}
6267

Lines changed: 6 additions & 0 deletions
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 zagorski_catalog(id, code) VALUES(1, '@existing_zagorski_number@');
6+
INSERT INTO series_zagorski_catalog(series_id, zagorski_id) VALUES(1, 1);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,6 @@
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--zagorski_catalog.xml" relativeToChangelogFile="true" />
4445

4546
</databaseChangeLog>
Lines changed: 46 additions & 0 deletions
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-zagorski_catalog-table" author="php-coder" context="scheme">
9+
10+
<createTable tableName="zagorski_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_zagorski_catalog_code" />
16+
</column>
17+
</createTable>
18+
19+
</changeSet>
20+
21+
<changeSet id="create-series_zagorski_catalog-table" author="php-coder" context="scheme">
22+
23+
<createTable tableName="series_zagorski_catalog">
24+
<column name="series_id" type="INTEGER">
25+
<constraints primaryKey="true" references="series(id)" foreignKeyName="fk_series_zagorski_catalog_series_id" />
26+
</column>
27+
<column name="zagorski_id" type="INTEGER">
28+
<constraints primaryKey="true" references="zagorski_catalog(id)" foreignKeyName="fk_series_zagorski_catalog_zagorski_id" />
29+
</column>
30+
</createTable>
31+
32+
</changeSet>
33+
34+
<changeSet id="add-zagorski_price-field-to-series-field" author="php-coder" context="scheme">
35+
36+
<addColumn tableName="series">
37+
<column name="zagorski_price" type="DECIMAL(19,2)" afterColumn="gibbons_price" />
38+
</addColumn>
39+
40+
</changeSet>
41+
42+
<changeSet id="add-zagorski-numbers-to-series" author="php-coder" context="test-data">
43+
<sqlFile path="../../sql/test-series-with-zagorski-numbers.sql" relativeToChangelogFile="true" />
44+
</changeSet>
45+
46+
</databaseChangeLog>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ t_michel = Michel
118118
t_scott = Scott
119119
t_yvert = Yvert
120120
t_sg = Gibbons
121+
t_zagorski = Zagorski
122+
121123
t_add_comment = Add comment
122124
t_comment = Comment
123125
t_image = Image

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ t_michel = Michel
118118
t_scott = Scott
119119
t_yvert = Yvert
120120
t_sg = Gibbons
121+
t_zagorski = Загорский
121122
t_add_comment = Добавить комментарий
122123
t_comment = Комментарий
123124
t_image = Изображение

src/main/resources/sql/series_dao_queries.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ INSERT \
1616
, yvert_currency \
1717
, gibbons_price \
1818
, gibbons_currency \
19+
, zagorski_price \
1920
, comment \
2021
, created_at \
2122
, created_by \
@@ -38,6 +39,7 @@ VALUES \
3839
, :yvert_currency \
3940
, :gibbons_price \
4041
, :gibbons_currency \
42+
, :zagorski_price \
4143
, :comment \
4244
, :created_at \
4345
, :created_by \
@@ -97,6 +99,7 @@ series.find_full_info_by_id = \
9799
, s.yvert_currency \
98100
, s.gibbons_price \
99101
, s.gibbons_currency \
102+
, s.zagorski_price \
100103
, s.comment \
101104
, s.created_by \
102105
FROM series s \

0 commit comments

Comments
 (0)