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()) { | ... | ... |