Skip to content

Commit 01dca27

Browse files
committed
feat: add preliminary support for hidden images.
Fix #1356
1 parent 97a9322 commit 01dca27

File tree

18 files changed

+93
-23
lines changed

18 files changed

+93
-23
lines changed

NEWS.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
0.x (upcoming release)
22
- (feature) a series can be marked as a similar to another one
33
- (feature) series images can be replaced
4+
- (feature) add preliminary support for hidden images
45

56
0.4.3
67
- (feature) add support for Ukrainian hryvnia

src/main/java/ru/mystamps/web/feature/image/ImageDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@ public interface ImageDao {
2424
void replace(Integer id, String type, String filename);
2525
void addToSeries(Integer seriesId, Integer imageId);
2626
ImageInfoDto findById(Integer imageId);
27-
List<Integer> findBySeriesId(Integer seriesId);
27+
List<Integer> findBySeriesId(Integer seriesId, boolean hidden);
2828
}

src/main/java/ru/mystamps/web/feature/image/ImageService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ public interface ImageService {
2727
ImageDto get(Integer imageId);
2828
ImageDto getOrCreatePreview(Integer imageId);
2929
void addToSeries(Integer seriesId, Integer imageId);
30-
List<Integer> findBySeriesId(Integer seriesId);
30+
List<Integer> findBySeriesId(Integer seriesId, boolean hidden);
3131
void removeIfPossible(ImageInfoDto imageInfo);
3232
}

src/main/java/ru/mystamps/web/feature/image/ImageServiceImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,10 +184,10 @@ public void addToSeries(Integer seriesId, Integer imageId) {
184184

185185
@Override
186186
@Transactional(readOnly = true)
187-
public List<Integer> findBySeriesId(Integer seriesId) {
187+
public List<Integer> findBySeriesId(Integer seriesId, boolean hidden) {
188188
Validate.isTrue(seriesId != null, "Series id must be non null");
189189

190-
return imageDao.findBySeriesId(seriesId);
190+
return imageDao.findBySeriesId(seriesId, hidden);
191191
}
192192

193193
@Override

src/main/java/ru/mystamps/web/feature/image/JdbcImageDao.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,14 @@ public ImageInfoDto findById(Integer imageId) {
115115
}
116116

117117
@Override
118-
public List<Integer> findBySeriesId(Integer seriesId) {
118+
public List<Integer> findBySeriesId(Integer seriesId, boolean hidden) {
119+
Map<String, Object> params = new HashMap<>();
120+
params.put("series_id", seriesId);
121+
params.put("hidden", hidden);
122+
119123
return jdbcTemplate.queryForList(
120124
findBySeriesIdSql,
121-
Collections.singletonMap("series_id", seriesId),
125+
params,
122126
Integer.class
123127
);
124128
}

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,10 @@ public String showInfo(
214214
}
215215

216216
String lang = LocaleUtils.getLanguageOrNull(userLocale);
217-
SeriesDto series = seriesService.findFullInfoById(seriesId, lang);
217+
boolean userCanSeeHiddenImages = SecurityContextUtils.hasAuthority(
218+
Authority.VIEW_HIDDEN_IMAGES
219+
);
220+
SeriesDto series = seriesService.findFullInfoById(seriesId, lang, userCanSeeHiddenImages);
218221
if (series == null) {
219222
response.sendError(HttpServletResponse.SC_NOT_FOUND);
220223
return null;
@@ -363,7 +366,10 @@ public String processImage(
363366
}
364367

365368
String lang = LocaleUtils.getLanguageOrNull(userLocale);
366-
SeriesDto series = seriesService.findFullInfoById(seriesId, lang);
369+
boolean userCanSeeHiddenImages = SecurityContextUtils.hasAuthority(
370+
Authority.VIEW_HIDDEN_IMAGES
371+
);
372+
SeriesDto series = seriesService.findFullInfoById(seriesId, lang, userCanSeeHiddenImages);
367373
if (series == null) {
368374
response.sendError(HttpServletResponse.SC_NOT_FOUND);
369375
return null;
@@ -434,7 +440,14 @@ public String addToCollection(
434440

435441
if (result.hasErrors()) {
436442
String lang = LocaleUtils.getLanguageOrNull(userLocale);
437-
SeriesDto series = seriesService.findFullInfoById(seriesId, lang);
443+
boolean userCanSeeHiddenImages = SecurityContextUtils.hasAuthority(
444+
Authority.VIEW_HIDDEN_IMAGES
445+
);
446+
SeriesDto series = seriesService.findFullInfoById(
447+
seriesId,
448+
lang,
449+
userCanSeeHiddenImages
450+
);
438451
if (series == null) {
439452
response.sendError(HttpServletResponse.SC_NOT_FOUND);
440453
return null;
@@ -511,7 +524,10 @@ public String processAskForm(
511524
}
512525

513526
String lang = LocaleUtils.getLanguageOrNull(userLocale);
514-
SeriesDto series = seriesService.findFullInfoById(seriesId, lang);
527+
boolean userCanSeeHiddenImages = SecurityContextUtils.hasAuthority(
528+
Authority.VIEW_HIDDEN_IMAGES
529+
);
530+
SeriesDto series = seriesService.findFullInfoById(seriesId, lang, userCanSeeHiddenImages);
515531
if (series == null) {
516532
response.sendError(HttpServletResponse.SC_NOT_FOUND);
517533
return null;

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ public class SeriesDto {
4646
@Getter
4747
private final List<Integer> imageIds;
4848

49+
@Getter
50+
private final List<Integer> hiddenImageIds;
51+
4952
@SuppressWarnings({ "checkstyle:parameternumber", "PMD.ExcessiveParameterList" })
5053
public SeriesDto(
5154
SeriesFullInfoDto info,
@@ -55,7 +58,8 @@ public SeriesDto(
5558
List<String> gibbonsNumbers,
5659
List<String> solovyovNumbers,
5760
List<String> zagorskiNumbers,
58-
List<Integer> imageIds) {
61+
List<Integer> imageIds,
62+
List<Integer> hiddenImageIds) {
5963

6064
this.info = info;
6165
this.michel = new CatalogInfoDto(michelNumbers, info.getMichelPrice());
@@ -65,6 +69,7 @@ public SeriesDto(
6569
this.solovyov = new CatalogInfoDto(solovyovNumbers, info.getSolovyovPrice());
6670
this.zagorski = new CatalogInfoDto(zagorskiNumbers, info.getZagorskiPrice());
6771
this.imageIds = imageIds;
72+
this.hiddenImageIds = hiddenImageIds;
6873
}
6974

7075
public Integer getId() {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public interface SeriesService {
3333
boolean isSeriesExist(Integer seriesId);
3434
Integer findQuantityById(Integer seriesId);
3535

36-
SeriesDto findFullInfoById(Integer seriesId, String lang);
36+
SeriesDto findFullInfoById(Integer seriesId, String lang, boolean userCanSeeHiddenImages);
3737

3838
List<SeriesInfoDto> findByMichelNumber(String michelNumberCode, String lang);
3939
List<SeriesInfoDto> findByScottNumber(String scottNumberCode, String lang);

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,11 @@ public Integer findQuantityById(Integer seriesId) {
200200

201201
@Override
202202
@Transactional(readOnly = true)
203-
public SeriesDto findFullInfoById(Integer seriesId, String lang) {
203+
public SeriesDto findFullInfoById(
204+
Integer seriesId,
205+
String lang,
206+
boolean userCanSeeHiddenImages) {
207+
204208
Validate.isTrue(seriesId != null, "Series id must be non null");
205209

206210
SeriesFullInfoDto seriesBaseInfo = seriesDao.findByIdAsSeriesFullInfo(seriesId, lang);
@@ -215,7 +219,13 @@ public SeriesDto findFullInfoById(Integer seriesId, String lang) {
215219
List<String> solovyovNumbers = solovyovCatalogService.findBySeriesId(seriesId);
216220
List<String> zagorskiNumbers = zagorskiCatalogService.findBySeriesId(seriesId);
217221

218-
List<Integer> imageIds = imageService.findBySeriesId(seriesId);
222+
List<Integer> imageIds = imageService.findBySeriesId(seriesId, false);
223+
224+
// @todo #1356 SeriesServiceImpl.findFullInfoById(): add unit test for hidden images
225+
List<Integer> hiddenImageIds = Collections.emptyList();
226+
if (userCanSeeHiddenImages) {
227+
hiddenImageIds = imageService.findBySeriesId(seriesId, true);
228+
}
219229

220230
return new SeriesDto(
221231
seriesBaseInfo,
@@ -225,7 +235,8 @@ public SeriesDto findFullInfoById(Integer seriesId, String lang) {
225235
gibbonsNumbers,
226236
solovyovNumbers,
227237
zagorskiNumbers,
228-
imageIds
238+
imageIds,
239+
hiddenImageIds
229240
);
230241
}
231242

src/main/java/ru/mystamps/web/support/spring/security/Authority.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public final class Authority {
4040
public static final GrantedAuthority UPDATE_COLLECTION = new SimpleGrantedAuthority(StringAuthority.UPDATE_COLLECTION);
4141
public static final GrantedAuthority VIEW_ANY_ESTIMATION = new SimpleGrantedAuthority(StringAuthority.VIEW_ANY_ESTIMATION);
4242
public static final GrantedAuthority VIEW_DAILY_STATS = new SimpleGrantedAuthority(StringAuthority.VIEW_DAILY_STATS);
43+
public static final GrantedAuthority VIEW_HIDDEN_IMAGES = new SimpleGrantedAuthority(StringAuthority.VIEW_HIDDEN_IMAGES);
4344
public static final GrantedAuthority VIEW_SERIES_SALES = new SimpleGrantedAuthority(StringAuthority.VIEW_SERIES_SALES);
4445
public static final GrantedAuthority VIEW_SITE_EVENTS = new SimpleGrantedAuthority(StringAuthority.VIEW_SITE_EVENTS);
4546

0 commit comments

Comments
 (0)