Skip to content

Commit 0acabfc

Browse files
committed
Import series: create seller if it hasn't been found in database.
Addressed to #695
1 parent 9360f6f commit 0acabfc

24 files changed

+368
-25
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ public SeriesImportService getSeriesImportService() {
181181
getSeriesSalesService(),
182182
getSeriesSalesImportService(),
183183
getSeriesInfoExtractorService(),
184+
getTransactionParticipantService(),
184185
eventPublisher
185186
);
186187
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040

4141
import ru.mystamps.web.Url;
4242
import ru.mystamps.web.controller.converter.annotation.CurrentUser;
43+
import ru.mystamps.web.controller.dto.ImportSellerForm;
4344
import ru.mystamps.web.controller.dto.ImportSeriesForm;
4445
import ru.mystamps.web.controller.dto.ImportSeriesSalesForm;
4546
import ru.mystamps.web.controller.dto.RequestImportForm;
@@ -141,6 +142,11 @@ public String showRequestAndImportSeriesForm(
141142
seriesSaleForm.setPrice(seriesSale.getPrice());
142143
seriesSaleForm.setCurrency(seriesSale.getCurrency());
143144

145+
ImportSellerForm sellerForm = new ImportSellerForm();
146+
sellerForm.setName(seriesSale.getSellerName());
147+
sellerForm.setUrl(seriesSale.getSellerUrl());
148+
149+
form.setSeller(sellerForm);
144150
form.setSeriesSale(seriesSaleForm);
145151

146152
if (seriesSale.getSellerId() != null) {
@@ -213,6 +219,7 @@ public String processImportSeriesForm(
213219

214220
Integer seriesId = seriesImportService.addSeries(
215221
form,
222+
form.getSeller(),
216223
seriesSaleForm,
217224
requestId,
218225
currentUserId

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,27 @@ public void seriesInfoWithExistingSeller(HttpServletResponse response) throws IO
9090
);
9191
}
9292

93+
@GetMapping("/test/valid/series-info/new-seller")
94+
public void seriesInfoWithNewSeller(HttpServletResponse response) throws IOException {
95+
response.setContentType("text/html");
96+
response.setCharacterEncoding("UTF-8");
97+
response.getWriter().println(
98+
"<!DOCTYPE html>"
99+
+ "<html>"
100+
+ "<head>"
101+
+ "<title>Series info (new seller)</title>"
102+
+ "</head>"
103+
+ "<body>"
104+
// CheckStyle: ignore LineLength for next 2 lines
105+
+ "Image: <a id=\"series-image-link-1\" href=\"/image/1\">series image</a><br />"
106+
+ "Seller: <a id=\"test-seller\" href=\"http://example.com/lando-livianus\">Lando Livianus</a><br />"
107+
+ "Price: <span id=\"test-price\">320.5</span> RUB<br />"
108+
// this is needed to simplify an integration test
109+
// (required fields "category" and "quantity" will be filled automatically)
110+
+ "Info: <span class=\"dl-horizontal\">Спорт, 7 марок</span>"
111+
+ "</body>"
112+
+ "</html>"
113+
);
114+
}
115+
93116
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* Copyright (C) 2009-2018 Slava Semushin <[email protected]>
3+
*
4+
* This program is free software; you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation; either version 2 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* This program is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU General Public License
15+
* along with this program; if not, write to the Free Software
16+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17+
*/
18+
package ru.mystamps.web.controller.dto;
19+
20+
import lombok.Getter;
21+
import lombok.Setter;
22+
23+
import ru.mystamps.web.service.dto.AddParticipantDto;
24+
25+
@Getter
26+
@Setter
27+
public class ImportSellerForm implements AddParticipantDto {
28+
29+
// @todo #695 /series/import/request/{id}(seller.name): trim empty values to null
30+
// @todo #695 /series/import/request/{id}(seller.name): add validation against short values
31+
// @todo #695 /series/import/request/{id}(seller.name): add validation against long values
32+
private String name;
33+
34+
// @todo #695 /series/import/request/{id}(seller.url): trim empty values to null
35+
// @todo #695 /series/import/request/{id}(seller.url): add validation for valid url
36+
// @todo #695 /series/import/request/{id}(seller.url): add validation against long values
37+
private String url;
38+
39+
@Override
40+
public Integer getGroupId() {
41+
return null;
42+
}
43+
44+
@Override
45+
public Boolean getBuyer() {
46+
return Boolean.FALSE;
47+
}
48+
49+
@Override
50+
public Boolean getSeller() {
51+
return Boolean.TRUE;
52+
}
53+
54+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ public class ImportSeriesForm implements AddSeriesDto, NullableImageUrl {
8585
@NotNull
8686
private MultipartFile downloadedImage;
8787

88+
@Valid
89+
private ImportSellerForm seller;
90+
8891
@Valid
8992
private ImportSeriesSalesForm seriesSale;
9093

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@
3030
import ru.mystamps.web.dao.dto.Currency;
3131
import ru.mystamps.web.service.dto.AddSeriesSalesDto;
3232

33+
// @todo #695 /series/import/request/{id}: seller's name and url are required when sellerId is empty
3334
// @todo #695 /series/import/request/{id}(seriesSale):
3435
// add integration test for validation of required fields
3536
@Getter
3637
@Setter
3738
public class ImportSeriesSalesForm implements AddSeriesSalesDto {
3839

39-
@NotNull
4040
private Integer sellerId;
4141

4242
@NotNull

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
@RequiredArgsConstructor
2727
public class SeriesSaleParsedDataDto {
2828
private final Integer sellerId;
29+
private final String sellerName;
30+
private final String sellerUrl;
2931
private final BigDecimal price;
3032
private final Currency currency;
3133
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
@ToString(exclude = { "createdAt", "updatedAt" })
3030
public class SeriesSalesParsedDataDbDto {
3131
private Integer sellerId;
32+
private String sellerName;
33+
private String sellerUrl;
3234
private BigDecimal price;
3335
private String currency;
3436
private Date createdAt;
@@ -37,7 +39,9 @@ public class SeriesSalesParsedDataDbDto {
3739
// they aren't useless
3840
@SuppressWarnings("PMD.UselessParentheses")
3941
public boolean hasAtLeastOneFieldFilled() {
40-
return sellerId != null || (price != null && currency != null);
42+
return sellerId != null
43+
|| (sellerName != null && sellerUrl != null)
44+
|| (price != null && currency != null);
4145
}
4246

4347
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ public void addParsedData(Integer requestId, SeriesSalesParsedDataDbDto data) {
5252
Map<String, Object> params = new HashMap<>();
5353
params.put("request_id", requestId);
5454
params.put("seller_id", data.getSellerId());
55+
params.put("seller_name", data.getSellerName());
56+
params.put("seller_url", data.getSellerUrl());
5557
params.put("price", data.getPrice());
5658
params.put("currency", data.getCurrency());
5759
params.put("created_at", data.getCreatedAt());

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,10 +306,12 @@ public static SeriesSaleParsedDataDto forSeriesSaleParsedDataDto(ResultSet rs, i
306306
throws SQLException {
307307

308308
Integer sellerId = JdbcUtils.getInteger(rs, "seller_id");
309+
String sellerName = rs.getString("seller_name");
310+
String sellerUrl = rs.getString("seller_url");
309311
BigDecimal price = rs.getBigDecimal("price");
310312
Currency currency = JdbcUtils.getCurrency(rs, "currency");
311313

312-
return new SeriesSaleParsedDataDto(sellerId, price, currency);
314+
return new SeriesSaleParsedDataDto(sellerId, sellerName, sellerUrl, price, currency);
313315
}
314316

315317
public static ImportRequestInfo forImportRequestInfo(ResultSet rs, int unused)

0 commit comments

Comments
 (0)