From 5d73763f9bc8406e4f0538ba4ad103a9827b3656 Mon Sep 17 00:00:00 2001 From: Eugeny2019 Date: Tue, 4 Jun 2019 23:45:35 +1000 Subject: [PATCH 1/5] Task #1. User created. Integration test passed. All entities mindlessly copied from Cat. --- .../java/io/khasang/pm/config/AppConfig.java | 8 ++ .../khasang/pm/controller/AppController.java | 2 +- .../khasang/pm/controller/CatController.java | 2 +- .../khasang/pm/controller/UserController.java | 39 ++++++ src/main/java/io/khasang/pm/dao/UserDao.java | 8 ++ .../io/khasang/pm/dao/impl/UserDaoImpl.java | 10 ++ src/main/java/io/khasang/pm/entity/User.java | 57 +++++++++ .../io/khasang/pm/service/UserService.java | 31 +++++ .../pm/service/impl/UserServiceImpl.java | 34 ++++++ src/main/resources/ioc.xml | 6 +- src/main/webapp/WEB-INF/views/users.jsp | 115 ++++++++++++++++++ .../UserControllerIntegrationTest.java | 94 ++++++++++++++ 12 files changed, 401 insertions(+), 5 deletions(-) create mode 100644 src/main/java/io/khasang/pm/controller/UserController.java create mode 100644 src/main/java/io/khasang/pm/dao/UserDao.java create mode 100644 src/main/java/io/khasang/pm/dao/impl/UserDaoImpl.java create mode 100644 src/main/java/io/khasang/pm/entity/User.java create mode 100644 src/main/java/io/khasang/pm/service/UserService.java create mode 100644 src/main/java/io/khasang/pm/service/impl/UserServiceImpl.java create mode 100644 src/main/webapp/WEB-INF/views/users.jsp create mode 100644 src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java diff --git a/src/main/java/io/khasang/pm/config/AppConfig.java b/src/main/java/io/khasang/pm/config/AppConfig.java index 9226643..baf6801 100644 --- a/src/main/java/io/khasang/pm/config/AppConfig.java +++ b/src/main/java/io/khasang/pm/config/AppConfig.java @@ -1,8 +1,11 @@ package io.khasang.pm.config; import io.khasang.pm.dao.CatDao; +import io.khasang.pm.dao.UserDao; import io.khasang.pm.dao.impl.CatDaoImpl; +import io.khasang.pm.dao.impl.UserDaoImpl; import io.khasang.pm.entity.Cat; +import io.khasang.pm.entity.User; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; @@ -16,4 +19,9 @@ public CatDao catDao() { return new CatDaoImpl(Cat.class); } + @Bean + public UserDao userDao() { + return new UserDaoImpl(User.class); + } + } diff --git a/src/main/java/io/khasang/pm/controller/AppController.java b/src/main/java/io/khasang/pm/controller/AppController.java index 402ccad..5aeaadb 100644 --- a/src/main/java/io/khasang/pm/controller/AppController.java +++ b/src/main/java/io/khasang/pm/controller/AppController.java @@ -28,7 +28,7 @@ public String getAdminPage() { @RequestMapping("/") public String getHelloPage() { - return "cat"; + return "users"; } @RequestMapping("/create") diff --git a/src/main/java/io/khasang/pm/controller/CatController.java b/src/main/java/io/khasang/pm/controller/CatController.java index c3d8403..25b5c02 100644 --- a/src/main/java/io/khasang/pm/controller/CatController.java +++ b/src/main/java/io/khasang/pm/controller/CatController.java @@ -36,4 +36,4 @@ public List getAll(){ public void setCatService(CatService catService) { this.catService = catService; } -} +} \ No newline at end of file diff --git a/src/main/java/io/khasang/pm/controller/UserController.java b/src/main/java/io/khasang/pm/controller/UserController.java new file mode 100644 index 0000000..436fc5d --- /dev/null +++ b/src/main/java/io/khasang/pm/controller/UserController.java @@ -0,0 +1,39 @@ +package io.khasang.pm.controller; + +import io.khasang.pm.entity.User; +import io.khasang.pm.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Controller +@RequestMapping("/users") +// localhost:8080/user +public class UserController { + private UserService userService; + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json;charset=utf-8") + @ResponseBody + public User addUser(@RequestBody User user) { + return userService.add(user); + } + + @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) + @ResponseBody + public User getById(@PathVariable("id") long id) { + return userService.getById(id); + } + + @RequestMapping(value = "/all", method = RequestMethod.GET) + @ResponseBody + public List getAll(){ + return userService.getAll(); + } + + @Autowired + public void setUserService(UserService userService) { + this.userService = userService; + } +} \ No newline at end of file diff --git a/src/main/java/io/khasang/pm/dao/UserDao.java b/src/main/java/io/khasang/pm/dao/UserDao.java new file mode 100644 index 0000000..97bef7b --- /dev/null +++ b/src/main/java/io/khasang/pm/dao/UserDao.java @@ -0,0 +1,8 @@ +package io.khasang.pm.dao; + +import io.khasang.pm.entity.User; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Service; + +public interface UserDao extends BasicDao { +} diff --git a/src/main/java/io/khasang/pm/dao/impl/UserDaoImpl.java b/src/main/java/io/khasang/pm/dao/impl/UserDaoImpl.java new file mode 100644 index 0000000..a1c48bf --- /dev/null +++ b/src/main/java/io/khasang/pm/dao/impl/UserDaoImpl.java @@ -0,0 +1,10 @@ +package io.khasang.pm.dao.impl; + +import io.khasang.pm.dao.UserDao; +import io.khasang.pm.entity.User; + +public class UserDaoImpl extends BasicDaoImpl implements UserDao { + public UserDaoImpl(Class entityClass) { + super(entityClass); + } +} diff --git a/src/main/java/io/khasang/pm/entity/User.java b/src/main/java/io/khasang/pm/entity/User.java new file mode 100644 index 0000000..b08f364 --- /dev/null +++ b/src/main/java/io/khasang/pm/entity/User.java @@ -0,0 +1,57 @@ +package io.khasang.pm.entity; + +import javax.persistence.*; + +@Entity +@Table(name = "users") +public class User { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private long id; + + private String name; + private String login; + private String password; + private String function; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getFunction() { + return function; + } + + public void setFunction(String function) { + this.function = function; + } +} diff --git a/src/main/java/io/khasang/pm/service/UserService.java b/src/main/java/io/khasang/pm/service/UserService.java new file mode 100644 index 0000000..47c3f9d --- /dev/null +++ b/src/main/java/io/khasang/pm/service/UserService.java @@ -0,0 +1,31 @@ +package io.khasang.pm.service; + +import io.khasang.pm.entity.Cat; +import io.khasang.pm.entity.User; + +import java.util.List; + +public interface UserService { + /** + * required for adding cats to db + * + * @param user - user for adding + * @return added user + */ + User add(User user); + + /** + * getting specify user by ID + * + * @param id - user's id for receiving + * @return user by id + */ + User getById(long id); + + /** + * getting all users + * + * @return all users from DB + */ + List getAll(); +} diff --git a/src/main/java/io/khasang/pm/service/impl/UserServiceImpl.java b/src/main/java/io/khasang/pm/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..0677407 --- /dev/null +++ b/src/main/java/io/khasang/pm/service/impl/UserServiceImpl.java @@ -0,0 +1,34 @@ +package io.khasang.pm.service.impl; + +import io.khasang.pm.dao.UserDao; +import io.khasang.pm.entity.User; +import io.khasang.pm.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service("userService") +public class UserServiceImpl implements UserService { + private UserDao userDao; + + @Override + public User add(User user) { + return userDao.add(user); + } + + @Override + public User getById(long id) { + return userDao.getById(id); + } + + @Override + public List getAll() { + return userDao.getAll(); + } + + @Autowired + public void setUserDao(UserDao userDao) { + this.userDao = userDao; + } +} diff --git a/src/main/resources/ioc.xml b/src/main/resources/ioc.xml index 04676fa..78063c3 100644 --- a/src/main/resources/ioc.xml +++ b/src/main/resources/ioc.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> - - - + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/users.jsp b/src/main/webapp/WEB-INF/views/users.jsp new file mode 100644 index 0000000..3582ce1 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/users.jsp @@ -0,0 +1,115 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + Title + + + + +

User Menu

+ + + + + + + + + + + + + + + + + + + + + <> + name: + login: + password: + function: + + + +
Request typeURLValue
Get All users - GET/users/all + +
Get user by id - GET/users/get/{id} + id: + +
add new user - POST/users/add
+ +
+
+ RESPONSE> +
+
+
+ + \ No newline at end of file diff --git a/src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java b/src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java new file mode 100644 index 0000000..f730b9c --- /dev/null +++ b/src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java @@ -0,0 +1,94 @@ +package io.khasang.pm.controller; + +import io.khasang.pm.entity.Cat; +import io.khasang.pm.entity.User; +import org.junit.Assert; +import org.junit.Test; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.*; +import org.springframework.web.client.RestTemplate; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class UserControllerIntegrationTest { + + private static final String ROOT = "http://localhost:8080/users"; + private static final String ADD = "/add"; + private static final String GET = "/get"; + private static final String ALL = "/all"; + + @Test + public void checkAddUser() { + User barsik = createUser(); + + RestTemplate template = new RestTemplate(); + ResponseEntity responseEntity = template.exchange( + ROOT + GET + "/{id}", + HttpMethod.GET, + null, + User.class, + barsik.getId() + ); + + assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); + User receivedUser = responseEntity.getBody(); + Assert.assertNotNull(receivedUser); + + // update cat + + // select from db + } + + @Test + public void checkGettingAllUsers() { + // add h2db - before test clean all db data + createUser(); + createUser(); + + RestTemplate template = new RestTemplate(); + ResponseEntity> responseEntity = template.exchange( + ROOT + ALL, + HttpMethod.GET, + null, + new ParameterizedTypeReference>() { + } + ); + + List receivedUsers = responseEntity.getBody(); + assertNotNull(receivedUsers); + } + + private User createUser() { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON_UTF8); + + User user = prefillUser(); + + HttpEntity entity = new HttpEntity<>(user, headers); + RestTemplate template = new RestTemplate(); + User createdUser = template.exchange( + ROOT + ADD, + HttpMethod.POST, + entity, + User.class + ).getBody(); + + Assert.assertNotNull(createdUser); + assertEquals("igor", createdUser.getName()); + return createdUser; + } + + private User prefillUser() { + User user = new User(); + user.setName("igor"); + user.setLogin("igor"); + user.setPassword("igor"); + user.setFunction("spec"); + return user; + } + + +} From 897913fd8a91ac0d1924da7bd7eee33af6162810 Mon Sep 17 00:00:00 2001 From: Eugeny2019 Date: Fri, 7 Jun 2019 08:09:32 +1000 Subject: [PATCH 2/5] Task #1. Fixing problems --- .../khasang/pm/controller/AppController.java | 7 ++++++- .../khasang/pm/controller/UserController.java | 1 - src/main/java/io/khasang/pm/entity/User.java | 3 ++- src/main/webapp/WEB-INF/views/users.jsp | 2 +- .../UserControllerIntegrationTest.java | 18 ++++-------------- 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/main/java/io/khasang/pm/controller/AppController.java b/src/main/java/io/khasang/pm/controller/AppController.java index 5aeaadb..9a1be77 100644 --- a/src/main/java/io/khasang/pm/controller/AppController.java +++ b/src/main/java/io/khasang/pm/controller/AppController.java @@ -28,7 +28,7 @@ public String getAdminPage() { @RequestMapping("/") public String getHelloPage() { - return "users"; + return "cat"; } @RequestMapping("/create") @@ -42,6 +42,11 @@ public String getUserPage() { return "user"; } + @RequestMapping("/users") + public String getUsersPage() { + return "users"; + } + // localhost:8080/password/admin @RequestMapping("/password/{password}") public String getEncryptPassword(@PathVariable("password") String password, Model model) { diff --git a/src/main/java/io/khasang/pm/controller/UserController.java b/src/main/java/io/khasang/pm/controller/UserController.java index 436fc5d..20e99ac 100644 --- a/src/main/java/io/khasang/pm/controller/UserController.java +++ b/src/main/java/io/khasang/pm/controller/UserController.java @@ -10,7 +10,6 @@ @Controller @RequestMapping("/users") -// localhost:8080/user public class UserController { private UserService userService; diff --git a/src/main/java/io/khasang/pm/entity/User.java b/src/main/java/io/khasang/pm/entity/User.java index b08f364..538cfb1 100644 --- a/src/main/java/io/khasang/pm/entity/User.java +++ b/src/main/java/io/khasang/pm/entity/User.java @@ -9,8 +9,9 @@ public class User { @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private long id; - private String name; + + @Column(unique = true, nullable = false) private String login; private String password; private String function; diff --git a/src/main/webapp/WEB-INF/views/users.jsp b/src/main/webapp/WEB-INF/views/users.jsp index 3582ce1..524c3ba 100644 --- a/src/main/webapp/WEB-INF/views/users.jsp +++ b/src/main/webapp/WEB-INF/views/users.jsp @@ -95,7 +95,7 @@ add new user - POST /users/add - <> + name: login: password: diff --git a/src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java b/src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java index f730b9c..6f27de1 100644 --- a/src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java +++ b/src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java @@ -21,30 +21,24 @@ public class UserControllerIntegrationTest { private static final String ALL = "/all"; @Test - public void checkAddUser() { - User barsik = createUser(); - + public void checkGetUser() { + User user = createUser(); RestTemplate template = new RestTemplate(); ResponseEntity responseEntity = template.exchange( ROOT + GET + "/{id}", HttpMethod.GET, null, User.class, - barsik.getId() + user.getId() ); - assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); User receivedUser = responseEntity.getBody(); Assert.assertNotNull(receivedUser); - - // update cat - - // select from db + Assert.assertEquals("igor", receivedUser.getName()); } @Test public void checkGettingAllUsers() { - // add h2db - before test clean all db data createUser(); createUser(); @@ -64,9 +58,7 @@ public void checkGettingAllUsers() { private User createUser() { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); - User user = prefillUser(); - HttpEntity entity = new HttpEntity<>(user, headers); RestTemplate template = new RestTemplate(); User createdUser = template.exchange( @@ -89,6 +81,4 @@ private User prefillUser() { user.setFunction("spec"); return user; } - - } From fd2cb9f3cf1fafefbc48589f30167b415e016e93 Mon Sep 17 00:00:00 2001 From: Eugeny2019 Date: Fri, 7 Jun 2019 23:11:48 +1000 Subject: [PATCH 3/5] Task #1. Fixing problems. Deleted field "id". Field "login" is unique. --- .../khasang/pm/controller/UserController.java | 6 +++--- src/main/java/io/khasang/pm/dao/BasicDao.java | 8 +++++++ .../io/khasang/pm/dao/impl/BasicDaoImpl.java | 5 +++++ src/main/java/io/khasang/pm/entity/User.java | 13 +----------- .../io/khasang/pm/service/UserService.java | 4 ++-- .../pm/service/impl/UserServiceImpl.java | 4 ++-- src/main/webapp/WEB-INF/views/users.jsp | 12 +++++------ .../UserControllerIntegrationTest.java | 21 +++++++++---------- 8 files changed, 37 insertions(+), 36 deletions(-) diff --git a/src/main/java/io/khasang/pm/controller/UserController.java b/src/main/java/io/khasang/pm/controller/UserController.java index 20e99ac..b9594a0 100644 --- a/src/main/java/io/khasang/pm/controller/UserController.java +++ b/src/main/java/io/khasang/pm/controller/UserController.java @@ -19,10 +19,10 @@ public User addUser(@RequestBody User user) { return userService.add(user); } - @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) + @RequestMapping(value = "/get/{login}", method = RequestMethod.GET) @ResponseBody - public User getById(@PathVariable("id") long id) { - return userService.getById(id); + public User getById(@PathVariable("login") String login) { + return userService.getByLogin(login); } @RequestMapping(value = "/all", method = RequestMethod.GET) diff --git a/src/main/java/io/khasang/pm/dao/BasicDao.java b/src/main/java/io/khasang/pm/dao/BasicDao.java index d16e7af..d2668c1 100644 --- a/src/main/java/io/khasang/pm/dao/BasicDao.java +++ b/src/main/java/io/khasang/pm/dao/BasicDao.java @@ -19,6 +19,14 @@ public interface BasicDao { */ T getById(long id); + /** + * getting specify entity by ID + * + * @param login entity's login for receiving + * @return entity by login + */ + T getByLogin(String login); + /** * getting all entities * diff --git a/src/main/java/io/khasang/pm/dao/impl/BasicDaoImpl.java b/src/main/java/io/khasang/pm/dao/impl/BasicDaoImpl.java index a56fa2b..3f8263d 100644 --- a/src/main/java/io/khasang/pm/dao/impl/BasicDaoImpl.java +++ b/src/main/java/io/khasang/pm/dao/impl/BasicDaoImpl.java @@ -32,6 +32,11 @@ public T getById(long id) { return getSession().get(entityClass, id); } + @Override + public T getByLogin(String login) { + return getSession().get(entityClass, login); + } + @Override public List getAll() { // select * from table diff --git a/src/main/java/io/khasang/pm/entity/User.java b/src/main/java/io/khasang/pm/entity/User.java index 538cfb1..0a82844 100644 --- a/src/main/java/io/khasang/pm/entity/User.java +++ b/src/main/java/io/khasang/pm/entity/User.java @@ -5,25 +5,14 @@ @Entity @Table(name = "users") public class User { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - @Column(name = "id") - private long id; private String name; + @Id @Column(unique = true, nullable = false) private String login; private String password; private String function; - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - public String getName() { return name; } diff --git a/src/main/java/io/khasang/pm/service/UserService.java b/src/main/java/io/khasang/pm/service/UserService.java index 47c3f9d..a8accd7 100644 --- a/src/main/java/io/khasang/pm/service/UserService.java +++ b/src/main/java/io/khasang/pm/service/UserService.java @@ -17,10 +17,10 @@ public interface UserService { /** * getting specify user by ID * - * @param id - user's id for receiving + * @param login - user's id for receiving * @return user by id */ - User getById(long id); + User getByLogin(String login); /** * getting all users diff --git a/src/main/java/io/khasang/pm/service/impl/UserServiceImpl.java b/src/main/java/io/khasang/pm/service/impl/UserServiceImpl.java index 0677407..a469c11 100644 --- a/src/main/java/io/khasang/pm/service/impl/UserServiceImpl.java +++ b/src/main/java/io/khasang/pm/service/impl/UserServiceImpl.java @@ -18,8 +18,8 @@ public User add(User user) { } @Override - public User getById(long id) { - return userDao.getById(id); + public User getByLogin(String login) { + return userDao.getByLogin(login); } @Override diff --git a/src/main/webapp/WEB-INF/views/users.jsp b/src/main/webapp/WEB-INF/views/users.jsp index 524c3ba..ae434e8 100644 --- a/src/main/webapp/WEB-INF/views/users.jsp +++ b/src/main/webapp/WEB-INF/views/users.jsp @@ -25,10 +25,10 @@ }); }; - var RestGet = function (id) { + var RestGet = function (login) { $.ajax({ type: 'GET', - url: service + '/get/' + id, + url: service + '/get/' + login, dataType: 'json', accept: 'json', contentType: 'application/json;utf-8', @@ -85,11 +85,11 @@ - Get user by id - GET - /users/get/{id} + Get user by login - GET + /users/get/{login} - id: - + login: + diff --git a/src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java b/src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java index 6f27de1..b445f13 100644 --- a/src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java +++ b/src/test/java/io/khasang/pm/controller/UserControllerIntegrationTest.java @@ -1,6 +1,5 @@ package io.khasang.pm.controller; -import io.khasang.pm.entity.Cat; import io.khasang.pm.entity.User; import org.junit.Assert; import org.junit.Test; @@ -22,25 +21,25 @@ public class UserControllerIntegrationTest { @Test public void checkGetUser() { - User user = createUser(); + User user = createUser("asdf1"); RestTemplate template = new RestTemplate(); ResponseEntity responseEntity = template.exchange( - ROOT + GET + "/{id}", + ROOT + GET + "/" + user.getLogin(), HttpMethod.GET, null, User.class, - user.getId() + user.getLogin() ); assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); User receivedUser = responseEntity.getBody(); Assert.assertNotNull(receivedUser); - Assert.assertEquals("igor", receivedUser.getName()); + Assert.assertEquals(user.getLogin(), receivedUser.getLogin()); } @Test public void checkGettingAllUsers() { - createUser(); - createUser(); + createUser("asdf2"); + createUser("asdf3"); RestTemplate template = new RestTemplate(); ResponseEntity> responseEntity = template.exchange( @@ -55,10 +54,10 @@ public void checkGettingAllUsers() { assertNotNull(receivedUsers); } - private User createUser() { + private User createUser(String login) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); - User user = prefillUser(); + User user = prefillUser(login); HttpEntity entity = new HttpEntity<>(user, headers); RestTemplate template = new RestTemplate(); User createdUser = template.exchange( @@ -73,10 +72,10 @@ private User createUser() { return createdUser; } - private User prefillUser() { + private User prefillUser(String login) { User user = new User(); user.setName("igor"); - user.setLogin("igor"); + user.setLogin(login); user.setPassword("igor"); user.setFunction("spec"); return user; From 25afe23a295a1e46820d6813cf5b34b51cc565f4 Mon Sep 17 00:00:00 2001 From: Eugeny2019 Date: Tue, 11 Jun 2019 00:31:20 +1000 Subject: [PATCH 4/5] Add Car, Employee --- .../java/io/khasang/pm/config/AppConfig.java | 21 ++-- .../pm/controller/EmployeeController.java | 38 +++++++ .../khasang/pm/controller/UserController.java | 2 +- .../java/io/khasang/pm/dao/EmployeeDao.java | 7 ++ .../khasang/pm/dao/impl/EmployeeDaoImpl.java | 13 +++ src/main/java/io/khasang/pm/entity/Car.java | 55 +++++++++ .../java/io/khasang/pm/entity/Employee.java | 51 +++++++++ .../khasang/pm/service/EmployeeService.java | 30 +++++ .../pm/service/impl/EmployeeServiceImpl.java | 35 ++++++ .../CatControllerIntegrationTest.java | 2 - .../EmployeeControllerIntegrationTest.java | 104 ++++++++++++++++++ 11 files changed, 343 insertions(+), 15 deletions(-) create mode 100644 src/main/java/io/khasang/pm/controller/EmployeeController.java create mode 100644 src/main/java/io/khasang/pm/dao/EmployeeDao.java create mode 100644 src/main/java/io/khasang/pm/dao/impl/EmployeeDaoImpl.java create mode 100644 src/main/java/io/khasang/pm/entity/Car.java create mode 100644 src/main/java/io/khasang/pm/entity/Employee.java create mode 100644 src/main/java/io/khasang/pm/service/EmployeeService.java create mode 100644 src/main/java/io/khasang/pm/service/impl/EmployeeServiceImpl.java create mode 100644 src/test/java/io/khasang/pm/controller/EmployeeControllerIntegrationTest.java diff --git a/src/main/java/io/khasang/pm/config/AppConfig.java b/src/main/java/io/khasang/pm/config/AppConfig.java index d0b87db..d9812fe 100644 --- a/src/main/java/io/khasang/pm/config/AppConfig.java +++ b/src/main/java/io/khasang/pm/config/AppConfig.java @@ -1,17 +1,8 @@ package io.khasang.pm.config; -import io.khasang.pm.dao.CatDao; -import io.khasang.pm.dao.ProjectDao; -import io.khasang.pm.dao.DocumentDao; -import io.khasang.pm.dao.UserDao; -import io.khasang.pm.dao.impl.CatDaoImpl; -import io.khasang.pm.dao.impl.ProjectDaoImpl; -import io.khasang.pm.dao.impl.DocumentDaoImpl; -import io.khasang.pm.dao.impl.UserDaoImpl; -import io.khasang.pm.entity.Cat; -import io.khasang.pm.entity.Project; -import io.khasang.pm.entity.Document; -import io.khasang.pm.entity.User; +import io.khasang.pm.dao.*; +import io.khasang.pm.dao.impl.*; +import io.khasang.pm.entity.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; @@ -39,4 +30,10 @@ public DocumentDao documentDao(){ return new DocumentDaoImpl(Document.class); } + @Bean + public EmployeeDao employeeDao(){ + return new EmployeeDaoImpl(Employee.class); + } + + } diff --git a/src/main/java/io/khasang/pm/controller/EmployeeController.java b/src/main/java/io/khasang/pm/controller/EmployeeController.java new file mode 100644 index 0000000..28512e4 --- /dev/null +++ b/src/main/java/io/khasang/pm/controller/EmployeeController.java @@ -0,0 +1,38 @@ +package io.khasang.pm.controller; + +import io.khasang.pm.entity.Employee; +import io.khasang.pm.service.EmployeeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Controller +@RequestMapping("/employee") +public class EmployeeController { + private EmployeeService employeeService; + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json;charset=utf-8") + @ResponseBody + public Employee addEmployee(@RequestBody Employee employee) { + return employeeService.add(employee); + } + + @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) + @ResponseBody + public Employee getById(@PathVariable("id") long id) { + return employeeService.getById(id); + } + + @RequestMapping(value = "/all", method = RequestMethod.GET) + @ResponseBody + public List getAll() { + return employeeService.getAll(); + } + + @Autowired + public void setEmployeeService(EmployeeService employeeService) { + this.employeeService = employeeService; + } +} diff --git a/src/main/java/io/khasang/pm/controller/UserController.java b/src/main/java/io/khasang/pm/controller/UserController.java index b9594a0..eb8ddeb 100644 --- a/src/main/java/io/khasang/pm/controller/UserController.java +++ b/src/main/java/io/khasang/pm/controller/UserController.java @@ -21,7 +21,7 @@ public User addUser(@RequestBody User user) { @RequestMapping(value = "/get/{login}", method = RequestMethod.GET) @ResponseBody - public User getById(@PathVariable("login") String login) { + public User getByLogin(@PathVariable("login") String login) { return userService.getByLogin(login); } diff --git a/src/main/java/io/khasang/pm/dao/EmployeeDao.java b/src/main/java/io/khasang/pm/dao/EmployeeDao.java new file mode 100644 index 0000000..77d3137 --- /dev/null +++ b/src/main/java/io/khasang/pm/dao/EmployeeDao.java @@ -0,0 +1,7 @@ +package io.khasang.pm.dao; + +import io.khasang.pm.entity.Cat; +import io.khasang.pm.entity.Employee; + +public interface EmployeeDao extends BasicDao { +} diff --git a/src/main/java/io/khasang/pm/dao/impl/EmployeeDaoImpl.java b/src/main/java/io/khasang/pm/dao/impl/EmployeeDaoImpl.java new file mode 100644 index 0000000..d177118 --- /dev/null +++ b/src/main/java/io/khasang/pm/dao/impl/EmployeeDaoImpl.java @@ -0,0 +1,13 @@ +package io.khasang.pm.dao.impl; + +import io.khasang.pm.dao.BasicDao; +import io.khasang.pm.dao.CatDao; +import io.khasang.pm.dao.EmployeeDao; +import io.khasang.pm.entity.Cat; +import io.khasang.pm.entity.Employee; + +public class EmployeeDaoImpl extends BasicDaoImpl implements EmployeeDao { + public EmployeeDaoImpl(Class entityClass) { + super(entityClass); + } +} diff --git a/src/main/java/io/khasang/pm/entity/Car.java b/src/main/java/io/khasang/pm/entity/Car.java new file mode 100644 index 0000000..e93ea6f --- /dev/null +++ b/src/main/java/io/khasang/pm/entity/Car.java @@ -0,0 +1,55 @@ +package io.khasang.pm.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import jdk.nashorn.internal.ir.annotations.Ignore; + +import javax.persistence.*; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name="cars") +public class Car { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String model; + private LocalDate year; + + //@JsonIgnore + @ManyToMany(fetch = FetchType.EAGER, mappedBy = "carList") + private List employees = new ArrayList<>(); + + public Car() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public LocalDate getYear() { + return year; + } + + public void setYear(LocalDate year) { + this.year = year; + } + + public void setEmployees(List employees) { + this.employees = employees; + } +} diff --git a/src/main/java/io/khasang/pm/entity/Employee.java b/src/main/java/io/khasang/pm/entity/Employee.java new file mode 100644 index 0000000..48e8732 --- /dev/null +++ b/src/main/java/io/khasang/pm/entity/Employee.java @@ -0,0 +1,51 @@ +package io.khasang.pm.entity; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "employees") +public class Employee { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String name; + private String title; + + @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) + private List carList= new ArrayList<>(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List getCarList() { + return carList; + } + + public void setCarList(List carList) { + this.carList = carList; + } +} diff --git a/src/main/java/io/khasang/pm/service/EmployeeService.java b/src/main/java/io/khasang/pm/service/EmployeeService.java new file mode 100644 index 0000000..1dae227 --- /dev/null +++ b/src/main/java/io/khasang/pm/service/EmployeeService.java @@ -0,0 +1,30 @@ +package io.khasang.pm.service; + +import io.khasang.pm.entity.Employee; + +import java.util.List; + +public interface EmployeeService { + /** + * required for adding employee to db + * + * @param employee - employee for adding + * @return added employee + */ + Employee add(Employee employee); + + /** + * getting specify employee by ID + * + * @param id - employee's id for receiving + * @return employee by id + */ + Employee getById(long id); + + /** + * getting all employees + * + * @return all employees from DB + */ + List getAll(); +} diff --git a/src/main/java/io/khasang/pm/service/impl/EmployeeServiceImpl.java b/src/main/java/io/khasang/pm/service/impl/EmployeeServiceImpl.java new file mode 100644 index 0000000..a6f1237 --- /dev/null +++ b/src/main/java/io/khasang/pm/service/impl/EmployeeServiceImpl.java @@ -0,0 +1,35 @@ +package io.khasang.pm.service.impl; + +import io.khasang.pm.dao.CatDao; +import io.khasang.pm.dao.EmployeeDao; +import io.khasang.pm.entity.Employee; +import io.khasang.pm.service.EmployeeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service("employeeService") +public class EmployeeServiceImpl implements EmployeeService { + private EmployeeDao employeeDao; + + @Override + public Employee add(Employee employee) { + return employeeDao.add(employee); + } + + @Override + public Employee getById(long id) { + return employeeDao.getById(id); + } + + @Override + public List getAll() { + return employeeDao.getAll(); + } + + @Autowired + public void setCatDao(EmployeeDao employeeDao) { + this.employeeDao = employeeDao; + } +} diff --git a/src/test/java/io/khasang/pm/controller/CatControllerIntegrationTest.java b/src/test/java/io/khasang/pm/controller/CatControllerIntegrationTest.java index e5ea300..bb130e8 100644 --- a/src/test/java/io/khasang/pm/controller/CatControllerIntegrationTest.java +++ b/src/test/java/io/khasang/pm/controller/CatControllerIntegrationTest.java @@ -100,6 +100,4 @@ private Cat prefillCat() { return cat; } - - } diff --git a/src/test/java/io/khasang/pm/controller/EmployeeControllerIntegrationTest.java b/src/test/java/io/khasang/pm/controller/EmployeeControllerIntegrationTest.java new file mode 100644 index 0000000..b79f3ec --- /dev/null +++ b/src/test/java/io/khasang/pm/controller/EmployeeControllerIntegrationTest.java @@ -0,0 +1,104 @@ +package io.khasang.pm.controller; + +import io.khasang.pm.entity.Car; +import io.khasang.pm.entity.Employee; +import org.junit.Assert; +import org.junit.Test; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.*; +import org.springframework.web.client.RestTemplate; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class EmployeeControllerIntegrationTest { + private static final String ROOT = "http://localhost:8080/employee"; + private static final String ADD = "/add"; + private static final String GET = "/get"; + private static final String ALL = "/all"; + + @Test + public void checkAddEmployee() { + Employee barsik = createEmployee(); + + RestTemplate template = new RestTemplate(); + ResponseEntity responseEntity = template.exchange( + ROOT + GET + "/{id}", + HttpMethod.GET, + null, + Employee.class, + barsik.getId() + ); + + assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); + Employee receivedEmployee = responseEntity.getBody(); + Assert.assertNotNull(receivedEmployee); + + + } + + @Test + public void checkGettingAllEmployees() { + createEmployee(); + createEmployee(); + + RestTemplate template = new RestTemplate(); + ResponseEntity> responseEntity = template.exchange( + ROOT + ALL, + HttpMethod.GET, + null, + new ParameterizedTypeReference>() { + } + ); + + List receivedEmployees = responseEntity.getBody(); + assertNotNull(receivedEmployees); + } + + private Employee createEmployee() { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON_UTF8); + + Employee employee = prefillEmployee(); + + HttpEntity entity = new HttpEntity<>(employee, headers); + RestTemplate template = new RestTemplate(); + Employee createdEmployee = template.exchange( + ROOT + ADD, + HttpMethod.POST, + entity, + Employee.class + ).getBody(); + + Assert.assertNotNull(createdEmployee); + assertEquals("Barsik", createdEmployee.getName()); + return createdEmployee; + } + + private Employee prefillEmployee() { + Employee employee = new Employee(); + employee.setTitle("Boss"); + employee.setName("Barsik"); + + Car car1 = new Car(); + car1.setModel("BMW"); + car1.setYear(LocalDate.of(2008, 11, 21)); + + Car car2 = new Car(); + car2.setModel("Lada"); + car2.setYear(LocalDate.of(2013, 3, 16)); + + List cars = new ArrayList<>(); + cars.add(car1); + cars.add(car2); + + employee.setCarList(cars); + + return employee; + } + +} From 89d355615eccd4d10bf285613ab0d59cf90cc9ca Mon Sep 17 00:00:00 2001 From: Eugeny2019 Date: Fri, 14 Jun 2019 20:05:43 +1000 Subject: [PATCH 5/5] Add Car, Employee --- src/main/java/io/khasang/pm/entity/Car.java | 3 --- .../java/io/khasang/pm/service/impl/EmployeeServiceImpl.java | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/io/khasang/pm/entity/Car.java b/src/main/java/io/khasang/pm/entity/Car.java index e93ea6f..a82bd47 100644 --- a/src/main/java/io/khasang/pm/entity/Car.java +++ b/src/main/java/io/khasang/pm/entity/Car.java @@ -22,9 +22,6 @@ public class Car { @ManyToMany(fetch = FetchType.EAGER, mappedBy = "carList") private List employees = new ArrayList<>(); - public Car() { - } - public Long getId() { return id; } diff --git a/src/main/java/io/khasang/pm/service/impl/EmployeeServiceImpl.java b/src/main/java/io/khasang/pm/service/impl/EmployeeServiceImpl.java index a6f1237..59e3aa3 100644 --- a/src/main/java/io/khasang/pm/service/impl/EmployeeServiceImpl.java +++ b/src/main/java/io/khasang/pm/service/impl/EmployeeServiceImpl.java @@ -29,7 +29,7 @@ public List getAll() { } @Autowired - public void setCatDao(EmployeeDao employeeDao) { + public void setEmployeeDao(EmployeeDao employeeDao) { this.employeeDao = employeeDao; } }