Skip to content

Commit 57bc795

Browse files
committed
UserServiceImpl.registerUser(): port to JDBC.
Addressed to #120 No functional changes.
1 parent 220d1fc commit 57bc795

File tree

9 files changed

+145
-56
lines changed

9 files changed

+145
-56
lines changed

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
import org.springframework.mail.javamail.JavaMailSender;
2626
import org.springframework.scheduling.annotation.EnableAsync;
2727

28-
// CheckStyle: ignore AvoidStarImportCheck for next 2 lines
29-
import ru.mystamps.web.dao.*; // NOPMD: UnusedImports
28+
import ru.mystamps.web.dao.ImageDao;
29+
// CheckStyle: ignore AvoidStarImportCheck for next 1 line
3030
import ru.mystamps.web.service.*; // NOPMD: UnusedImports
3131
import ru.mystamps.web.support.spring.security.SecurityConfig;
3232

@@ -40,9 +40,6 @@ public class ServicesConfig {
4040
@Autowired
4141
private SecurityConfig securityConfig;
4242

43-
@Autowired
44-
private UserDao userDao;
45-
4643
@Autowired
4744
private StrategiesConfig strategiesConfig;
4845

@@ -132,7 +129,6 @@ public SiteService getSiteService() {
132129
@Bean
133130
public UserService getUserService() {
134131
return new UserServiceImpl(
135-
userDao,
136132
daoConfig.getJdbcUserDao(),
137133
getUsersActivationService(),
138134
getCollectionService(),

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
*/
1818
package ru.mystamps.web.dao;
1919

20+
import ru.mystamps.web.dao.dto.AddUserDbDto;
2021
import ru.mystamps.web.dao.dto.UserDetails;
2122

2223
public interface JdbcUserDao {
2324
long countByLogin(String login);
2425
UserDetails findUserDetailsByLogin(String login);
26+
Integer add(AddUserDbDto user);
2527
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright (C) 2009-2016 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.dao.dto;
19+
20+
import java.util.Date;
21+
22+
import lombok.Getter;
23+
import lombok.Setter;
24+
import lombok.ToString;
25+
26+
import static ru.mystamps.web.dao.dto.UserDetails.Role;
27+
28+
@Getter
29+
@Setter
30+
@ToString(exclude = {"registeredAt", "activatedAt", "hash"})
31+
public class AddUserDbDto {
32+
private String login;
33+
private Role role;
34+
private String name;
35+
private String email;
36+
private Date registeredAt;
37+
private Date activatedAt;
38+
private String hash;
39+
}

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

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,22 @@
1818
package ru.mystamps.web.dao.impl;
1919

2020
import java.util.Collections;
21+
import java.util.HashMap;
22+
import java.util.Map;
23+
24+
import org.apache.commons.lang3.Validate;
2125

2226
import org.springframework.beans.factory.annotation.Value;
2327
import org.springframework.dao.EmptyResultDataAccessException;
28+
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
2429
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
30+
import org.springframework.jdbc.support.GeneratedKeyHolder;
31+
import org.springframework.jdbc.support.KeyHolder;
2532

2633
import lombok.RequiredArgsConstructor;
2734

2835
import ru.mystamps.web.dao.JdbcUserDao;
36+
import ru.mystamps.web.dao.dto.AddUserDbDto;
2937
import ru.mystamps.web.dao.dto.UserDetails;
3038

3139
@RequiredArgsConstructor
@@ -39,6 +47,9 @@ public class JdbcUserDaoImpl implements JdbcUserDao {
3947
@Value("${user.find_user_details_by_login}")
4048
private String findUserDetailsByLoginSql;
4149

50+
@Value("${user.create}")
51+
private String addUserSql;
52+
4253
@Override
4354
public long countByLogin(String login) {
4455
return jdbcTemplate.queryForObject(
@@ -61,4 +72,32 @@ public UserDetails findUserDetailsByLogin(String login) {
6172
}
6273
}
6374

75+
@Override
76+
public Integer add(AddUserDbDto user) {
77+
Map<String, Object> params = new HashMap<>();
78+
params.put("login", user.getLogin());
79+
params.put("role", String.valueOf(user.getRole()));
80+
params.put("name", user.getName());
81+
params.put("email", user.getEmail());
82+
params.put("registered_at", user.getRegisteredAt());
83+
params.put("activated_at", user.getActivatedAt());
84+
params.put("hash", user.getHash());
85+
86+
KeyHolder holder = new GeneratedKeyHolder();
87+
88+
int affected = jdbcTemplate.update(
89+
addUserSql,
90+
new MapSqlParameterSource(params),
91+
holder
92+
);
93+
94+
Validate.validState(
95+
affected == 1,
96+
"Unexpected number of affected rows after creation of user: %d",
97+
affected
98+
);
99+
100+
return Integer.valueOf(holder.getKey().intValue());
101+
}
102+
64103
}

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,18 @@
3232
import lombok.RequiredArgsConstructor;
3333

3434
import ru.mystamps.web.dao.JdbcUserDao;
35-
import ru.mystamps.web.dao.UserDao;
35+
import ru.mystamps.web.dao.dto.AddUserDbDto;
3636
import ru.mystamps.web.dao.dto.UserDetails;
3737
import ru.mystamps.web.dao.dto.UsersActivationDto;
38-
import ru.mystamps.web.entity.User;
3938
import ru.mystamps.web.service.dto.ActivateAccountDto;
4039

41-
import static ru.mystamps.web.entity.User.Role.USER;
40+
import static ru.mystamps.web.dao.dto.UserDetails.Role.USER;
4241

4342
@RequiredArgsConstructor
4443
public class UserServiceImpl implements UserService {
4544

4645
private static final Logger LOG = LoggerFactory.getLogger(UserServiceImpl.class);
4746

48-
private final UserDao userDao;
4947
private final JdbcUserDao jdbcUserDao;
5048
private final UsersActivationService usersActivationService;
5149
private final CollectionService collectionService;
@@ -84,7 +82,7 @@ public void registerUser(ActivateAccountDto dto) {
8482

8583
Date now = new Date();
8684

87-
User user = new User();
85+
AddUserDbDto user = new AddUserDbDto();
8886
user.setLogin(login);
8987
user.setRole(USER);
9088
user.setName(finalName);
@@ -93,12 +91,12 @@ public void registerUser(ActivateAccountDto dto) {
9391
user.setActivatedAt(now);
9492
user.setHash(hash);
9593

96-
user = userDao.save(user);
94+
Integer id = jdbcUserDao.add(user);
9795
usersActivationService.remove(activationKey);
9896

99-
LOG.info("User has been created ({})", user);
97+
LOG.info("User #{} has been created ({})", id, user);
10098

101-
collectionService.createCollection(user.getId(), user.getLogin());
99+
collectionService.createCollection(id, user.getLogin());
102100
}
103101

104102
@Override

src/main/resources/sql/user_dao_queries.properties

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,24 @@ SELECT u.id \
1515
JOIN collections c \
1616
ON c.user_id = u.id \
1717
WHERE u.login = :login
18+
19+
user.create = \
20+
INSERT \
21+
INTO users \
22+
( login \
23+
, role \
24+
, name \
25+
, email \
26+
, registered_at \
27+
, activated_at \
28+
, hash \
29+
) \
30+
VALUES \
31+
( :login \
32+
, :role \
33+
, :name \
34+
, :email \
35+
, :registered_at \
36+
, :activated_at \
37+
, :hash \
38+
)

src/test/groovy/ru/mystamps/web/service/SeriesServiceImplTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class SeriesServiceImplTest extends Specification {
5757

5858
imageForm = new AddImageForm()
5959

60-
userId = TestObjects.createUser().getId()
60+
userId = TestObjects.TEST_USER_ID
6161

6262
imageService.save(_) >> ANY_IMAGE_ID
6363

0 commit comments

Comments
 (0)