Commit b4808f612a7e42cc01f6c6edfc2d4515d26579b6
1 parent
ab335a1a
feature: lesen und schreiben mittels REST/Jackson
Showing
7 changed files
with
130 additions
and
13 deletions
pom.xml
... | ... | @@ -18,6 +18,7 @@ |
18 | 18 | <mockito-version>2.7.22</mockito-version> |
19 | 19 | <dbunit-version>2.5.1</dbunit-version> |
20 | 20 | <slf4j-version>1.8.0-alpha0</slf4j-version> |
21 | + <jackson-version>2.8.8.1</jackson-version> | |
21 | 22 | </properties> |
22 | 23 | <dependencies> |
23 | 24 | <dependency> |
... | ... | @@ -62,6 +63,11 @@ |
62 | 63 | <artifactId>mysql-connector-java</artifactId> |
63 | 64 | <version>${mysql-version}</version> |
64 | 65 | </dependency> |
66 | + <dependency> | |
67 | + <groupId>com.fasterxml.jackson.core</groupId> | |
68 | + <artifactId>jackson-databind</artifactId> | |
69 | + <version>${jackson-version}</version> | |
70 | + </dependency> | |
65 | 71 | </dependencies> |
66 | 72 | <build> |
67 | 73 | <finalName>swXercise</finalName> | ... | ... |
src/main/java/net/ziemers/swxercise/db/BaseEntity.java
... | ... | @@ -6,13 +6,17 @@ import javax.persistence.MappedSuperclass; |
6 | 6 | |
7 | 7 | @MappedSuperclass |
8 | 8 | public class BaseEntity { |
9 | - | |
9 | + | |
10 | + protected Long id; | |
11 | + | |
10 | 12 | @Id |
11 | 13 | @GeneratedValue |
12 | - protected Long id; | |
13 | - | |
14 | 14 | public Long getId() { |
15 | 15 | return id; |
16 | 16 | } |
17 | 17 | |
18 | + public void setId(Long id) { | |
19 | + this.id = id; | |
20 | + } | |
21 | + | |
18 | 22 | } |
19 | 23 | \ No newline at end of file | ... | ... |
src/main/java/net/ziemers/swxercise/lg/user/Profile.java
1 | 1 | package net.ziemers.swxercise.lg.user; |
2 | 2 | |
3 | 3 | import javax.persistence.Entity; |
4 | +import javax.validation.constraints.NotNull; | |
4 | 5 | |
5 | 6 | import net.ziemers.swxercise.db.BaseEntity; |
6 | 7 | |
7 | 8 | @Entity |
8 | 9 | public class Profile extends BaseEntity { |
9 | 10 | |
11 | + @NotNull | |
12 | + private String username; | |
13 | + | |
14 | + @NotNull | |
10 | 15 | private String passwordHash; |
11 | 16 | |
12 | 17 | private String mailaddress; |
13 | 18 | |
19 | + public Profile() { | |
20 | + super(); | |
21 | + } | |
22 | + | |
23 | + public Profile(final String username, final String password) { | |
24 | + this.username = username; | |
25 | + // TODO Kennwort verhashen | |
26 | + this.passwordHash = password; | |
27 | + } | |
28 | + | |
29 | + public String getUsername() { | |
30 | + return username; | |
31 | + } | |
32 | + | |
33 | + public void setUsername(String username) { | |
34 | + this.username = username; | |
35 | + } | |
36 | + | |
14 | 37 | public String getPasswordHash() { |
15 | 38 | return passwordHash; |
16 | 39 | } | ... | ... |
src/main/java/net/ziemers/swxercise/lg/user/User.java
1 | 1 | package net.ziemers.swxercise.lg.user; |
2 | 2 | |
3 | +import javax.persistence.CascadeType; | |
3 | 4 | import javax.persistence.Entity; |
5 | +import javax.persistence.OneToOne; | |
6 | +import javax.validation.constraints.NotNull; | |
4 | 7 | |
5 | 8 | import net.ziemers.swxercise.db.BaseEntity; |
6 | 9 | |
... | ... | @@ -11,6 +14,18 @@ public class User extends BaseEntity { |
11 | 14 | |
12 | 15 | private String lastname; |
13 | 16 | |
17 | + @NotNull | |
18 | + private Profile profile; | |
19 | + | |
20 | + public User() { | |
21 | + super(); | |
22 | + } | |
23 | + | |
24 | + public User(final String firstname, final String lastname) { | |
25 | + this.firstname = firstname; | |
26 | + this.lastname = lastname; | |
27 | + } | |
28 | + | |
14 | 29 | public String getFirstname() { |
15 | 30 | return firstname; |
16 | 31 | } |
... | ... | @@ -27,4 +42,13 @@ public class User extends BaseEntity { |
27 | 42 | this.lastname = lastname; |
28 | 43 | } |
29 | 44 | |
45 | + @OneToOne(cascade = {CascadeType.ALL}) | |
46 | + public Profile getProfile() { | |
47 | + return profile; | |
48 | + } | |
49 | + | |
50 | + public void setProfile(Profile profile) { | |
51 | + this.profile = profile; | |
52 | + } | |
53 | + | |
30 | 54 | } | ... | ... |
src/main/java/net/ziemers/swxercise/lg/user/dto/UserDto.java
0 → 100644
1 | +package net.ziemers.swxercise.lg.user.dto; | |
2 | + | |
3 | +import javax.validation.constraints.NotNull; | |
4 | + | |
5 | +public class UserDto { | |
6 | + | |
7 | + @NotNull | |
8 | + private String username; | |
9 | + | |
10 | + @NotNull | |
11 | + private String password; | |
12 | + | |
13 | + private String firstname; | |
14 | + | |
15 | + private String lastname; | |
16 | + | |
17 | + private String mailaddress; | |
18 | + | |
19 | + public String getUsername() { | |
20 | + return username; | |
21 | + } | |
22 | + | |
23 | + public String getPassword() { | |
24 | + return password; | |
25 | + } | |
26 | + | |
27 | + public String getFirstname() { | |
28 | + return firstname; | |
29 | + } | |
30 | + | |
31 | + public String getLastname() { | |
32 | + return lastname; | |
33 | + } | |
34 | + | |
35 | + public String getMailaddress() { | |
36 | + return mailaddress; | |
37 | + } | |
38 | + | |
39 | +} | ... | ... |
src/main/java/net/ziemers/swxercise/ui/RestController.java renamed to src/main/java/net/ziemers/swxercise/ui/RestViewController.java
... | ... | @@ -4,20 +4,19 @@ import java.util.Collection; |
4 | 4 | |
5 | 5 | import javax.enterprise.context.ApplicationScoped; |
6 | 6 | import javax.inject.Inject; |
7 | -import javax.ws.rs.GET; | |
8 | -import javax.ws.rs.Path; | |
9 | -import javax.ws.rs.PathParam; | |
10 | -import javax.ws.rs.Produces; | |
7 | +import javax.ws.rs.*; | |
11 | 8 | import javax.ws.rs.core.MediaType; |
12 | 9 | |
10 | +import net.ziemers.swxercise.lg.user.Profile; | |
13 | 11 | import net.ziemers.swxercise.lg.user.User; |
12 | +import net.ziemers.swxercise.lg.user.dto.UserDto; | |
14 | 13 | import net.ziemers.swxercise.lg.user.service.UserService; |
15 | 14 | |
16 | 15 | @ApplicationScoped |
17 | -@Path(RestController.webContextPath) | |
18 | -public class RestController { | |
16 | +@Path(RestViewController.webContextPath) | |
17 | +public class RestViewController { | |
19 | 18 | |
20 | - static final String webContextPath = "/user"; | |
19 | + static final String webContextPath = "/users"; | |
21 | 20 | |
22 | 21 | @Inject |
23 | 22 | private UserService userService; |
... | ... | @@ -36,10 +35,32 @@ public class RestController { |
36 | 35 | } |
37 | 36 | |
38 | 37 | @GET |
39 | - @Path("/get") | |
38 | + @Path("/all") | |
40 | 39 | @Produces(MediaType.APPLICATION_JSON) |
41 | 40 | public Collection<User> getAllUsers() { |
42 | 41 | return userService.findAllUsers(); |
43 | 42 | } |
44 | 43 | |
44 | + @GET | |
45 | + @Path("{id}") | |
46 | + @Produces(MediaType.APPLICATION_JSON) | |
47 | + public User getById(@PathParam("id") Long id) { | |
48 | + return userService.findUser(id); | |
49 | + } | |
50 | + | |
51 | + @PUT | |
52 | + @Path("/user") | |
53 | + @Consumes(MediaType.APPLICATION_JSON) | |
54 | + @Produces({MediaType.TEXT_PLAIN}) | |
55 | + public String postUser(UserDto userDto) throws Exception { | |
56 | + final User user = new User(userDto.getFirstname(), userDto.getLastname()); | |
57 | + final Profile profile = new Profile(userDto.getUsername(), userDto.getPassword()); | |
58 | + | |
59 | + // TODO hierfür benötigen wir einen Mapper | |
60 | + user.setProfile(profile); | |
61 | + userService.saveUser(user); | |
62 | + | |
63 | + return "Ok"; | |
64 | + } | |
65 | + | |
45 | 66 | } | ... | ... |
src/test/java/net/ziemers/swxercise/ui/RestControllerTest.java renamed to src/test/java/net/ziemers/swxercise/ui/RestViewControllerTest.java
... | ... | @@ -7,10 +7,10 @@ import org.mockito.InjectMocks; |
7 | 7 | import org.mockito.junit.MockitoJUnitRunner; |
8 | 8 | |
9 | 9 | @RunWith(MockitoJUnitRunner.class) |
10 | -public class RestControllerTest { | |
10 | +public class RestViewControllerTest { | |
11 | 11 | |
12 | 12 | @InjectMocks |
13 | - private RestController underTest; | |
13 | + private RestViewController underTest; | |
14 | 14 | |
15 | 15 | @Test |
16 | 16 | public void test() { | ... | ... |