Commit b4808f612a7e42cc01f6c6edfc2d4515d26579b6

Authored by Thomas Ziemer
1 parent ab335a1a

feature: lesen und schreiben mittels REST/Jackson

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