Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 74d6b99b

Přidáno uživatelem Jakub Danek před více než 5 roky(ů)

re #31 separate part of DefaultSettings interface into own repository

Required for easier implementation of #29 (user registration)

Zobrazit rozdíly:

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