Revize 6ba63156
Přidáno uživatelem Jakub Danek před více než 5 roky(ů)
server/src/main/java/org/danekja/ymanager/repository/RepositoryUtils.java | ||
---|---|---|
1 |
package org.danekja.ymanager.repository; |
|
2 |
|
|
3 |
import org.springframework.dao.IncorrectResultSizeDataAccessException; |
|
4 |
|
|
5 |
import java.util.List; |
|
6 |
|
|
7 |
public class RepositoryUtils { |
|
8 |
|
|
9 |
/** |
|
10 |
* Method which extracts single result from a list which is expected to contains 0 or 1 results. |
|
11 |
* |
|
12 |
* @param queryResult query result in form of {@link List} |
|
13 |
* @param <T> type of object expected in the list |
|
14 |
* @return the object from the list or null (when empty) |
|
15 |
* @throws IncorrectResultSizeDataAccessException when #queryResult contains more than 1 object |
|
16 |
*/ |
|
17 |
public static <T> T singleResult(List<T> queryResult) { |
|
18 |
switch (queryResult.size()) { |
|
19 |
case 0: |
|
20 |
return null; |
|
21 |
case 1: |
|
22 |
return queryResult.get(0); |
|
23 |
default: |
|
24 |
throw new IncorrectResultSizeDataAccessException(1, queryResult.size()); |
|
25 |
} |
|
26 |
} |
|
27 |
} |
server/src/main/java/org/danekja/ymanager/repository/UserRepository.java | ||
---|---|---|
2 | 2 |
|
3 | 3 |
import org.danekja.ymanager.domain.User; |
4 | 4 |
import org.danekja.ymanager.dto.*; |
5 |
import org.danekja.ymanager.repository.jdbc.mappers.UserRowMapper; |
|
5 | 6 |
import org.slf4j.Logger; |
6 | 7 |
import org.slf4j.LoggerFactory; |
7 | 8 |
import org.springframework.beans.factory.annotation.Autowired; |
... | ... | |
25 | 26 |
@Repository |
26 | 27 |
public class UserRepository { |
27 | 28 |
|
29 |
private final RowMapper<User> USER_MAPPER = new UserRowMapper(); |
|
30 |
|
|
28 | 31 |
/** |
29 | 32 |
* The mapper maps a row from a result of a query to an BasicProfileUser. |
30 | 33 |
*/ |
... | ... | |
228 | 231 |
|
229 | 232 |
} |
230 | 233 |
|
231 |
public FullUserProfile getFullUser(final String token) { |
|
232 |
UserRepository.log.trace("Selecting full profile of a user with the specified token from a database: {}", token); |
|
233 |
|
|
234 |
final Map<String, Object> resultMap = this.getUserColumns(token); |
|
235 |
|
|
236 |
final FullUserProfile user = new FullUserProfile(); |
|
237 |
user.setId((Long) resultMap.get("out_id")); |
|
238 |
user.setFirstName((String) resultMap.get("out_first_name")); |
|
239 |
user.setLastName((String) resultMap.get("out_last_name")); |
|
240 |
user.setVacationCount(((Double) resultMap.get("out_no_vacations")).floatValue()); |
|
241 |
user.setSickDayCount((Integer) resultMap.get("out_no_sick_days")); |
|
242 |
user.setTakenSickDayCount((Integer) resultMap.get("out_taken_sick_days")); |
|
243 |
user.setNotification(((Timestamp) resultMap.get("out_alert")).toLocalDateTime()); |
|
244 |
user.setEmail((String) resultMap.get(("out_email"))); |
|
245 |
user.setPhoto((String) resultMap.get("out_photo")); |
|
246 |
user.setRole(getUserRole((String) resultMap.get("out_role"))); |
|
247 |
user.setStatus(Status.getStatus((String) resultMap.get("out_status"))); |
|
248 |
return user; |
|
249 |
} |
|
250 | 234 |
|
251 | 235 |
public Optional<DefaultSettings> getLastDefaultSettings() { |
252 | 236 |
return Optional.ofNullable(this.jdbc.queryForObject("SELECT * FROM default_settings ORDER BY id DESC LIMIT 1", new DefaultSettingsMapper())); |
... | ... | |
254 | 238 |
|
255 | 239 |
//---------------------------------- DOMAIN ----------------------------------- |
256 | 240 |
|
241 |
/** |
|
242 |
* Gets user from database based on its email |
|
243 |
* |
|
244 |
* @param email email value, used as search key |
|
245 |
* @return found user object or null (if not found) |
|
246 |
*/ |
|
247 |
public User getUser(final String email) { |
|
248 |
List<User> users = this.jdbc.query("SELECT * FROM end_user WHERE email = ?", USER_MAPPER, email); |
|
249 |
|
|
250 |
return RepositoryUtils.singleResult(users); |
|
251 |
} |
|
252 |
|
|
253 |
/** |
|
254 |
* Gets user from database based on its id |
|
255 |
* |
|
256 |
* @param id id value, used as search key |
|
257 |
* @return found user object or null (if not found) |
|
258 |
*/ |
|
257 | 259 |
public User getUser(final long id) { |
258 |
final Map<String, Object> resultMap = this.getUserColumns(id); |
|
259 |
User user = new User(); |
|
260 |
user.setId((Long) resultMap.get("out_id")); |
|
261 |
user.setFirstName((String)resultMap.get("out_first_name")); |
|
262 |
user.setLastName((String)resultMap.get("out_last_name")); |
|
263 |
user.setVacationCount(((Double)resultMap.get("out_no_vacations")).floatValue()); |
|
264 |
user.setTotalSickDayCount((Integer)resultMap.get("out_no_sick_days")); |
|
265 |
user.setTakenSickDayCount((Integer)resultMap.get("out_taken_sick_days")); |
|
266 |
user.setNotification(((Timestamp)resultMap.get("out_alert")).toLocalDateTime()); |
|
267 |
user.setToken((String)resultMap.get("out_token")); |
|
268 |
user.setEmail((String)resultMap.get("out_email")); |
|
269 |
user.setPhoto((String)resultMap.get("out_photo")); |
|
270 |
user.setCreationDate(((Timestamp)resultMap.get("out_creation_date")).toLocalDateTime()); |
|
271 |
user.setRole(getUserRole((String)resultMap.get("out_role"))); |
|
272 |
user.setStatus(Status.getStatus((String)resultMap.get("out_status"))); |
|
273 |
return user; |
|
260 |
List<User> users = this.jdbc.query("SELECT * FROM end_user WHERE id = ?", USER_MAPPER, id); |
|
261 |
|
|
262 |
return RepositoryUtils.singleResult(users); |
|
274 | 263 |
} |
275 | 264 |
|
276 | 265 |
public void updateUser(final User user) { |
server/src/main/java/org/danekja/ymanager/repository/jdbc/mappers/UserRowMapper.java | ||
---|---|---|
1 |
package org.danekja.ymanager.repository.jdbc.mappers; |
|
2 |
|
|
3 |
import org.danekja.ymanager.domain.User; |
|
4 |
import org.danekja.ymanager.dto.Status; |
|
5 |
import org.danekja.ymanager.dto.UserRole; |
|
6 |
import org.springframework.jdbc.core.RowMapper; |
|
7 |
|
|
8 |
import java.sql.ResultSet; |
|
9 |
import java.sql.SQLException; |
|
10 |
import java.sql.Timestamp; |
|
11 |
import java.time.LocalDateTime; |
|
12 |
|
|
13 |
/** |
|
14 |
* Maps "end_user" query rows into User object. |
|
15 |
*/ |
|
16 |
public class UserRowMapper implements RowMapper<User> { |
|
17 |
|
|
18 |
@Override |
|
19 |
public User mapRow(ResultSet resultSet, int i) throws SQLException { |
|
20 |
Long id = resultSet.getLong("id"); |
|
21 |
String firstName = resultSet.getString("first_name"); |
|
22 |
String lastName = resultSet.getString("last_name"); |
|
23 |
float vacations = resultSet.getFloat("no_vacations"); |
|
24 |
int sickDays = resultSet.getInt("no_sick_days"); |
|
25 |
int takenSickDays = resultSet.getInt("taken_sick_days"); |
|
26 |
|
|
27 |
Timestamp date = resultSet.getTimestamp("alert"); |
|
28 |
LocalDateTime alert = date != null ? ((Timestamp) date).toLocalDateTime() : null; |
|
29 |
|
|
30 |
String token = resultSet.getNString("token"); |
|
31 |
String email = resultSet.getString("email"); |
|
32 |
String photo = resultSet.getNString("photo"); |
|
33 |
|
|
34 |
date = resultSet.getTimestamp("creation_date"); |
|
35 |
LocalDateTime creationDate = date.toLocalDateTime(); |
|
36 |
UserRole role = UserRole.valueOf(resultSet.getString("user_role")); |
|
37 |
Status status = Status.valueOf(resultSet.getString("status")); |
|
38 |
|
|
39 |
return new User(id, firstName, lastName, vacations, sickDays, takenSickDays, alert, token, email, photo, creationDate, role, status); |
|
40 |
} |
|
41 |
} |
Také k dispozici: Unified diff
re #37 reimplement UserRepository getUser queries back into sanity
Add possibility to search by email.