Skip to content

Commit 5254bb1

Browse files
committed
Guess Country
Guess Country gh571_prediction_country add guess country fixes after merge fix query cleaning and return String check style check style fixes fixes fixes remarks style add try togglz for link SuggestionController add HasAuthority remarks rename
1 parent 74f8b18 commit 5254bb1

File tree

18 files changed

+156
-5
lines changed

18 files changed

+156
-5
lines changed

src/main/java/ru/mystamps/web/Url.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public final class Url {
5151
public static final String INFO_SERIES_PAGE = "/series/{id}";
5252
public static final String ADD_IMAGE_SERIES_PAGE = "/series/{id}/image";
5353
public static final String SEARCH_SERIES_BY_CATALOG = "/series/search/by_catalog";
54+
public static final String INFO_COUNTRY_SERIES_PAGE = "/suggest/series_country";
5455

5556
public static final String ADD_CATEGORY_PAGE = "/category/add";
5657
public static final String LIST_CATEGORIES_PAGE = "/category/list";
@@ -125,6 +126,7 @@ public static Map<String, String> asMap(boolean serveContentFromSingleHost) {
125126
map.put("INFO_SERIES_PAGE", INFO_SERIES_PAGE);
126127
map.put("ADD_IMAGE_SERIES_PAGE", ADD_IMAGE_SERIES_PAGE);
127128
map.put("SEARCH_SERIES_BY_CATALOG", SEARCH_SERIES_BY_CATALOG);
129+
map.put("INFO_COUNTRY_SERIES_PAGE", INFO_COUNTRY_SERIES_PAGE);
128130
map.put("ADD_CATEGORY_PAGE", ADD_CATEGORY_PAGE);
129131
map.put("INFO_CATEGORY_PAGE", INFO_CATEGORY_PAGE);
130132
map.put("LIST_CATEGORIES_PAGE", LIST_CATEGORIES_PAGE);

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,5 +110,12 @@ public SiteController getSiteController() {
110110
public SitemapController getSitemapController() {
111111
return new SitemapController(servicesConfig.getSeriesService());
112112
}
113+
114+
@Bean
115+
public SuggestionController getSuggestionController() {
116+
return new SuggestionController(
117+
servicesConfig.getCountryService()
118+
);
119+
}
113120

114121
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ public void showForm(
133133
model.addAttribute("countries", countries);
134134

135135
model.addAttribute("years", YEARS);
136+
model.addAttribute("suggestCountryUrl", Url.INFO_COUNTRY_SERIES_PAGE);
136137

137138
AddSeriesForm addSeriesForm = new AddSeriesForm();
138139
addSeriesForm.setPerforated(true);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package ru.mystamps.web.controller;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.springframework.security.access.prepost.PreAuthorize;
5+
import org.springframework.stereotype.Controller;
6+
import org.springframework.web.bind.annotation.GetMapping;
7+
import org.springframework.web.bind.annotation.ResponseBody;
8+
import ru.mystamps.web.Url;
9+
import ru.mystamps.web.controller.converter.annotation.CurrentUser;
10+
import ru.mystamps.web.service.CountryService;
11+
import ru.mystamps.web.support.spring.security.HasAuthority;
12+
13+
@Controller
14+
@RequiredArgsConstructor
15+
@SuppressWarnings({ "PMD.AvoidDuplicateLiterals", "PMD.TooManyMethods", "PMD.GodClass" })
16+
public class SuggestionController {
17+
18+
private final CountryService countryService;
19+
/**
20+
* @author John Shkarin
21+
*/
22+
@ResponseBody
23+
@GetMapping(Url.INFO_COUNTRY_SERIES_PAGE)
24+
@PreAuthorize(HasAuthority.CREATE_SERIES)
25+
public String suggestCountryForUser(@CurrentUser Integer currentUserId) {
26+
return countryService.suggestCountryForUser(currentUserId);
27+
}
28+
29+
}

src/main/java/ru/mystamps/web/dao/CountryDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,6 @@ public interface CountryDao {
3535
List<Object[]> getStatisticsOf(Integer collectionId, String lang);
3636
List<LinkEntityDto> findAllAsLinkEntities(String lang);
3737
LinkEntityDto findOneAsLinkEntity(String slug, String lang);
38+
39+
String suggestCountryForUser(Integer userId);
3840
}

src/main/java/ru/mystamps/web/dao/SeriesDao.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
@SuppressWarnings("PMD.TooManyMethods")
3131
public interface SeriesDao {
3232
Integer add(AddSeriesDbDto series);
33+
3334
void markAsModified(Integer seriesId, Date updateAt, Integer updatedBy);
3435
List<SitemapInfoDto> findAllForSitemap();
3536
List<SeriesInfoDto> findLastAdded(int quantity, String lang);

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

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ public class JdbcCountryDao implements CountryDao {
7676

7777
@Value("${country.find_country_link_info_by_slug}")
7878
private String findCountryLinkEntityBySlugSql;
79+
80+
@Value("${country.find_last_country_by_id}")
81+
private String findLastCountryByIdSql;
82+
83+
@Value("${country.find_popular_country}")
84+
private String findPopularCountrySql;
7985

8086
@Override
8187
public Integer add(AddCountryDbDto country) {
@@ -206,5 +212,26 @@ public LinkEntityDto findOneAsLinkEntity(String slug, String lang) {
206212
return null;
207213
}
208214
}
209-
215+
216+
@Override
217+
public String suggestCountryForUser(Integer userId) {
218+
219+
try {
220+
return jdbcTemplate.queryForObject(
221+
findLastCountryByIdSql,
222+
Collections.singletonMap("created_by", userId),
223+
String.class);
224+
} catch (EmptyResultDataAccessException ignored) {
225+
try {
226+
return jdbcTemplate.queryForObject(
227+
findPopularCountrySql,
228+
Collections.<String, Object>emptyMap(),
229+
String.class
230+
);
231+
232+
} catch (EmptyResultDataAccessException ex) {
233+
return null;
234+
}
235+
}
236+
}
210237
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323
import ru.mystamps.web.dao.dto.LinkEntityDto;
2424
import ru.mystamps.web.service.dto.AddCountryDto;
2525

26+
@SuppressWarnings("PMD.TooManyMethods")
2627
public interface CountryService {
2728
String add(AddCountryDto dto, Integer userId);
29+
String suggestCountryForUser(Integer userId);
2830
List<LinkEntityDto> findAllAsLinkEntities(String lang);
2931
LinkEntityDto findOneAsLinkEntity(String slug, String lang);
3032
long countAll();

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,5 +162,15 @@ public List<Object[]> getStatisticsOf(Integer collectionId, String lang) {
162162

163163
return countryDao.getStatisticsOf(collectionId, lang);
164164
}
165-
165+
166+
/**
167+
* @author Shkarin John
168+
*/
169+
@Override
170+
@Transactional(readOnly = true)
171+
public String suggestCountryForUser(Integer userId) {
172+
Validate.isTrue(userId != null, "UserId must be non null");
173+
174+
return countryDao.suggestCountryForUser(userId);
175+
}
166176
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
@SuppressWarnings("PMD.TooManyMethods")
3232
public interface SeriesService {
3333
Integer add(AddSeriesDto dto, Integer userId, boolean userCanAddComments);
34+
3435
void addImageToSeries(AddImageDto dto, Integer seriesId, Integer userId);
3536
long countAll();
3637
long countAllStamps();

0 commit comments

Comments
 (0)