Commit b4808f612a7e42cc01f6c6edfc2d4515d26579b6

Authored by Thomas Ziemer
1 parent ab335a1a

feature: lesen und schreiben mittels REST/Jackson

@@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
18 <mockito-version>2.7.22</mockito-version> 18 <mockito-version>2.7.22</mockito-version>
19 <dbunit-version>2.5.1</dbunit-version> 19 <dbunit-version>2.5.1</dbunit-version>
20 <slf4j-version>1.8.0-alpha0</slf4j-version> 20 <slf4j-version>1.8.0-alpha0</slf4j-version>
  21 + <jackson-version>2.8.8.1</jackson-version>
21 </properties> 22 </properties>
22 <dependencies> 23 <dependencies>
23 <dependency> 24 <dependency>
@@ -62,6 +63,11 @@ @@ -62,6 +63,11 @@
62 <artifactId>mysql-connector-java</artifactId> 63 <artifactId>mysql-connector-java</artifactId>
63 <version>${mysql-version}</version> 64 <version>${mysql-version}</version>
64 </dependency> 65 </dependency>
  66 + <dependency>
  67 + <groupId>com.fasterxml.jackson.core</groupId>
  68 + <artifactId>jackson-databind</artifactId>
  69 + <version>${jackson-version}</version>
  70 + </dependency>
65 </dependencies> 71 </dependencies>
66 <build> 72 <build>
67 <finalName>swXercise</finalName> 73 <finalName>swXercise</finalName>
src/main/java/net/ziemers/swxercise/db/BaseEntity.java
@@ -6,13 +6,17 @@ import javax.persistence.MappedSuperclass; @@ -6,13 +6,17 @@ import javax.persistence.MappedSuperclass;
6 6
7 @MappedSuperclass 7 @MappedSuperclass
8 public class BaseEntity { 8 public class BaseEntity {
9 - 9 +
  10 + protected Long id;
  11 +
10 @Id 12 @Id
11 @GeneratedValue 13 @GeneratedValue
12 - protected Long id;  
13 -  
14 public Long getId() { 14 public Long getId() {
15 return id; 15 return id;
16 } 16 }
17 17
  18 + public void setId(Long id) {
  19 + this.id = id;
  20 + }
  21 +
18 } 22 }
19 \ No newline at end of file 23 \ No newline at end of file
src/main/java/net/ziemers/swxercise/lg/user/Profile.java
1 package net.ziemers.swxercise.lg.user; 1 package net.ziemers.swxercise.lg.user;
2 2
3 import javax.persistence.Entity; 3 import javax.persistence.Entity;
  4 +import javax.validation.constraints.NotNull;
4 5
5 import net.ziemers.swxercise.db.BaseEntity; 6 import net.ziemers.swxercise.db.BaseEntity;
6 7
7 @Entity 8 @Entity
8 public class Profile extends BaseEntity { 9 public class Profile extends BaseEntity {
9 10
  11 + @NotNull
  12 + private String username;
  13 +
  14 + @NotNull
10 private String passwordHash; 15 private String passwordHash;
11 16
12 private String mailaddress; 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 public String getPasswordHash() { 37 public String getPasswordHash() {
15 return passwordHash; 38 return passwordHash;
16 } 39 }
src/main/java/net/ziemers/swxercise/lg/user/User.java
1 package net.ziemers.swxercise.lg.user; 1 package net.ziemers.swxercise.lg.user;
2 2
  3 +import javax.persistence.CascadeType;
3 import javax.persistence.Entity; 4 import javax.persistence.Entity;
  5 +import javax.persistence.OneToOne;
  6 +import javax.validation.constraints.NotNull;
4 7
5 import net.ziemers.swxercise.db.BaseEntity; 8 import net.ziemers.swxercise.db.BaseEntity;
6 9
@@ -11,6 +14,18 @@ public class User extends BaseEntity { @@ -11,6 +14,18 @@ public class User extends BaseEntity {
11 14
12 private String lastname; 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 public String getFirstname() { 29 public String getFirstname() {
15 return firstname; 30 return firstname;
16 } 31 }
@@ -27,4 +42,13 @@ public class User extends BaseEntity { @@ -27,4 +42,13 @@ public class User extends BaseEntity {
27 this.lastname = lastname; 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,20 +4,19 @@ import java.util.Collection;
4 4
5 import javax.enterprise.context.ApplicationScoped; 5 import javax.enterprise.context.ApplicationScoped;
6 import javax.inject.Inject; 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 import javax.ws.rs.core.MediaType; 8 import javax.ws.rs.core.MediaType;
12 9
  10 +import net.ziemers.swxercise.lg.user.Profile;
13 import net.ziemers.swxercise.lg.user.User; 11 import net.ziemers.swxercise.lg.user.User;
  12 +import net.ziemers.swxercise.lg.user.dto.UserDto;
14 import net.ziemers.swxercise.lg.user.service.UserService; 13 import net.ziemers.swxercise.lg.user.service.UserService;
15 14
16 @ApplicationScoped 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 @Inject 21 @Inject
23 private UserService userService; 22 private UserService userService;
@@ -36,10 +35,32 @@ public class RestController { @@ -36,10 +35,32 @@ public class RestController {
36 } 35 }
37 36
38 @GET 37 @GET
39 - @Path("/get") 38 + @Path("/all")
40 @Produces(MediaType.APPLICATION_JSON) 39 @Produces(MediaType.APPLICATION_JSON)
41 public Collection<User> getAllUsers() { 40 public Collection<User> getAllUsers() {
42 return userService.findAllUsers(); 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,10 +7,10 @@ import org.mockito.InjectMocks;
7 import org.mockito.junit.MockitoJUnitRunner; 7 import org.mockito.junit.MockitoJUnitRunner;
8 8
9 @RunWith(MockitoJUnitRunner.class) 9 @RunWith(MockitoJUnitRunner.class)
10 -public class RestControllerTest { 10 +public class RestViewControllerTest {
11 11
12 @InjectMocks 12 @InjectMocks
13 - private RestController underTest; 13 + private RestViewController underTest;
14 14
15 @Test 15 @Test
16 public void test() { 16 public void test() {