Skip to content

Commit fea5123

Browse files
committed
task: implement extraction and persistence of alternative price and currency during a series import.
Part of #1230
1 parent 3f7c24c commit fea5123

16 files changed

+195
-5
lines changed

src/main/java/ru/mystamps/web/feature/series/importing/RawParsedDataDto.java

+2
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,6 @@ public class RawParsedDataDto {
3434
private final String sellerUrl;
3535
private final String price;
3636
private final String currency;
37+
private final String altPrice;
38+
private final String altCurrency;
3739
}

src/main/java/ru/mystamps/web/feature/series/importing/SeriesExtractedInfo.java

+2
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,6 @@ public class SeriesExtractedInfo {
3939
private final String sellerUrl;
4040
private final BigDecimal price;
4141
private final String currency;
42+
private final BigDecimal altPrice;
43+
private final String altCurrency;
4244
}

src/main/java/ru/mystamps/web/feature/series/importing/SeriesImportServiceImpl.java

+8
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,14 @@ public void saveParsedData(Integer requestId, SeriesExtractedInfo seriesInfo, St
221221
seriesSalesParsedData.setCurrency(seriesInfo.getCurrency());
222222
}
223223

224+
// @todo #1230 SeriesImportServiceImpl.saveParsedData():
225+
// add unit test for alternative price and currency
226+
BigDecimal altPrice = seriesInfo.getAltPrice();
227+
if (altPrice != null) {
228+
seriesSalesParsedData.setAltPrice(altPrice);
229+
seriesSalesParsedData.setAltCurrency(seriesInfo.getAltCurrency());
230+
}
231+
224232
// IMPORTANT: don't add code that modifies database above this line!
225233
// @todo #684 Series import: add integration test
226234
// for the case when parsed value don't match database

src/main/java/ru/mystamps/web/feature/series/importing/SeriesInfoExtractorServiceImpl.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ public SeriesExtractedInfo extract(String pageUrl, RawParsedDataDto data) {
106106
String sellerUrl = extractSellerUrl(sellerId, data.getSellerUrl());
107107
BigDecimal price = extractPrice(data.getPrice());
108108
String currency = extractCurrency(data.getCurrency());
109+
BigDecimal altPrice = extractPrice(data.getAltPrice());
110+
String altCurrency = extractCurrency(data.getAltCurrency());
109111

110112
return new SeriesExtractedInfo(
111113
categoryIds,
@@ -119,7 +121,9 @@ public SeriesExtractedInfo extract(String pageUrl, RawParsedDataDto data) {
119121
sellerName,
120122
sellerUrl,
121123
price,
122-
currency
124+
currency,
125+
altPrice,
126+
altCurrency
123127
);
124128
}
125129

src/main/java/ru/mystamps/web/feature/series/importing/event/DownloadingSucceededEventListener.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,9 @@ public void onApplicationEvent(DownloadingSucceeded event) {
9696
info.getSellerName(),
9797
info.getSellerUrl(),
9898
info.getPrice(),
99-
info.getCurrency()
99+
info.getCurrency(),
100+
info.getAltPrice(),
101+
info.getAltCurrency()
100102
);
101103

102104
SeriesExtractedInfo seriesInfo = extractorService.extract(event.getUrl(), data);

src/main/java/ru/mystamps/web/feature/series/importing/extractor/JsoupSiteParser.java

+26
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public class JsoupSiteParser implements SiteParser {
5656
private String priceLocator;
5757
private String currencyLocator;
5858
private String currencyValue;
59+
private String altPriceLocator;
60+
private String altCurrencyLocator;
5961

6062
// @todo #975 SiteParserServiceImpl: add unit tests for constructor
6163
public JsoupSiteParser(SiteParserConfiguration cfg) {
@@ -71,6 +73,8 @@ public JsoupSiteParser(SiteParserConfiguration cfg) {
7173
priceLocator = cfg.getPriceLocator();
7274
currencyLocator = cfg.getCurrencyLocator();
7375
currencyValue = cfg.getCurrencyValue();
76+
altPriceLocator = cfg.getAltPriceLocator();
77+
altCurrencyLocator = cfg.getAltCurrencyLocator();
7478
}
7579

7680
/**
@@ -99,6 +103,8 @@ public SeriesInfo parse(String htmlPage) {
99103
info.setSellerUrl(extractSellerUrl(body));
100104
info.setPrice(extractPrice(body));
101105
info.setCurrency(extractCurrency(body));
106+
info.setAltPrice(extractAltPrice(body));
107+
info.setAltCurrency(extractAltCurrency(body));
102108

103109
return info;
104110
}
@@ -241,6 +247,26 @@ protected String extractCurrency(Element body) {
241247
return currencyValue;
242248
}
243249

250+
protected String extractAltPrice(Element body) {
251+
String price = getTextOfTheFirstElement(body, altPriceLocator);
252+
if (price == null) {
253+
return null;
254+
}
255+
256+
LOG.debug("Extracted alt price: '{}'", price);
257+
return price;
258+
}
259+
260+
protected String extractAltCurrency(Element body) {
261+
String currency = getTextOfTheFirstElement(body, altCurrencyLocator);
262+
if (currency == null) {
263+
return null;
264+
}
265+
266+
LOG.debug("Extracted alt currency: '{}'", currency);
267+
return currency;
268+
}
269+
244270
private static Element getFirstElement(Element body, String locator) {
245271
if (locator == null) {
246272
return null;

src/main/java/ru/mystamps/web/feature/series/importing/extractor/SeriesInfo.java

+2
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public class SeriesInfo {
4141
private String sellerUrl;
4242
private String price;
4343
private String currency;
44+
private String altPrice;
45+
private String altCurrency;
4446

4547
/**
4648
* Check whether any info about a series is available.

src/main/java/ru/mystamps/web/feature/series/importing/extractor/SiteParserConfiguration.java

+4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public class SiteParserConfiguration {
4646
private String priceLocator;
4747
private String currencyLocator;
4848
private String currencyValue;
49+
private String altPriceLocator;
50+
private String altCurrencyLocator;
4951

5052
/* default */ SiteParserConfiguration(Map<String, String> params) {
5153
name = params.get("name");
@@ -62,6 +64,8 @@ public class SiteParserConfiguration {
6264
// @todo #979 Add integration test for import of series with currency-locator
6365
currencyLocator = params.get("currency-locator");
6466
currencyValue = params.get("currency-value");
67+
altPriceLocator = params.get("alt-price-locator");
68+
altCurrencyLocator = params.get("alt-currency-locator");
6569
}
6670

6771
}

src/main/java/ru/mystamps/web/feature/series/importing/sale/JdbcSeriesSalesImportDao.java

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ public void addParsedData(Integer requestId, SeriesSalesParsedDataDbDto data) {
4848
params.put("seller_url", data.getSellerUrl());
4949
params.put("price", data.getPrice());
5050
params.put("currency", data.getCurrency());
51+
params.put("alt_price", data.getAltPrice());
52+
params.put("alt_currency", data.getAltCurrency());
5153
params.put("created_at", data.getCreatedAt());
5254
params.put("updated_at", data.getUpdatedAt());
5355

src/main/java/ru/mystamps/web/feature/series/importing/sale/SeriesSalesImportServiceImpl.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@ public SeriesSaleExtractedInfo downloadAndParse(String url) {
7575
info.getSellerName(),
7676
info.getSellerUrl(),
7777
info.getPrice(),
78-
info.getCurrency()
78+
info.getCurrency(),
79+
info.getAltPrice(),
80+
info.getAltCurrency()
7981
);
8082

8183
// CheckStyle: ignore LineLength for next 1 line

src/main/java/ru/mystamps/web/feature/series/importing/sale/SeriesSalesParsedDataDbDto.java

+2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public class SeriesSalesParsedDataDbDto {
3434
private String sellerUrl;
3535
private BigDecimal price;
3636
private String currency;
37+
private BigDecimal altPrice;
38+
private String altCurrency;
3739
private Date createdAt;
3840
private Date updatedAt;
3941

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

+1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@
66
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
77

88
<include file="0.4.3/2020-03-07--site_parser_params_value_length.xml" relativeToChangelogFile="true" />
9+
<include file="0.4.3/2020-03-08--add_alt_price_to_series_sales_import_parsed_data.xml" relativeToChangelogFile="true" />
910

1011
</databaseChangeLog>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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="add-alt-price-to-series_sales_import_parsed_data" author="php-coder" context="scheme">
9+
10+
<addColumn tableName="series_sales_import_parsed_data">
11+
<column name="alt_price" type="DECIMAL(19,2)" afterColumn="currency" />
12+
<column name="alt_currency" type="CHAR(3)" afterColumn="alt_price" />
13+
</addColumn>
14+
15+
</changeSet>
16+
17+
</databaseChangeLog>

src/main/resources/sql/series_import_request_dao_queries.properties

+4
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ INSERT \
152152
, seller_name \
153153
, price \
154154
, currency \
155+
, alt_price \
156+
, alt_currency \
155157
, created_at \
156158
, updated_at \
157159
) \
@@ -163,6 +165,8 @@ VALUES \
163165
, :seller_name \
164166
, :price \
165167
, :currency \
168+
, :alt_price \
169+
, :alt_currency \
166170
, :created_at \
167171
, :updated_at \
168172
)

0 commit comments

Comments
 (0)