Skip to content

Commit 131edc4

Browse files
committed
feat: admin can add numbers in stamps catalogs.
Fix #1339
1 parent 00a9ec8 commit 131edc4

File tree

8 files changed

+69
-4
lines changed

8 files changed

+69
-4
lines changed

NEWS.txt

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- (feature) admin can add a comment to a series
66
- (feature) admin can add a release year to a series
77
- (feature) admin can add a price in Michel, Scott, Yvert, Gibbons, Solovyov, and Zagorski catalogs
8+
- (feature) admin can add numbers in Michel, Scott, Yvert, Gibbons, Solovyov, and Zagorski catalogs
89
- (improvement) on a country info page show the series with an image
910
- (feature) add a condition (MNH/MNHOG/MVLH/CTO/cancelled) to a series sale
1011

src/main/frontend/src/components/AddCatalogNumbersForm.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class AddCatalogNumbersForm extends React.PureComponent {
4747
{
4848
op: 'add',
4949
path: `/${this.state.catalog}_numbers`,
50-
value: this.state.numbers.split(',')
50+
value: this.state.numbers
5151
}
5252
],
5353
{
@@ -64,8 +64,8 @@ class AddCatalogNumbersForm extends React.PureComponent {
6464
const data = response.data;
6565
if (data.hasOwnProperty('fieldErrors')) {
6666
const fieldErrors = [];
67-
if (data.fieldErrors.numbers) {
68-
fieldErrors.push(...data.fieldErrors.numbers);
67+
if (data.fieldErrors.value) {
68+
fieldErrors.push(...data.fieldErrors.value);
6969
}
7070

7171
this.setState({
@@ -143,6 +143,7 @@ class AddCatalogNumbersFormView extends React.PureComponent {
143143
className="form-control"
144144
size="5"
145145
required="required"
146+
placeholder={ `${l10n['t_example'] || 'Example'}: 90-92,117` }
146147
onChange={ handleChangeNumbers } />
147148
</div>
148149
</div>

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

+20-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class RestSeriesController {
5050

5151
// @todo #785 Update series: add integration test
5252
// @todo #785 Update series: add validation for a comment
53+
// @todo #1339 Update series: add validation for catalog numbers
5354
// @todo #1340 Update series: add validation for a price
5455
// @todo #1343 Update series: add validation for a release year
5556
@PatchMapping(SeriesUrl.INFO_SERIES_PAGE)
@@ -75,7 +76,7 @@ public ResponseEntity<Void> updateSeries(
7576
continue;
7677
}
7778

78-
// CheckStyle: ignore LineLength for next 24 lines
79+
// CheckStyle: ignore LineLength for next 42 lines
7980
switch (patch.getPath()) {
8081
case "/comment":
8182
seriesService.addComment(seriesId, patch.getValue());
@@ -101,6 +102,24 @@ public ResponseEntity<Void> updateSeries(
101102
case "/zagorski_price":
102103
seriesService.addPrice(ZAGORSKI, seriesId, patch.bigDecimalValue(), currentUserId);
103104
break;
105+
case "/michel_numbers":
106+
seriesService.addCatalogNumbers(MICHEL, seriesId, patch.getValue(), currentUserId);
107+
break;
108+
case "/scott_numbers":
109+
seriesService.addCatalogNumbers(SCOTT, seriesId, patch.getValue(), currentUserId);
110+
break;
111+
case "/yvert_numbers":
112+
seriesService.addCatalogNumbers(YVERT, seriesId, patch.getValue(), currentUserId);
113+
break;
114+
case "/gibbons_numbers":
115+
seriesService.addCatalogNumbers(GIBBONS, seriesId, patch.getValue(), currentUserId);
116+
break;
117+
case "/solovyov_numbers":
118+
seriesService.addCatalogNumbers(SOLOVYOV, seriesId, patch.getValue(), currentUserId);
119+
break;
120+
case "/zagorski_numbers":
121+
seriesService.addCatalogNumbers(ZAGORSKI, seriesId, patch.getValue(), currentUserId);
122+
break;
104123
default:
105124
// @todo #785 Update series: properly fail on invalid path
106125
break;

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

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public interface SeriesService {
2828
void addComment(Integer seriesId, String comment);
2929
void addReleaseYear(Integer seriesId, Integer year, Integer userId);
3030
void addPrice(StampsCatalog catalog, Integer seriesId, BigDecimal price, Integer userId);
31+
void addCatalogNumbers(StampsCatalog catalog, Integer seriesId, String numbers, Integer userId);
3132
void addImageToSeries(AddImageDto dto, Integer seriesId, Integer userId);
3233
void replaceImage(ReplaceImageDto dto, Integer seriesId, Integer userId);
3334
long countAll();

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

+25
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,31 @@ public void addPrice(StampsCatalog catalog, Integer seriesId, BigDecimal price,
197197
);
198198
}
199199

200+
// @todo #1339 SeriesServiceImpl.addCatalogNumbers(): add unit tests
201+
@Override
202+
@Transactional
203+
@PreAuthorize(HasAuthority.CREATE_SERIES)
204+
// CheckStyle: ignore LineLength for next 1 line
205+
public void addCatalogNumbers(StampsCatalog catalog, Integer seriesId, String numbers, Integer userId) {
206+
Validate.isTrue(seriesId != null, "Series id must be non null");
207+
Validate.isTrue(numbers != null, "Numbers must be non null");
208+
Validate.isTrue(userId != null, "User id must be non null");
209+
210+
seriesDao.markAsModified(seriesId, new Date(), userId);
211+
212+
// CheckStyle: ignore LineLength for next 7 lines
213+
switch (catalog) {
214+
case MICHEL: createCatalogNumbersAndAddToSeries(seriesId, michelCatalogService, numbers); break;
215+
case SCOTT: createCatalogNumbersAndAddToSeries(seriesId, scottCatalogService, numbers); break;
216+
case YVERT: createCatalogNumbersAndAddToSeries(seriesId, yvertCatalogService, numbers); break;
217+
case GIBBONS: createCatalogNumbersAndAddToSeries(seriesId, gibbonsCatalogService, numbers); break;
218+
case SOLOVYOV: createCatalogNumbersAndAddToSeries(seriesId, solovyovCatalogService, numbers); break;
219+
case ZAGORSKI: createCatalogNumbersAndAddToSeries(seriesId, zagorskiCatalogService, numbers); break;
220+
default:
221+
throw new IllegalStateException("Unknown stamps catalog: " + catalog);
222+
}
223+
}
224+
200225
@Override
201226
@Transactional
202227
@PreAuthorize("isAuthenticated()")

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

+3
Original file line numberDiff line numberDiff line change
@@ -229,3 +229,6 @@ t_seller_group = Seller group
229229
# series/import/list.html
230230
t_no_import_requests = No import requests
231231
t_import_requests = import requests
232+
233+
# AddCatalogNumbersForm.js
234+
t_numbers = Numbers

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

+3
Original file line numberDiff line numberDiff line change
@@ -228,3 +228,6 @@ t_seller_group = Группа продавца
228228
# series/import/list.html
229229
t_no_import_requests = Нет запросов на импорт
230230
t_import_requests = запросы на импорт
231+
232+
# AddCatalogNumbersForm.js
233+
t_numbers = Номера

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

+12
Original file line numberDiff line numberDiff line change
@@ -1031,9 +1031,21 @@ <h5 th:text="#{t_add_info_who_selling_series}">Add info about selling/buying thi
10311031
}
10321032
};
10331033
var addCatalogNumbersProps = {
1034+
'url': [[ '__@{${INFO_SERIES_PAGE}(id=${series.id})}__' ]],
10341035
'csrfHeaderName': [[ ${_csrf.headerName} ]],
10351036
'csrfTokenValue': [[ ${_csrf.token} ]],
10361037
'l10n': {
1038+
't_server_error': [[ #{t_server_error} ]],
1039+
't_catalog': [[ #{t_catalog} ]],
1040+
't_michel': [[ #{t_michel} ]],
1041+
't_scott': [[ #{t_scott} ]],
1042+
't_yvert': [[ #{t_yvert} ]],
1043+
't_sg': [[ #{t_sg} ]],
1044+
't_solovyov': [[ #{t_solovyov} ]],
1045+
't_zagorski': [[ #{t_zagorski} ]],
1046+
't_numbers': [[ #{t_numbers} ]],
1047+
't_example': [[ #{t_example} ]],
1048+
't_add': [[ #{t_add} ]]
10371049
}
10381050
};
10391051
+]*/

0 commit comments

Comments
 (0)