Commit 32cb94148d6c24ca185c26ffebf3dc45b8666b65
1 parent
86ec838e
feature: UserViewController und UserService optimiert
Showing
6 changed files
with
77 additions
and
34 deletions
pom.xml
... | ... | @@ -43,6 +43,7 @@ |
43 | 43 | <groupId>javax.ws.rs</groupId> |
44 | 44 | <artifactId>javax.ws.rs-api</artifactId> |
45 | 45 | <version>${jaxrs-version}</version> |
46 | + <scope>provided</scope> | |
46 | 47 | </dependency> |
47 | 48 | <dependency> |
48 | 49 | <groupId>junit</groupId> |
... | ... | @@ -81,6 +82,7 @@ |
81 | 82 | <groupId>mysql</groupId> |
82 | 83 | <artifactId>mysql-connector-java</artifactId> |
83 | 84 | <version>${mysql-version}</version> |
85 | + <scope>provided</scope> | |
84 | 86 | </dependency> |
85 | 87 | <dependency> |
86 | 88 | <groupId>org.jglue.cdi-unit</groupId> | ... | ... |
src/main/java/net/ziemers/swxercise/lg/user/service/UserService.java
... | ... | @@ -58,11 +58,10 @@ public class UserService { |
58 | 58 | } |
59 | 59 | |
60 | 60 | public boolean deleteUser() { |
61 | + // ist zurzeit ein Benutzer angemeldet, können wir ihn löschen | |
61 | 62 | final User user = sessionContext.getUser(); |
62 | - | |
63 | 63 | if (user != null) { |
64 | - dao.remove(User.class, user.getId()); | |
65 | - return true; | |
64 | + return dao.remove(User.class, user.getId()) != null; | |
66 | 65 | } |
67 | 66 | return false; |
68 | 67 | } | ... | ... |
src/main/java/net/ziemers/swxercise/ui/OtherViewController.java
0 → 100644
1 | +package net.ziemers.swxercise.ui; | |
2 | + | |
3 | +import javax.faces.bean.ApplicationScoped; | |
4 | +import javax.ws.rs.GET; | |
5 | +import javax.ws.rs.Path; | |
6 | +import javax.ws.rs.Produces; | |
7 | +import javax.ws.rs.core.MediaType; | |
8 | + | |
9 | +/** | |
10 | + * REST-Methoden, die nirgendwo besser hinpassen. | |
11 | + */ | |
12 | +@ApplicationScoped | |
13 | +@Path(UserViewController.webContextPath) | |
14 | +public class OtherViewController { | |
15 | + | |
16 | + static final String webContextPath = "/"; | |
17 | + | |
18 | + @GET | |
19 | + @Path("/v1/ping") | |
20 | + @Produces(MediaType.TEXT_PLAIN) | |
21 | + public String ping() { | |
22 | + return "pong"; | |
23 | + } | |
24 | + | |
25 | +} | ... | ... |
src/main/java/net/ziemers/swxercise/ui/RestResponse.java
... | ... | @@ -6,6 +6,8 @@ public class RestResponse { |
6 | 6 | |
7 | 7 | private ResponseState responseState; |
8 | 8 | |
9 | + private String message; | |
10 | + | |
9 | 11 | public RestResponse() { |
10 | 12 | this(ResponseState.SUCCESS); |
11 | 13 | } |
... | ... | @@ -14,6 +16,11 @@ public class RestResponse { |
14 | 16 | this.responseState = responseState; |
15 | 17 | } |
16 | 18 | |
19 | + public RestResponse(final ResponseState responseState, final String message) { | |
20 | + this(responseState); | |
21 | + this.message = message; | |
22 | + } | |
23 | + | |
17 | 24 | public int getResponseCode() { |
18 | 25 | return responseState.getResponseCode(); |
19 | 26 | } |
... | ... | @@ -22,6 +29,8 @@ public class RestResponse { |
22 | 29 | return responseState.getResponseText(); |
23 | 30 | } |
24 | 31 | |
32 | + public String getMessage() { return message; } | |
33 | + | |
25 | 34 | @Override |
26 | 35 | public boolean equals(Object o) { |
27 | 36 | if (this == o) return true; | ... | ... |
src/main/java/net/ziemers/swxercise/ui/UserViewController.java
... | ... | @@ -20,7 +20,7 @@ import net.ziemers.swxercise.ui.enums.ResponseState; |
20 | 20 | @Path(UserViewController.webContextPath) |
21 | 21 | public class UserViewController { |
22 | 22 | |
23 | - static final String webContextPath = "/users"; | |
23 | + static final String webContextPath = "/"; | |
24 | 24 | |
25 | 25 | @Inject |
26 | 26 | private UserService userService; |
... | ... | @@ -29,11 +29,12 @@ public class UserViewController { |
29 | 29 | * Liefert alle User-Objekte zurück. |
30 | 30 | * |
31 | 31 | * Aufruf: |
32 | - * GET http://localhost:8080/swxercise/rest/users | |
32 | + * GET http://localhost:8080/swxercise/rest/v1/users | |
33 | 33 | * |
34 | - * @return die User-Objekte. | |
34 | + * @return die User-Objekte, oder ein leeres JSON-Array, falls keine existieren. | |
35 | 35 | */ |
36 | 36 | @GET |
37 | + @Path("v1/users") | |
37 | 38 | @Produces(MediaType.APPLICATION_JSON) |
38 | 39 | public Collection<User> getAllUsers() { |
39 | 40 | return userService.findAllUsers(); |
... | ... | @@ -43,13 +44,13 @@ public class UserViewController { |
43 | 44 | * Liefert das User-Objekt mit der gewünschten Id zurück. |
44 | 45 | * |
45 | 46 | * Aufruf: |
46 | - * GET http://localhost:8080/swxercise/rest/users/42 | |
47 | + * GET http://localhost:8080/swxercise/rest/v1/user/42 | |
47 | 48 | * |
48 | 49 | * @param id die Id des gewünschten User-Objekts |
49 | - * @return das User-Objekt. | |
50 | + * @return das User-Objekt als JSON, oder <code>null</code>, falls keines existiert. | |
50 | 51 | */ |
51 | 52 | @GET |
52 | - @Path("{id}") | |
53 | + @Path("v1/user/{id}") | |
53 | 54 | @Produces(MediaType.APPLICATION_JSON) |
54 | 55 | public User getById(@PathParam("id") Long id) { |
55 | 56 | return userService.findUser(id); |
... | ... | @@ -59,35 +60,41 @@ public class UserViewController { |
59 | 60 | * Erstellt ein neues User-Objekt mit den gewünschten Eigenschaften, welche mittels {@link UserDto} definiert werden. |
60 | 61 | * |
61 | 62 | * Aufruf: |
62 | - * POST http://localhost:8080/swxercise/rest/users | |
63 | + * POST http://localhost:8080/swxercise/rest/v1/user | |
63 | 64 | * |
64 | 65 | * @param dto das mittels der als JSON-Objekt übergebenenen Eigenschaften zu füllende {@link UserDto} |
65 | - * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war. | |
66 | - * @throws Exception wirft eine Exception, wenn das Erstellen des UserDto fehlschlug | |
66 | + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs. | |
67 | + | |
67 | 68 | */ |
68 | 69 | @POST |
70 | + @Path("v1/user") | |
69 | 71 | @Consumes(MediaType.APPLICATION_JSON) |
70 | 72 | @Produces(MediaType.APPLICATION_JSON) |
71 | - public RestResponse createUser(UserDto dto) throws Exception { | |
72 | - userService.createUser(dto); | |
73 | - return new RestResponse(); | |
73 | + public RestResponse createUser(UserDto dto) { | |
74 | + final Long id = userService.createUser(dto); | |
75 | + if (id != null) { | |
76 | + return new RestResponse(ResponseState.SUCCESS, String.valueOf(id)); | |
77 | + } | |
78 | + return new RestResponse(ResponseState.ALREADY_EXISTING); | |
74 | 79 | } |
75 | 80 | |
76 | 81 | /** |
77 | - * Aktualisiert das User-Objekt mit der gewünschten Id mit den Eigenschaften, welche mittels {@link UserDto} definiert werden. | |
82 | + * Aktualisiert das User-Objekt mit der gewünschten Id mit den Eigenschaften, | |
83 | + * welche mittels {@link UserDto} definiert werden. Der Pfadparameter wird | |
84 | + * als erstes ge'marshal't, das DTO im Post-Content danach (REST-Konvention). | |
78 | 85 | * |
79 | 86 | * Aufruf: |
80 | - * PUT http://localhost:8080/swxercise/rest/users/42 | |
87 | + * PUT http://localhost:8080/swxercise/rest/v1/user/42 | |
81 | 88 | * |
82 | - * @param id die Id des gewünschten User-Objekts | |
83 | - * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war. | |
84 | - * @throws Exception wirft eine Exception, wenn das Erstellen des UserDto fehlschlug | |
89 | + * @param id die Id des zu aktualisierenden User-Objekts | |
90 | + * @param dto das mittels der als JSON-Objekt übergebenenen Eigenschaften zu füllende {@link UserDto} | |
91 | + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs. | |
85 | 92 | */ |
86 | 93 | @PUT |
87 | - @Path("{id}") | |
94 | + @Path("v1/user/{id}") | |
88 | 95 | @Consumes(MediaType.APPLICATION_JSON) |
89 | 96 | @Produces(MediaType.APPLICATION_JSON) |
90 | - public RestResponse updateUser(@PathParam("id") Long id) throws Exception { | |
97 | + public RestResponse updateUser(@PathParam("id") Long id, UserDto dto) { | |
91 | 98 | // TODO noch zu implementieren |
92 | 99 | return new RestResponse(ResponseState.FAILED); |
93 | 100 | } |
... | ... | @@ -96,13 +103,13 @@ public class UserViewController { |
96 | 103 | * Löscht das User-Objekt mit der gewünschten Id. |
97 | 104 | * |
98 | 105 | * Aufruf: |
99 | - * DELETE http://localhost:8080/swxercise/rest/users/42 | |
106 | + * DELETE http://localhost:8080/swxercise/rest/v1/user/42 | |
100 | 107 | * |
101 | 108 | * @param id die Id des gewünschten User-Objekts |
102 | - * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war. | |
109 | + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs. | |
103 | 110 | */ |
104 | 111 | @DELETE |
105 | - @Path("{id}") | |
112 | + @Path("v1/user/{id}") | |
106 | 113 | @Produces(MediaType.APPLICATION_JSON) |
107 | 114 | public RestResponse deleteUser(@PathParam("id") Long id) { |
108 | 115 | userService.deleteUser(id); |
... | ... | @@ -113,11 +120,12 @@ public class UserViewController { |
113 | 120 | * Löscht das User-Objekt des zurzeit angemeldeten Benutzers. |
114 | 121 | * |
115 | 122 | * Aufruf: |
116 | - * DELETE http://localhost:8080/swxercise/rest/users | |
123 | + * DELETE http://localhost:8080/swxercise/rest/v1/user | |
117 | 124 | * |
118 | - * @return "Ok", wenn das Löschen des User-Objekts erfolgreich war. | |
125 | + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs. | |
119 | 126 | */ |
120 | 127 | @DELETE |
128 | + @Path("v1/user") | |
121 | 129 | @Produces(MediaType.APPLICATION_JSON) |
122 | 130 | public RestResponse deleteUser() { |
123 | 131 | if (userService.deleteUser()) { |
... | ... | @@ -130,13 +138,13 @@ public class UserViewController { |
130 | 138 | * Meldet einen Benutzer durch übergebenen username und password mit einem neuen User-{@link SessionContext} an. |
131 | 139 | * |
132 | 140 | * Aufruf: |
133 | - * POST http://localhost:8080/swxercise/rest/users/login | |
141 | + * POST http://localhost:8080/swxercise/rest/v1/user/login | |
134 | 142 | * |
135 | 143 | * @param dto das mittels der als JSON-Objekt übergebenenen Eigenschaften zu füllende {@link UserDto} |
136 | - * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war. | |
144 | + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs. | |
137 | 145 | */ |
138 | 146 | @POST |
139 | - @Path("/login") | |
147 | + @Path("v1/user/login") | |
140 | 148 | @Consumes(MediaType.APPLICATION_JSON) |
141 | 149 | @Produces(MediaType.APPLICATION_JSON) |
142 | 150 | public RestResponse loginUser(UserDto dto) { |
... | ... | @@ -150,13 +158,12 @@ public class UserViewController { |
150 | 158 | * Meldet den angemeldeten Benutzer von seinem User-{@link SessionContext} ab. |
151 | 159 | * |
152 | 160 | * Aufruf: |
153 | - * POST http://localhost:8080/swxercise/rest/users/logout | |
161 | + * POST http://localhost:8080/swxercise/rest/v1/user/logout | |
154 | 162 | * |
155 | - * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war. | |
163 | + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs. | |
156 | 164 | */ |
157 | 165 | @POST |
158 | - @Path("/logout") | |
159 | - @Consumes(MediaType.APPLICATION_JSON) | |
166 | + @Path("v1/user/logout") | |
160 | 167 | @Produces(MediaType.APPLICATION_JSON) |
161 | 168 | public RestResponse logoutUser() { |
162 | 169 | if (userService.logoutUser()) { | ... | ... |