diff --git a/src/main/java/io/khasang/rtrail/config/HibernateConfig.java b/src/main/java/io/khasang/rtrail/config/HibernateConfig.java index ade9e44..9d848d2 100644 --- a/src/main/java/io/khasang/rtrail/config/HibernateConfig.java +++ b/src/main/java/io/khasang/rtrail/config/HibernateConfig.java @@ -33,7 +33,7 @@ public DataSource dataSource() { } @Bean - public LocalSessionFactoryBean sessionFactory(){ + public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setPackagesToScan("io.khasang.rtrail.entity"); @@ -53,7 +53,7 @@ private Properties properties() { @Bean @Autowired - public HibernateTransactionManager transactionManager(SessionFactory sessionFactory){ + public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) { HibernateTransactionManager transactionManager = new HibernateTransactionManager(); transactionManager.setSessionFactory(sessionFactory); return transactionManager; diff --git a/src/main/java/io/khasang/rtrail/controller/CatController.java b/src/main/java/io/khasang/rtrail/controller/CatController.java index f7d9068..00e8d50 100644 --- a/src/main/java/io/khasang/rtrail/controller/CatController.java +++ b/src/main/java/io/khasang/rtrail/controller/CatController.java @@ -20,6 +20,12 @@ public Cat addCat(@RequestBody Cat cat) { return catService.addCat(cat); } + @RequestMapping(value = "/update", method = RequestMethod.PUT, produces = "application/json;charset=utf-8") + @ResponseBody + public Cat updateCat(@RequestBody Cat cat) { + return catService.updateCat(cat); + } + @RequestMapping(value = "/get/{id}", method = RequestMethod.GET, produces = "application/json;charset=utf-8") @ResponseBody public Cat getCatById(@PathVariable(value = "id") String id) { @@ -38,6 +44,7 @@ public List getCatsByName(@PathVariable(value = "name") String name) { return catService.getCatsByName(name); } + //localhost:8080/cat/delete?id="2" @RequestMapping(value = "/delete", method = RequestMethod.DELETE, produces = "application/json;charset=utf-8") @ResponseBody public Cat deleteCat(@RequestParam(value = "id") String id) { diff --git a/src/main/java/io/khasang/rtrail/dao/BasicDao.java b/src/main/java/io/khasang/rtrail/dao/BasicDao.java index 50b4da6..146dc3a 100644 --- a/src/main/java/io/khasang/rtrail/dao/BasicDao.java +++ b/src/main/java/io/khasang/rtrail/dao/BasicDao.java @@ -41,4 +41,6 @@ public interface BasicDao { * @return deleted entityForDelete */ T delete(T entityForDelete); + + T update(T cat); } diff --git a/src/main/java/io/khasang/rtrail/dao/impl/BasicDaoImpl.java b/src/main/java/io/khasang/rtrail/dao/impl/BasicDaoImpl.java index 21a9c37..5c03b60 100644 --- a/src/main/java/io/khasang/rtrail/dao/impl/BasicDaoImpl.java +++ b/src/main/java/io/khasang/rtrail/dao/impl/BasicDaoImpl.java @@ -44,6 +44,12 @@ public List getList() { return getSessionFactory().createQuery(criteriaQuery).list(); } + @Override + public T update(T cat) { + getSessionFactory().update(cat); + return cat; + } + @Override public T delete(T entityForDelete) { getSessionFactory().delete(entityForDelete); diff --git a/src/main/java/io/khasang/rtrail/entity/Cat.java b/src/main/java/io/khasang/rtrail/entity/Cat.java index 86660db..7e80a98 100644 --- a/src/main/java/io/khasang/rtrail/entity/Cat.java +++ b/src/main/java/io/khasang/rtrail/entity/Cat.java @@ -1,6 +1,8 @@ package io.khasang.rtrail.entity; import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; @Entity @Table(name = "cats") @@ -12,6 +14,16 @@ public class Cat { private String name; @Column(name = "descr") private String description; + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + private List catWomanList = new ArrayList<>(); + + public List getCatWomanList() { + return catWomanList; + } + + public void setCatWomanList(List catWomanList) { + this.catWomanList = catWomanList; + } public String getName() { return name; diff --git a/src/main/java/io/khasang/rtrail/entity/CatWoman.java b/src/main/java/io/khasang/rtrail/entity/CatWoman.java new file mode 100644 index 0000000..0c2cdb8 --- /dev/null +++ b/src/main/java/io/khasang/rtrail/entity/CatWoman.java @@ -0,0 +1,29 @@ +package io.khasang.rtrail.entity; + +import javax.persistence.*; + +@Entity +@Table(name = "cat_woman") +public class CatWoman { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getId() { + + return id; + } + + public void setId(Long id) { + this.id = id; + } +} diff --git a/src/main/java/io/khasang/rtrail/service/CatService.java b/src/main/java/io/khasang/rtrail/service/CatService.java index 61eb215..f610fa6 100644 --- a/src/main/java/io/khasang/rtrail/service/CatService.java +++ b/src/main/java/io/khasang/rtrail/service/CatService.java @@ -44,4 +44,6 @@ public interface CatService { * @return cats by name */ List getCatsByName(String name); + + Cat updateCat(Cat cat); } diff --git a/src/main/java/io/khasang/rtrail/service/impl/CatServiceImpl.java b/src/main/java/io/khasang/rtrail/service/impl/CatServiceImpl.java index d1b85ad..c354102 100644 --- a/src/main/java/io/khasang/rtrail/service/impl/CatServiceImpl.java +++ b/src/main/java/io/khasang/rtrail/service/impl/CatServiceImpl.java @@ -28,6 +28,11 @@ public List getAllCats() { return catDao.getList(); } + @Override + public Cat updateCat(Cat cat) { + return catDao.update(cat); + } + @Override public List getCatsByName(String name) { return catDao.getByName(name); diff --git a/src/main/resources/hibernate.properties b/src/main/resources/hibernate.properties index ade44c6..17a6eb1 100644 --- a/src/main/resources/hibernate.properties +++ b/src/main/resources/hibernate.properties @@ -5,4 +5,4 @@ hibernate.password=root hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect hibernate.show_sql=true hibernate.format_sql=true -hibernate.hbm2ddl.auto=update +hibernate.hbm2ddl.auto=create diff --git a/src/test/java/io/khasang/rtrail/controller/CatControllerIntegrationTest.java b/src/test/java/io/khasang/rtrail/controller/CatControllerIntegrationTest.java index a734d83..228d68d 100644 --- a/src/test/java/io/khasang/rtrail/controller/CatControllerIntegrationTest.java +++ b/src/test/java/io/khasang/rtrail/controller/CatControllerIntegrationTest.java @@ -2,13 +2,16 @@ import io.khasang.rtrail.dao.CatDao; import io.khasang.rtrail.entity.Cat; +import io.khasang.rtrail.entity.CatWoman; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.*; import org.springframework.web.client.RestTemplate; +import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertEquals; @@ -18,6 +21,8 @@ public class CatControllerIntegrationTest { private final static String ROOT = "http://localhost:8080/cat"; private final static String ADD = "/add"; + private final static String UPDATE = "/update"; + private final static String DELETE = "/delete"; private final static String ALL = "/all"; private final static String GET_BY_ID = "/get"; @@ -48,6 +53,51 @@ public void checkAddCatAndGet() { Cat recievedCat = responseEntity.getBody(); assertNotNull(recievedCat); + + deleteCat(cat.getId()); + + ResponseEntity responseEntity2 = template.exchange( + ROOT + GET_BY_ID + "/{id}", + HttpMethod.GET, + null, + Cat.class, + cat.getId() + ); + assertEquals("OK", responseEntity2.getStatusCode().getReasonPhrase()); + } + + @Test + public void checkUpdate() { + Cat cat = createCat(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON_UTF8); + + cat.setName("New Name"); + + HttpEntity httpEntity = new HttpEntity<>(cat, headers); + RestTemplate template = new RestTemplate(); + + Cat updatedCat = template.exchange( + ROOT + UPDATE, + HttpMethod.PUT, + httpEntity, + Cat.class + ).getBody(); + + ResponseEntity responseEntity = template.exchange( + ROOT + GET_BY_ID + "/{id}", + HttpMethod.GET, + null, + Cat.class, + updatedCat.getId() + ); + + assertEquals("OK", responseEntity.getStatusCode().getReasonPhrase()); + + Cat receivedCat = responseEntity.getBody(); + assertNotNull(receivedCat); + assertEquals("New Name", receivedCat.getName()); } @Test @@ -98,6 +148,32 @@ private Cat prefillCat(String name) { cat.setName(name); cat.setDescription("hungry"); + CatWoman catWoman1 = new CatWoman(); + CatWoman catWoman2 = new CatWoman(); + + catWoman1.setName("Riska"); + catWoman2.setName("Murka"); + + List catWomanList = new ArrayList<>(); + catWomanList.add(catWoman1); + catWomanList.add(catWoman2); + + cat.setCatWomanList(catWomanList); + return cat; } + + private void deleteCat(Long id){ + RestTemplate template = new RestTemplate(); + ResponseEntity responseEntity = template.exchange( + ROOT + DELETE + "?id={id}", + HttpMethod.DELETE, + null, + Cat.class, + id + ); + + Assert.assertNotNull(responseEntity.getBody()); + + } }