Revize 74d6b99b
Přidáno uživatelem Jakub Danek před více než 5 roky(ů)
server/src/main/java/org/danekja/ymanager/business/ApiManager.java | ||
---|---|---|
4 | 4 |
import org.danekja.ymanager.business.auth.anot.IsEmployer; |
5 | 5 |
import org.danekja.ymanager.business.auth.anot.IsOwner; |
6 | 6 |
import org.danekja.ymanager.business.auth.anot.IsSignedIn; |
7 |
import org.danekja.ymanager.domain.DefaultSettings; |
|
7 | 8 |
import org.danekja.ymanager.domain.*; |
8 |
import org.danekja.ymanager.dto.DefaultSettings; |
|
9 | 9 |
import org.danekja.ymanager.dto.*; |
10 | 10 |
import org.danekja.ymanager.repository.RequestRepository; |
11 |
import org.danekja.ymanager.repository.SettingsRepository; |
|
11 | 12 |
import org.danekja.ymanager.repository.UserRepository; |
12 | 13 |
import org.danekja.ymanager.repository.VacationRepository; |
13 | 14 |
import org.danekja.ymanager.ws.rest.exceptions.RESTFullException; |
... | ... | |
33 | 34 |
private final RequestRepository requestRepository; |
34 | 35 |
private final UserRepository userRepository; |
35 | 36 |
private final VacationRepository vacationRepository; |
37 |
private final SettingsRepository settingsRepository; |
|
36 | 38 |
|
37 | 39 |
private final AuthorizationService authService; |
38 | 40 |
|
39 | 41 |
@Autowired |
40 |
public ApiManager(RequestRepository requestRepository, UserRepository userRepository, VacationRepository vacationRepository, AuthorizationService authService) { |
|
42 |
public ApiManager(RequestRepository requestRepository, UserRepository userRepository, VacationRepository vacationRepository, SettingsRepository settingsRepository, AuthorizationService authService) {
|
|
41 | 43 |
this.requestRepository = requestRepository; |
42 | 44 |
this.userRepository = userRepository; |
43 | 45 |
this.vacationRepository = vacationRepository; |
46 |
this.settingsRepository = settingsRepository; |
|
44 | 47 |
this.authService = authService; |
45 | 48 |
} |
46 | 49 |
|
... | ... | |
70 | 73 |
@IsSignedIn |
71 | 74 |
public DefaultSettings getDefaultSettings() throws RESTFullException { |
72 | 75 |
try { |
73 |
return userRepository.getLastDefaultSettings().orElse(new DefaultSettings());
|
|
76 |
return settingsRepository.get();
|
|
74 | 77 |
} catch (DataAccessException e) { |
75 | 78 |
log.error(e.getMessage()); |
76 | 79 |
throw new RESTFullException(e.getMessage(), "database.error"); |
... | ... | |
104 | 107 |
@IsEmployer |
105 | 108 |
public void createSettings(DefaultSettings settings) throws RESTFullException { |
106 | 109 |
try { |
107 |
org.danekja.ymanager.domain.DefaultSettings defaultSettings = new org.danekja.ymanager.domain.DefaultSettings();
|
|
110 |
DefaultSettings defaultSettings = new DefaultSettings();
|
|
108 | 111 |
defaultSettings.setSickDayCount(settings.getSickDayCount()); |
109 | 112 |
defaultSettings.setNotification(settings.getNotification()); |
110 | 113 |
userRepository.insertSettings(defaultSettings); |
server/src/main/java/org/danekja/ymanager/business/Manager.java | ||
---|---|---|
1 | 1 |
package org.danekja.ymanager.business; |
2 | 2 |
|
3 |
import org.danekja.ymanager.domain.DefaultSettings; |
|
3 | 4 |
import org.danekja.ymanager.domain.RequestType; |
4 | 5 |
import org.danekja.ymanager.domain.Status; |
5 | 6 |
import org.danekja.ymanager.dto.*; |
server/src/main/java/org/danekja/ymanager/domain/DefaultSettings.java | ||
---|---|---|
32 | 32 |
*/ |
33 | 33 |
private LocalDateTime notification; |
34 | 34 |
|
35 |
public DefaultSettings() { |
|
36 |
} |
|
37 |
|
|
38 |
public DefaultSettings(Integer sickDayCount, LocalDateTime notification) { |
|
39 |
this.setSickDayCount(sickDayCount); |
|
40 |
this.setNotification(notification); |
|
41 |
} |
|
42 |
|
|
35 | 43 |
/** |
36 | 44 |
* Returns the ID of this default settings. |
37 | 45 |
* |
server/src/main/java/org/danekja/ymanager/dto/DefaultSettings.java | ||
---|---|---|
19 | 19 |
*/ |
20 | 20 |
private LocalDateTime notification; |
21 | 21 |
|
22 |
public DefaultSettings() { |
|
23 |
} |
|
24 |
|
|
25 |
public DefaultSettings(Integer sickDayCount, LocalDateTime notification) { |
|
26 |
this.sickDayCount = sickDayCount; |
|
27 |
this.notification = notification; |
|
28 |
} |
|
29 |
|
|
30 |
public DefaultSettings(org.danekja.ymanager.domain.DefaultSettings src) { |
|
31 |
this.sickDayCount = src.getSickDayCount(); |
|
32 |
this.notification = src.getNotification(); |
|
33 |
} |
|
34 |
|
|
22 | 35 |
/** |
23 | 36 |
* Returns the default number of available sick days in this default settings. |
24 | 37 |
* |
... | ... | |
54 | 67 |
public void setNotification(final LocalDateTime notification) { |
55 | 68 |
this.notification = notification; |
56 | 69 |
} |
70 |
|
|
71 |
public org.danekja.ymanager.domain.DefaultSettings toEntity() { |
|
72 |
return new org.danekja.ymanager.domain.DefaultSettings(getSickDayCount(), getNotification()); |
|
73 |
} |
|
57 | 74 |
} |
58 | 75 |
|
server/src/main/java/org/danekja/ymanager/repository/SettingsRepository.java | ||
---|---|---|
1 |
package org.danekja.ymanager.repository; |
|
2 |
|
|
3 |
import org.danekja.ymanager.domain.DefaultSettings; |
|
4 |
|
|
5 |
/** |
|
6 |
* DAO interface for settings object. |
|
7 |
*/ |
|
8 |
public interface SettingsRepository { |
|
9 |
|
|
10 |
/** |
|
11 |
* @return currently valid default settings |
|
12 |
*/ |
|
13 |
DefaultSettings get(); |
|
14 |
|
|
15 |
} |
server/src/main/java/org/danekja/ymanager/repository/UserRepository.java | ||
---|---|---|
240 | 240 |
user.getFirstName(), user.getLastName(), user.getVacationCount(), user.getTotalSickDayCount(), user.getTakenSickDayCount(), user.getNotification(), user.getEmail(), user.getPhoto(), user.getRole().name(), user.getStatus().name()); |
241 | 241 |
} |
242 | 242 |
|
243 |
public void insertSettings(final org.danekja.ymanager.domain.DefaultSettings settings) {
|
|
243 |
public void insertSettings(final DefaultSettings settings) { |
|
244 | 244 |
this.jdbc.update("INSERT INTO default_settings (no_sick_days, alert) VALUES (?, ?)", settings.getSickDayCount(), settings.getNotification()); |
245 | 245 |
} |
246 | 246 |
|
server/src/main/java/org/danekja/ymanager/repository/jdbc/JdbcSettingsRepository.java | ||
---|---|---|
1 |
package org.danekja.ymanager.repository.jdbc; |
|
2 |
|
|
3 |
import org.danekja.ymanager.domain.DefaultSettings; |
|
4 |
import org.danekja.ymanager.repository.SettingsRepository; |
|
5 |
import org.danekja.ymanager.repository.jdbc.mappers.DefaultSettingsMapper; |
|
6 |
import org.springframework.beans.factory.annotation.Autowired; |
|
7 |
import org.springframework.jdbc.core.JdbcTemplate; |
|
8 |
import org.springframework.jdbc.core.RowMapper; |
|
9 |
import org.springframework.stereotype.Repository; |
|
10 |
|
|
11 |
@Repository |
|
12 |
public class JdbcSettingsRepository implements SettingsRepository { |
|
13 |
|
|
14 |
private static final RowMapper<DefaultSettings> SETTINGS_ROW_MAPPER = new DefaultSettingsMapper(); |
|
15 |
|
|
16 |
/** |
|
17 |
* The connection to a database. |
|
18 |
*/ |
|
19 |
private final JdbcTemplate jdbc; |
|
20 |
|
|
21 |
@Autowired |
|
22 |
public JdbcSettingsRepository(JdbcTemplate jdbc) { |
|
23 |
this.jdbc = jdbc; |
|
24 |
} |
|
25 |
|
|
26 |
@Override |
|
27 |
public DefaultSettings get() { |
|
28 |
//TODO order by creation date |
|
29 |
return this.jdbc.queryForObject("SELECT * FROM default_settings ORDER BY id DESC LIMIT 1", SETTINGS_ROW_MAPPER); |
|
30 |
} |
|
31 |
|
|
32 |
} |
server/src/main/java/org/danekja/ymanager/repository/jdbc/mappers/DefaultSettingsMapper.java | ||
---|---|---|
1 |
package org.danekja.ymanager.repository.jdbc.mappers; |
|
2 |
|
|
3 |
import org.danekja.ymanager.domain.DefaultSettings; |
|
4 |
import org.springframework.jdbc.core.RowMapper; |
|
5 |
|
|
6 |
import java.sql.ResultSet; |
|
7 |
import java.sql.SQLException; |
|
8 |
|
|
9 |
public class DefaultSettingsMapper implements RowMapper<DefaultSettings> { |
|
10 |
|
|
11 |
/** |
|
12 |
* Maps a row from a result of a query to an DefaultSettings. |
|
13 |
* |
|
14 |
* @param resultSet the row from the result |
|
15 |
* @param i the index of the row |
|
16 |
* @return the DefaultSettings object |
|
17 |
* @throws java.sql.SQLException if the columnLabel is not valid; if a database access error occurs or this method is called on a closed result set |
|
18 |
*/ |
|
19 |
@Override |
|
20 |
public DefaultSettings mapRow(ResultSet resultSet, int i) throws SQLException { |
|
21 |
final DefaultSettings settings = new DefaultSettings(); |
|
22 |
settings.setSickDayCount(resultSet.getInt("no_sick_days")); |
|
23 |
settings.setNotification(resultSet.getTimestamp("alert").toLocalDateTime()); |
|
24 |
return settings; |
|
25 |
} |
|
26 |
} |
server/src/main/java/org/danekja/ymanager/ws/rest/ApiController.java | ||
---|---|---|
1 | 1 |
package org.danekja.ymanager.ws.rest; |
2 | 2 |
|
3 |
import org.apache.commons.lang3.StringUtils; |
|
4 | 3 |
import org.danekja.ymanager.business.FileService; |
5 | 4 |
import org.danekja.ymanager.business.Manager; |
6 | 5 |
import org.danekja.ymanager.domain.RequestType; |
... | ... | |
36 | 35 |
this.fileService = fileService; |
37 | 36 |
} |
38 | 37 |
|
39 |
private Long getUserId(String id) { |
|
40 |
// TODO verify permission |
|
41 |
if (id.toLowerCase().equals("me")) { |
|
42 |
return 1L; |
|
43 |
} else if (StringUtils.isNumeric(id)) { |
|
44 |
return Long.valueOf(id); |
|
45 |
} else { |
|
46 |
throw new IllegalArgumentException("User not found."); |
|
47 |
} |
|
48 |
} |
|
49 |
|
|
50 |
private Long getUserId(Long id) { |
|
51 |
return id == null ? getUserId("me") : id; |
|
52 |
} |
|
53 |
|
|
54 | 38 |
// *********************** GET **************************** |
55 | 39 |
|
56 | 40 |
@RequestMapping(value = "/users/requests/vacation", method=GET) |
... | ... | |
75 | 59 |
|
76 | 60 |
@RequestMapping(value = "/user/{id}/calendar", method=GET) |
77 | 61 |
public ResponseEntity userCalendar( |
78 |
@PathVariable("id") String id,
|
|
62 |
@PathVariable("id") Long id,
|
|
79 | 63 |
@RequestParam(value = "lang", required = false) String lang, |
80 |
@RequestParam(value = "from", required = true) String from,
|
|
64 |
@RequestParam(value = "from") String from, |
|
81 | 65 |
@RequestParam(value = "to", required = false) String to, |
82 | 66 |
@RequestParam(value = "status", required = false) String status) |
83 | 67 |
{ |
... | ... | |
85 | 69 |
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); |
86 | 70 |
LocalDate fromDate = LocalDate.parse(from, formatter); |
87 | 71 |
LocalDate toDate = to != null ? LocalDate.parse(to, formatter) : null; |
88 |
return manager.getUserCalendar(getUserId(id), fromDate, toDate, Status.getStatus(status));
|
|
72 |
return manager.getUserCalendar(id, fromDate, toDate, Status.getStatus(status));
|
|
89 | 73 |
}); |
90 | 74 |
} |
91 | 75 |
|
... | ... | |
93 | 77 |
public ResponseEntity settings( |
94 | 78 |
@RequestParam(value = "lang", required = false) String lang) |
95 | 79 |
{ |
96 |
return handle(Language.getLanguage(lang), manager::getDefaultSettings |
|
97 |
); |
|
80 |
return handle(Language.getLanguage(lang), () -> new DefaultSettings(manager.getDefaultSettings())); |
|
98 | 81 |
} |
99 | 82 |
|
100 | 83 |
// *********************** POST **************************** |
... | ... | |
105 | 88 |
@RequestBody DefaultSettings settings) |
106 | 89 |
{ |
107 | 90 |
return handle(Language.getLanguage(lang), () -> |
108 |
manager.createSettings(settings) |
|
91 |
manager.createSettings(settings.toEntity())
|
|
109 | 92 |
); |
110 | 93 |
} |
111 | 94 |
|
... | ... | |
128 | 111 |
@RequestMapping(value = "/user/settings", method=PUT) |
129 | 112 |
public ResponseEntity userSettings( |
130 | 113 |
@RequestParam(value = "lang", required = false) String lang, |
131 |
@RequestBody UserSettings settings) |
|
114 |
@RequestBody UserSettings settings, |
|
115 |
Authentication auth) |
|
132 | 116 |
{ |
117 |
//TODO make api endpoint contain userId in path as part of #39 |
|
118 |
//TODO drop the auth parameter afterwards |
|
133 | 119 |
return handle(Language.getLanguage(lang), () -> |
134 |
manager.changeSettings(getUserId("me"), settings)
|
|
120 |
manager.changeSettings(((User) auth.getPrincipal()).getId(), settings)
|
|
135 | 121 |
); |
136 | 122 |
} |
137 | 123 |
|
Také k dispozici: Unified diff
re #31 separate part of DefaultSettings interface into own repository
Required for easier implementation of #29 (user registration)