From cb91db55742314b9ece58930555ac3dd4f9e7b24 Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Fri, 6 Apr 2018 17:08:47 -0400 Subject: [PATCH 01/12] Movie SQL made --- .../persistenceapp/PersonService.java | 7 ++++++ src/main/resources/script.sql | 24 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/main/java/io/zipcoder/persistenceapp/PersonService.java create mode 100644 src/main/resources/script.sql diff --git a/src/main/java/io/zipcoder/persistenceapp/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/PersonService.java new file mode 100644 index 0000000..4cde8b3 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/PersonService.java @@ -0,0 +1,7 @@ +package io.zipcoder.persistenceapp; + +public class PersonService { + + + +} diff --git a/src/main/resources/script.sql b/src/main/resources/script.sql new file mode 100644 index 0000000..37ec15d --- /dev/null +++ b/src/main/resources/script.sql @@ -0,0 +1,24 @@ +INSERT INTO movies VALUES(1, 'Howard the Duck', 110, 'Sci-Fi', 4.6, 'PG'); +INSERT INTO movies VALUES(2, 'Lavalantula', 83, 'Horror', 4.7, 'TV-14'); +INSERT INTO movies VALUES(3, 'Starship Troopers', 129, 'Sci-Fi', 4.7, 'PG-13'); +INSERT INTO movies VALUES(4, 'Waltz With Bashir', 90, 'Documentary', 4.7, 'R'); +INSERT INTO movies VALUES(5, 'Spaceballs', 96, 'Comedy', 4.7, 'PG'); +INSERT INTO movies VALUES(6, 'Monsters Inc.', 92, 'Animation', 4.7, 'G'); + +SELECT * FROM movies WHERE genre='Sci-Fi'; + +SELECT * FROM movies WHERE imdb_score >= 6.5; + +SELECT * FROM movies WHERE rating = 'G' OR rating = 'PG' AND runtime < 100; + +SELECT AVG(runtime) FROM movies WHERE imdb_score < 7.5 GROUP BY genre; + +UPDATE movies SET rating = 'R' WHERE title = 'Starship Troopers'; + +SELECT id, rating FROM movies WHERE genre = 'Horror' OR genre = 'Documentary'; + +SELECT AVG(imdb_score), MIN(imdb_score), MAX(imdb_score) FROM movies GROUP BY rating; + +SELECT AVG(imdb_score), MIN(imdb_score), MAX(imdb_score) FROM movies GROUP BY rating HAVING COUNT(*) > 1; + +DELETE FROM movies WHERE rating = 'R'; \ No newline at end of file From 3e4d1fb7fbec7b1a78351a9b39dacc8da7b7e63e Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Sun, 8 Apr 2018 12:06:05 -0400 Subject: [PATCH 02/12] Repo and controller started, PersonService stubs --- .../persistenceapp/PersonService.java | 42 +++++++++++++++++++ .../controllers/PersonController.java | 4 ++ .../repositories/PersonRepository.java | 6 +++ 3 files changed, 52 insertions(+) create mode 100644 src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java create mode 100644 src/main/java/io/zipcoder/persistenceapp/repositories/PersonRepository.java diff --git a/src/main/java/io/zipcoder/persistenceapp/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/PersonService.java index 4cde8b3..868ef1e 100644 --- a/src/main/java/io/zipcoder/persistenceapp/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/PersonService.java @@ -1,7 +1,49 @@ package io.zipcoder.persistenceapp; +import org.springframework.jdbc.core.JdbcTemplate; + public class PersonService { + JdbcTemplate jdbcTemplate = new JdbcTemplate(); + + public void addPerson() { + + } + + public void updateExistingPerson() { + + } + + public void removePerson() { + + } + + public void removeListOfPeople() { + + } + + public void findPeopleWithFirstName() { + + } + + public void findPeopleWithLastName() { + + } + + public void findPeopleWithBirthdate() { + + } + + public void findPersonWithId() { + + } + + public void generateMapLastNameList() { + // return map> + } + public void generateMapFirstNameOccurrences() { + // return map + } } diff --git a/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java new file mode 100644 index 0000000..44d0cac --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java @@ -0,0 +1,4 @@ +package io.zipcoder.persistenceapp.controllers; + +public class PersonController { +} diff --git a/src/main/java/io/zipcoder/persistenceapp/repositories/PersonRepository.java b/src/main/java/io/zipcoder/persistenceapp/repositories/PersonRepository.java new file mode 100644 index 0000000..ef75b39 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/repositories/PersonRepository.java @@ -0,0 +1,6 @@ +package io.zipcoder.persistenceapp.repositories; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PersonRepository extends JpaRepository{ +} From fa965ab7484739fbf5740a6c87c7cc47cf525ee7 Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Sun, 8 Apr 2018 12:14:37 -0400 Subject: [PATCH 03/12] Dumb fix --- .../zipcoder/persistenceapp/{ => services}/PersonService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/io/zipcoder/persistenceapp/{ => services}/PersonService.java (94%) diff --git a/src/main/java/io/zipcoder/persistenceapp/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java similarity index 94% rename from src/main/java/io/zipcoder/persistenceapp/PersonService.java rename to src/main/java/io/zipcoder/persistenceapp/services/PersonService.java index 868ef1e..77c7b9c 100644 --- a/src/main/java/io/zipcoder/persistenceapp/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java @@ -1,4 +1,4 @@ -package io.zipcoder.persistenceapp; +package io.zipcoder.persistenceapp.services; import org.springframework.jdbc.core.JdbcTemplate; From e863824d93ec4eda5e14c022acb9145d1d4d3e07 Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Sun, 8 Apr 2018 12:42:28 -0400 Subject: [PATCH 04/12] Person pojo --- .../persistenceapp/domain/Person.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/main/java/io/zipcoder/persistenceapp/domain/Person.java diff --git a/src/main/java/io/zipcoder/persistenceapp/domain/Person.java b/src/main/java/io/zipcoder/persistenceapp/domain/Person.java new file mode 100644 index 0000000..60d2259 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/domain/Person.java @@ -0,0 +1,62 @@ +package io.zipcoder.persistenceapp.domain; + +import org.hibernate.validator.constraints.NotEmpty; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Person { + + @Id + @GeneratedValue + @Column(name = "Id") + private long id; + + @NotEmpty + @Column(name = "First Name") + private String firstName; + + @NotEmpty + @Column(name = "Last Name") + private String lastName; + + @NotEmpty + @Column(name = "Birthday") + private String bithday; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getBithday() { + return bithday; + } + + public void setBithday(String bithday) { + this.bithday = bithday; + } + +} From 216a0f4e596e4bba472a50985e6205b117eeb8e3 Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Sun, 8 Apr 2018 18:27:55 -0400 Subject: [PATCH 05/12] Service changed to interface to be used by controller --- .../controllers/PersonController.java | 6 +++ .../services/PersonService.java | 46 ++++++------------- 2 files changed, 19 insertions(+), 33 deletions(-) diff --git a/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java index 44d0cac..3453709 100644 --- a/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java +++ b/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java @@ -1,4 +1,10 @@ package io.zipcoder.persistenceapp.controllers; +import org.springframework.web.bind.annotation.RestController; + +@RestController public class PersonController { + + + } diff --git a/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java index 77c7b9c..1cf1faf 100644 --- a/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java @@ -1,49 +1,29 @@ package io.zipcoder.persistenceapp.services; +import io.zipcoder.persistenceapp.domain.Person; import org.springframework.jdbc.core.JdbcTemplate; -public class PersonService { +import java.util.List; - JdbcTemplate jdbcTemplate = new JdbcTemplate(); - - public void addPerson() { - - } - - public void updateExistingPerson() { - - } - - public void removePerson() { +public interface PersonService { - } - - public void removeListOfPeople() { - - } - - public void findPeopleWithFirstName() { - - } + // What's this for again + JdbcTemplate jdbcTemplate = new JdbcTemplate(); - public void findPeopleWithLastName() { + void addPerson(); - } + void updateExistingPerson(); - public void findPeopleWithBirthdate() { + void removePerson(); - } + void removeListOfPeople(); - public void findPersonWithId() { + List findPeopleWithFirstName(String firstName); - } + List findPeopleWithLastName(String lastName); - public void generateMapLastNameList() { - // return map> - } + List findPeopleWithBirthday(String birthday); - public void generateMapFirstNameOccurrences() { - // return map - } + Person findPersonWithId(); } From 4292bac76967e42a99a00478a05283ca73006e06 Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Sun, 8 Apr 2018 20:39:51 -0400 Subject: [PATCH 06/12] Bithday --- .../controllers/PersonController.java | 44 ++++++++++++++++++- .../persistenceapp/domain/Person.java | 39 ++++++++++++---- 2 files changed, 73 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java index 3453709..2e503ed 100644 --- a/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java +++ b/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java @@ -1,10 +1,52 @@ package io.zipcoder.persistenceapp.controllers; +import io.zipcoder.persistenceapp.domain.Person; +import io.zipcoder.persistenceapp.services.PersonService; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController -public class PersonController { +public class PersonController implements PersonService{ + + + @Override + public void addPerson() { + + } + + @Override + public void updateExistingPerson() { + + } + + @Override + public void removePerson() { + + } + + @Override + public void removeListOfPeople() { + + } + + @Override + public List findPeopleWithFirstName(String firstName) { + return null; + } + @Override + public List findPeopleWithLastName(String lastName) { + return null; + } + @Override + public List findPeopleWithBirthday(String birthday) { + return null; + } + @Override + public Person findPersonWithId() { + return null; + } } diff --git a/src/main/java/io/zipcoder/persistenceapp/domain/Person.java b/src/main/java/io/zipcoder/persistenceapp/domain/Person.java index 60d2259..7d0a28a 100644 --- a/src/main/java/io/zipcoder/persistenceapp/domain/Person.java +++ b/src/main/java/io/zipcoder/persistenceapp/domain/Person.java @@ -12,20 +12,26 @@ public class Person { @Id @GeneratedValue - @Column(name = "Id") + @Column(name = "ID") private long id; @NotEmpty - @Column(name = "First Name") + @Column(name = "FIRST_NAME") private String firstName; @NotEmpty - @Column(name = "Last Name") + @Column(name = "LAST_NAME", nullable = false) private String lastName; + @Column(name = "BIRTHDAY") + private String birthday; + @NotEmpty - @Column(name = "Birthday") - private String bithday; + @Column(name = "MOBILE") + private String mobile; + + @Column(name = "HOME_ID") + private short homeId; public long getId() { return id; @@ -51,12 +57,27 @@ public void setLastName(String lastName) { this.lastName = lastName; } - public String getBithday() { - return bithday; + public String getBirthday() { + return birthday; } - public void setBithday(String bithday) { - this.bithday = bithday; + public void setBirthday(String birthday) { + this.birthday = birthday; } + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public short getHomeId() { + return homeId; + } + + public void setHomeId(short homeId) { + this.homeId = homeId; + } } From 773a625d2ada797fad199b142413b49b5baa1074 Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Sun, 8 Apr 2018 20:48:52 -0400 Subject: [PATCH 07/12] Repos properly set up --- .../controllers/PersonController.java | 40 +------------------ .../repositories/BaseRepository.java | 10 +++++ .../repositories/PersonRepository.java | 6 ++- .../services/PersonService.java | 25 ++---------- 4 files changed, 18 insertions(+), 63 deletions(-) create mode 100644 src/main/java/io/zipcoder/persistenceapp/repositories/BaseRepository.java diff --git a/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java index 2e503ed..588dd9f 100644 --- a/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java +++ b/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java @@ -7,46 +7,8 @@ import java.util.List; @RestController -public class PersonController implements PersonService{ +public class PersonController { - @Override - public void addPerson() { - } - - @Override - public void updateExistingPerson() { - - } - - @Override - public void removePerson() { - - } - - @Override - public void removeListOfPeople() { - - } - - @Override - public List findPeopleWithFirstName(String firstName) { - return null; - } - - @Override - public List findPeopleWithLastName(String lastName) { - return null; - } - - @Override - public List findPeopleWithBirthday(String birthday) { - return null; - } - - @Override - public Person findPersonWithId() { - return null; - } } diff --git a/src/main/java/io/zipcoder/persistenceapp/repositories/BaseRepository.java b/src/main/java/io/zipcoder/persistenceapp/repositories/BaseRepository.java new file mode 100644 index 0000000..2e58d50 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/repositories/BaseRepository.java @@ -0,0 +1,10 @@ +package io.zipcoder.persistenceapp.repositories; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.NoRepositoryBean; + +import java.io.Serializable; + +@NoRepositoryBean +public interface BaseRepository extends JpaRepository { +} diff --git a/src/main/java/io/zipcoder/persistenceapp/repositories/PersonRepository.java b/src/main/java/io/zipcoder/persistenceapp/repositories/PersonRepository.java index ef75b39..33a88cd 100644 --- a/src/main/java/io/zipcoder/persistenceapp/repositories/PersonRepository.java +++ b/src/main/java/io/zipcoder/persistenceapp/repositories/PersonRepository.java @@ -1,6 +1,8 @@ package io.zipcoder.persistenceapp.repositories; -import org.springframework.data.jpa.repository.JpaRepository; +import io.zipcoder.persistenceapp.domain.Person; +import org.springframework.stereotype.Repository; -public interface PersonRepository extends JpaRepository{ +@Repository +public interface PersonRepository extends BaseRepository { } diff --git a/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java index 1cf1faf..26925fc 100644 --- a/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java @@ -1,29 +1,10 @@ package io.zipcoder.persistenceapp.services; -import io.zipcoder.persistenceapp.domain.Person; -import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; -import java.util.List; +@Service +public class PersonService { -public interface PersonService { - // What's this for again - JdbcTemplate jdbcTemplate = new JdbcTemplate(); - - void addPerson(); - - void updateExistingPerson(); - - void removePerson(); - - void removeListOfPeople(); - - List findPeopleWithFirstName(String firstName); - - List findPeopleWithLastName(String lastName); - - List findPeopleWithBirthday(String birthday); - - Person findPersonWithId(); } From 3c3d8d21c2bd948e3d79d7f7d99c7b299a0e27cd Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Sun, 8 Apr 2018 20:54:48 -0400 Subject: [PATCH 08/12] PersonService set up --- .../io/zipcoder/persistenceapp/services/PersonService.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java index 26925fc..648394a 100644 --- a/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java @@ -1,10 +1,17 @@ package io.zipcoder.persistenceapp.services; +import io.zipcoder.persistenceapp.repositories.PersonRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class PersonService { + private PersonRepository personRepository; + @Autowired + public PersonService(PersonRepository personRepository) { + this.personRepository = personRepository; + } } From 06f0ef215e6fbd7887af7a08bf54616d38af1081 Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Sun, 8 Apr 2018 21:08:01 -0400 Subject: [PATCH 09/12] Here you go --- .../controller/PersonController.java | 10 ++++++++++ .../controllers/PersonController.java | 14 -------------- .../persistenceapp/model/BaseEntity.java | 9 +++++++++ .../{domain => model}/Person.java | 17 ++++++++--------- .../BaseRepository.java | 2 +- .../PersonRepository.java | 6 ++++-- .../{services => service}/PersonService.java | 9 +++++++-- 7 files changed, 39 insertions(+), 28 deletions(-) create mode 100644 src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java delete mode 100644 src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java create mode 100644 src/main/java/io/zipcoder/persistenceapp/model/BaseEntity.java rename src/main/java/io/zipcoder/persistenceapp/{domain => model}/Person.java (82%) rename src/main/java/io/zipcoder/persistenceapp/{repositories => repository}/BaseRepository.java (84%) rename src/main/java/io/zipcoder/persistenceapp/{repositories => repository}/PersonRepository.java (59%) rename src/main/java/io/zipcoder/persistenceapp/{services => service}/PersonService.java (56%) diff --git a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java new file mode 100644 index 0000000..97b3ee2 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java @@ -0,0 +1,10 @@ +package io.zipcoder.persistenceapp.controller; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class PersonController { + + + +} diff --git a/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java deleted file mode 100644 index 588dd9f..0000000 --- a/src/main/java/io/zipcoder/persistenceapp/controllers/PersonController.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.zipcoder.persistenceapp.controllers; - -import io.zipcoder.persistenceapp.domain.Person; -import io.zipcoder.persistenceapp.services.PersonService; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -@RestController -public class PersonController { - - - -} diff --git a/src/main/java/io/zipcoder/persistenceapp/model/BaseEntity.java b/src/main/java/io/zipcoder/persistenceapp/model/BaseEntity.java new file mode 100644 index 0000000..88bad4b --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/model/BaseEntity.java @@ -0,0 +1,9 @@ +package io.zipcoder.persistenceapp.model; + +import java.io.Serializable; + +public abstract class BaseEntity implements Serializable{ + + + +} diff --git a/src/main/java/io/zipcoder/persistenceapp/domain/Person.java b/src/main/java/io/zipcoder/persistenceapp/model/Person.java similarity index 82% rename from src/main/java/io/zipcoder/persistenceapp/domain/Person.java rename to src/main/java/io/zipcoder/persistenceapp/model/Person.java index 7d0a28a..aa1b197 100644 --- a/src/main/java/io/zipcoder/persistenceapp/domain/Person.java +++ b/src/main/java/io/zipcoder/persistenceapp/model/Person.java @@ -1,19 +1,18 @@ -package io.zipcoder.persistenceapp.domain; +package io.zipcoder.persistenceapp.model; import org.hibernate.validator.constraints.NotEmpty; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; +import javax.persistence.*; @Entity -public class Person { +public class Person extends BaseEntity { + + private static final long serialVersionUID = 123456789L; @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "ID") - private long id; + private Long id; @NotEmpty @Column(name = "FIRST_NAME") @@ -31,7 +30,7 @@ public class Person { private String mobile; @Column(name = "HOME_ID") - private short homeId; + private Short homeId; public long getId() { return id; diff --git a/src/main/java/io/zipcoder/persistenceapp/repositories/BaseRepository.java b/src/main/java/io/zipcoder/persistenceapp/repository/BaseRepository.java similarity index 84% rename from src/main/java/io/zipcoder/persistenceapp/repositories/BaseRepository.java rename to src/main/java/io/zipcoder/persistenceapp/repository/BaseRepository.java index 2e58d50..511b15c 100644 --- a/src/main/java/io/zipcoder/persistenceapp/repositories/BaseRepository.java +++ b/src/main/java/io/zipcoder/persistenceapp/repository/BaseRepository.java @@ -1,4 +1,4 @@ -package io.zipcoder.persistenceapp.repositories; +package io.zipcoder.persistenceapp.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.NoRepositoryBean; diff --git a/src/main/java/io/zipcoder/persistenceapp/repositories/PersonRepository.java b/src/main/java/io/zipcoder/persistenceapp/repository/PersonRepository.java similarity index 59% rename from src/main/java/io/zipcoder/persistenceapp/repositories/PersonRepository.java rename to src/main/java/io/zipcoder/persistenceapp/repository/PersonRepository.java index 33a88cd..0bc1ec7 100644 --- a/src/main/java/io/zipcoder/persistenceapp/repositories/PersonRepository.java +++ b/src/main/java/io/zipcoder/persistenceapp/repository/PersonRepository.java @@ -1,8 +1,10 @@ -package io.zipcoder.persistenceapp.repositories; +package io.zipcoder.persistenceapp.repository; -import io.zipcoder.persistenceapp.domain.Person; +import io.zipcoder.persistenceapp.model.Person; import org.springframework.stereotype.Repository; @Repository public interface PersonRepository extends BaseRepository { + + } diff --git a/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java similarity index 56% rename from src/main/java/io/zipcoder/persistenceapp/services/PersonService.java rename to src/main/java/io/zipcoder/persistenceapp/service/PersonService.java index 648394a..c44d53a 100644 --- a/src/main/java/io/zipcoder/persistenceapp/services/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java @@ -1,6 +1,7 @@ -package io.zipcoder.persistenceapp.services; +package io.zipcoder.persistenceapp.service; -import io.zipcoder.persistenceapp.repositories.PersonRepository; +import io.zipcoder.persistenceapp.model.Person; +import io.zipcoder.persistenceapp.repository.PersonRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -14,4 +15,8 @@ public PersonService(PersonRepository personRepository) { this.personRepository = personRepository; } + public Person createPerson(Person person) { + return personRepository.save(person); + } + } From 06d6b789be1aa929b1ce946d36875d36dcf65ddb Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Sun, 8 Apr 2018 21:29:45 -0400 Subject: [PATCH 10/12] First test --- .../{ => core}/model/BaseEntity.java | 2 +- .../{ => core}/repository/BaseRepository.java | 2 +- .../controller/PersonController.java | 2 +- .../{ => humans}/model/Person.java | 3 +- .../humans/repository/PersonRepository.java | 11 +++++ .../{ => humans}/service/PersonService.java | 6 +-- .../repository/PersonRepository.java | 10 ----- .../PersistenceStarterApplicationTests.java | 2 +- .../controller/PersonControllerTest.java | 4 ++ .../humans/service/PersonServiceTest.java | 43 +++++++++++++++++++ 10 files changed, 67 insertions(+), 18 deletions(-) rename src/main/java/io/zipcoder/persistenceapp/{ => core}/model/BaseEntity.java (66%) rename src/main/java/io/zipcoder/persistenceapp/{ => core}/repository/BaseRepository.java (83%) rename src/main/java/io/zipcoder/persistenceapp/{ => humans}/controller/PersonController.java (68%) rename src/main/java/io/zipcoder/persistenceapp/{ => humans}/model/Person.java (93%) create mode 100644 src/main/java/io/zipcoder/persistenceapp/humans/repository/PersonRepository.java rename src/main/java/io/zipcoder/persistenceapp/{ => humans}/service/PersonService.java (71%) delete mode 100644 src/main/java/io/zipcoder/persistenceapp/repository/PersonRepository.java rename src/test/java/io/zipcoder/{ => persistenceapp}/PersistenceStarterApplicationTests.java (89%) create mode 100644 src/test/java/io/zipcoder/persistenceapp/humans/controller/PersonControllerTest.java create mode 100644 src/test/java/io/zipcoder/persistenceapp/humans/service/PersonServiceTest.java diff --git a/src/main/java/io/zipcoder/persistenceapp/model/BaseEntity.java b/src/main/java/io/zipcoder/persistenceapp/core/model/BaseEntity.java similarity index 66% rename from src/main/java/io/zipcoder/persistenceapp/model/BaseEntity.java rename to src/main/java/io/zipcoder/persistenceapp/core/model/BaseEntity.java index 88bad4b..e8ce59c 100644 --- a/src/main/java/io/zipcoder/persistenceapp/model/BaseEntity.java +++ b/src/main/java/io/zipcoder/persistenceapp/core/model/BaseEntity.java @@ -1,4 +1,4 @@ -package io.zipcoder.persistenceapp.model; +package io.zipcoder.persistenceapp.core.model; import java.io.Serializable; diff --git a/src/main/java/io/zipcoder/persistenceapp/repository/BaseRepository.java b/src/main/java/io/zipcoder/persistenceapp/core/repository/BaseRepository.java similarity index 83% rename from src/main/java/io/zipcoder/persistenceapp/repository/BaseRepository.java rename to src/main/java/io/zipcoder/persistenceapp/core/repository/BaseRepository.java index 511b15c..4d801f5 100644 --- a/src/main/java/io/zipcoder/persistenceapp/repository/BaseRepository.java +++ b/src/main/java/io/zipcoder/persistenceapp/core/repository/BaseRepository.java @@ -1,4 +1,4 @@ -package io.zipcoder.persistenceapp.repository; +package io.zipcoder.persistenceapp.core.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.NoRepositoryBean; diff --git a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/humans/controller/PersonController.java similarity index 68% rename from src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java rename to src/main/java/io/zipcoder/persistenceapp/humans/controller/PersonController.java index 97b3ee2..21a86ba 100644 --- a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java +++ b/src/main/java/io/zipcoder/persistenceapp/humans/controller/PersonController.java @@ -1,4 +1,4 @@ -package io.zipcoder.persistenceapp.controller; +package io.zipcoder.persistenceapp.humans.controller; import org.springframework.web.bind.annotation.RestController; diff --git a/src/main/java/io/zipcoder/persistenceapp/model/Person.java b/src/main/java/io/zipcoder/persistenceapp/humans/model/Person.java similarity index 93% rename from src/main/java/io/zipcoder/persistenceapp/model/Person.java rename to src/main/java/io/zipcoder/persistenceapp/humans/model/Person.java index aa1b197..5b808c2 100644 --- a/src/main/java/io/zipcoder/persistenceapp/model/Person.java +++ b/src/main/java/io/zipcoder/persistenceapp/humans/model/Person.java @@ -1,5 +1,6 @@ -package io.zipcoder.persistenceapp.model; +package io.zipcoder.persistenceapp.humans.model; +import io.zipcoder.persistenceapp.core.model.BaseEntity; import org.hibernate.validator.constraints.NotEmpty; import javax.persistence.*; diff --git a/src/main/java/io/zipcoder/persistenceapp/humans/repository/PersonRepository.java b/src/main/java/io/zipcoder/persistenceapp/humans/repository/PersonRepository.java new file mode 100644 index 0000000..cd953af --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/humans/repository/PersonRepository.java @@ -0,0 +1,11 @@ +package io.zipcoder.persistenceapp.humans.repository; + +import io.zipcoder.persistenceapp.core.repository.BaseRepository; +import io.zipcoder.persistenceapp.humans.model.Person; +import org.springframework.stereotype.Repository; + +@Repository +public interface PersonRepository extends BaseRepository { + + +} diff --git a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/humans/service/PersonService.java similarity index 71% rename from src/main/java/io/zipcoder/persistenceapp/service/PersonService.java rename to src/main/java/io/zipcoder/persistenceapp/humans/service/PersonService.java index c44d53a..4703852 100644 --- a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/humans/service/PersonService.java @@ -1,7 +1,7 @@ -package io.zipcoder.persistenceapp.service; +package io.zipcoder.persistenceapp.humans.service; -import io.zipcoder.persistenceapp.model.Person; -import io.zipcoder.persistenceapp.repository.PersonRepository; +import io.zipcoder.persistenceapp.humans.model.Person; +import io.zipcoder.persistenceapp.humans.repository.PersonRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/src/main/java/io/zipcoder/persistenceapp/repository/PersonRepository.java b/src/main/java/io/zipcoder/persistenceapp/repository/PersonRepository.java deleted file mode 100644 index 0bc1ec7..0000000 --- a/src/main/java/io/zipcoder/persistenceapp/repository/PersonRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.zipcoder.persistenceapp.repository; - -import io.zipcoder.persistenceapp.model.Person; -import org.springframework.stereotype.Repository; - -@Repository -public interface PersonRepository extends BaseRepository { - - -} diff --git a/src/test/java/io/zipcoder/PersistenceStarterApplicationTests.java b/src/test/java/io/zipcoder/persistenceapp/PersistenceStarterApplicationTests.java similarity index 89% rename from src/test/java/io/zipcoder/PersistenceStarterApplicationTests.java rename to src/test/java/io/zipcoder/persistenceapp/PersistenceStarterApplicationTests.java index 3e5dd20..123972e 100644 --- a/src/test/java/io/zipcoder/PersistenceStarterApplicationTests.java +++ b/src/test/java/io/zipcoder/persistenceapp/PersistenceStarterApplicationTests.java @@ -1,4 +1,4 @@ -package io.zipcoder; +package io.zipcoder.persistenceapp; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/src/test/java/io/zipcoder/persistenceapp/humans/controller/PersonControllerTest.java b/src/test/java/io/zipcoder/persistenceapp/humans/controller/PersonControllerTest.java new file mode 100644 index 0000000..1cc1698 --- /dev/null +++ b/src/test/java/io/zipcoder/persistenceapp/humans/controller/PersonControllerTest.java @@ -0,0 +1,4 @@ +package io.zipcoder.persistenceapp.humans.controller; + +public class PersonControllerTest { +} diff --git a/src/test/java/io/zipcoder/persistenceapp/humans/service/PersonServiceTest.java b/src/test/java/io/zipcoder/persistenceapp/humans/service/PersonServiceTest.java new file mode 100644 index 0000000..72a4b42 --- /dev/null +++ b/src/test/java/io/zipcoder/persistenceapp/humans/service/PersonServiceTest.java @@ -0,0 +1,43 @@ +package io.zipcoder.persistenceapp.humans.service; + +import io.zipcoder.persistenceapp.humans.model.Person; +import io.zipcoder.persistenceapp.humans.repository.PersonRepository; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class PersonServiceTest { + + @Mock + private PersonRepository personRepository; + + private PersonService personService; + private Long personId; + private Person person; + + @Before + public void init() { + personService = new PersonService(personRepository); + personId = 12345L; + person = new Person(); + person.setId(personId); + } + + @Test + public void testCreatePerson() { + when(personRepository.save(person)) + .thenReturn(person); + + Person returnedPerson = personService.createPerson(person); + + Long returnedPersonId = returnedPerson.getId(); + Assert.assertEquals("The expected entity is not returned", personId, returnedPersonId); + } + +} From 9f310bcc83a1f2bbe82c70c8d73aaad87bedfb6c Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Mon, 9 Apr 2018 08:06:46 -0400 Subject: [PATCH 11/12] Testing progress --- .../humans/controller/PersonController.java | 22 +++++++ .../persistenceapp/humans/model/Person.java | 4 +- .../controller/PersonControllerTest.java | 66 +++++++++++++++++++ 3 files changed, 90 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/zipcoder/persistenceapp/humans/controller/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/humans/controller/PersonController.java index 21a86ba..5e76622 100644 --- a/src/main/java/io/zipcoder/persistenceapp/humans/controller/PersonController.java +++ b/src/main/java/io/zipcoder/persistenceapp/humans/controller/PersonController.java @@ -1,10 +1,32 @@ package io.zipcoder.persistenceapp.humans.controller; +import io.zipcoder.persistenceapp.humans.model.Person; +import io.zipcoder.persistenceapp.humans.service.PersonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController +@RequestMapping("/people") public class PersonController { + private PersonService personService; + + @Autowired + public PersonController(PersonService personService) { + this.personService = personService; + } + + @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity createPerson(@RequestBody Person person) { + Person savedPerson = personService.createPerson(person); + return new ResponseEntity<>(savedPerson, HttpStatus.CREATED); + } } diff --git a/src/main/java/io/zipcoder/persistenceapp/humans/model/Person.java b/src/main/java/io/zipcoder/persistenceapp/humans/model/Person.java index 5b808c2..2af657e 100644 --- a/src/main/java/io/zipcoder/persistenceapp/humans/model/Person.java +++ b/src/main/java/io/zipcoder/persistenceapp/humans/model/Person.java @@ -33,7 +33,7 @@ public class Person extends BaseEntity { @Column(name = "HOME_ID") private Short homeId; - public long getId() { + public Long getId() { return id; } @@ -73,7 +73,7 @@ public void setMobile(String mobile) { this.mobile = mobile; } - public short getHomeId() { + public Short getHomeId() { return homeId; } diff --git a/src/test/java/io/zipcoder/persistenceapp/humans/controller/PersonControllerTest.java b/src/test/java/io/zipcoder/persistenceapp/humans/controller/PersonControllerTest.java index 1cc1698..608c077 100644 --- a/src/test/java/io/zipcoder/persistenceapp/humans/controller/PersonControllerTest.java +++ b/src/test/java/io/zipcoder/persistenceapp/humans/controller/PersonControllerTest.java @@ -1,4 +1,70 @@ package io.zipcoder.persistenceapp.humans.controller; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.zipcoder.persistenceapp.humans.model.Person; +import io.zipcoder.persistenceapp.humans.service.PersonService; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MockMvcBuilder; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) public class PersonControllerTest { + + @MockBean + private PersonService personService; + + @InjectMocks + private PersonController personController; + private MockMvc mvc; + + private Long personId; + private Person person; + + @Before + public void init() { + MockitoAnnotations.initMocks(this); + personController = new PersonController(personService); + mvc = MockMvcBuilders.standaloneSetup(personController).build(); + personId = 13245363L; + person = new Person(); + person.setId(personId); + } + + @Test + public void testCreatePerson() throws Exception { + String predictedEntity = new ObjectMapper().writeValueAsString(person); + + when(personService.createPerson(person)) + .thenReturn(person); + + mvc.perform(post("/people") + .contentType(MediaType.APPLICATION_JSON) + .content(predictedEntity)) + .andExpect(status().isCreated()); + + /** + * Find out how to verify business logic (either retrieve a representation of the Person object + * from the mockMvc response or verify that the service was called once) + * */ +// verify(personService, times(1)) +// .createPerson(eq(person)); + + } + } From 6a51f696f1fde484e7701a9c44b87854d77c3eae Mon Sep 17 00:00:00 2001 From: Mitch Taylor Date: Mon, 9 Apr 2018 08:30:19 -0400 Subject: [PATCH 12/12] Home model and repo --- .../persistenceapp/humans/model/Home.java | 50 +++++++++++++++++++ .../persistenceapp/humans/model/Person.java | 5 +- .../humans/repository/HomeRepository.java | 12 +++++ .../humans/repository/PersonRepository.java | 1 + 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/zipcoder/persistenceapp/humans/model/Home.java create mode 100644 src/main/java/io/zipcoder/persistenceapp/humans/repository/HomeRepository.java diff --git a/src/main/java/io/zipcoder/persistenceapp/humans/model/Home.java b/src/main/java/io/zipcoder/persistenceapp/humans/model/Home.java new file mode 100644 index 0000000..f2ee9f6 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/humans/model/Home.java @@ -0,0 +1,50 @@ +package io.zipcoder.persistenceapp.humans.model; + +import io.zipcoder.persistenceapp.core.model.BaseEntity; +import org.hibernate.validator.constraints.NotEmpty; + +import javax.persistence.*; + +@Entity +public class Home extends BaseEntity { + + private static final Long serialVersionUID = 123456789L; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "ID") + private Long id; + + @NotEmpty + @Column(name = "ADDRESS") + private String address; + + @NotEmpty + @Column(name = "HOMENUMBER") + private String homeNumber; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getHomeNumber() { + return homeNumber; + } + + public void setHomeNumber(String homeNumber) { + this.homeNumber = homeNumber; + } + +} diff --git a/src/main/java/io/zipcoder/persistenceapp/humans/model/Person.java b/src/main/java/io/zipcoder/persistenceapp/humans/model/Person.java index 2af657e..8589dac 100644 --- a/src/main/java/io/zipcoder/persistenceapp/humans/model/Person.java +++ b/src/main/java/io/zipcoder/persistenceapp/humans/model/Person.java @@ -8,7 +8,7 @@ @Entity public class Person extends BaseEntity { - private static final long serialVersionUID = 123456789L; + private static final Long serialVersionUID = 123456789L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -20,8 +20,9 @@ public class Person extends BaseEntity { private String firstName; @NotEmpty - @Column(name = "LAST_NAME", nullable = false) + @Column(name = "LAST_NAME"/*, nullable = false*/) private String lastName; + // Check to see if nullable=false is better or @NotEmpty is better @Column(name = "BIRTHDAY") private String birthday; diff --git a/src/main/java/io/zipcoder/persistenceapp/humans/repository/HomeRepository.java b/src/main/java/io/zipcoder/persistenceapp/humans/repository/HomeRepository.java new file mode 100644 index 0000000..02b9d4a --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/humans/repository/HomeRepository.java @@ -0,0 +1,12 @@ +package io.zipcoder.persistenceapp.humans.repository; + +import io.zipcoder.persistenceapp.core.repository.BaseRepository; +import io.zipcoder.persistenceapp.humans.model.Home; +import org.springframework.stereotype.Repository; + +@Repository +public interface HomeRepository extends BaseRepository { + + + +} diff --git a/src/main/java/io/zipcoder/persistenceapp/humans/repository/PersonRepository.java b/src/main/java/io/zipcoder/persistenceapp/humans/repository/PersonRepository.java index cd953af..b19a57e 100644 --- a/src/main/java/io/zipcoder/persistenceapp/humans/repository/PersonRepository.java +++ b/src/main/java/io/zipcoder/persistenceapp/humans/repository/PersonRepository.java @@ -8,4 +8,5 @@ public interface PersonRepository extends BaseRepository { + }