From c3f85c7593ce838c4dafdbbcbbb74b2491015908 Mon Sep 17 00:00:00 2001 From: Eric Barnaba Date: Fri, 6 Apr 2018 13:51:54 -0400 Subject: [PATCH 1/9] saving part 1 done --- src/main/resources/script.sql | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/resources/script.sql diff --git a/src/main/resources/script.sql b/src/main/resources/script.sql new file mode 100644 index 0000000..4800ca0 --- /dev/null +++ b/src/main/resources/script.sql @@ -0,0 +1,26 @@ +INSERT INTO movies (title, runtime, genre, imdb_score, rating) VALUES +('Howard the Duck', 110, 'Sci-Fi', 4.6, 'PG'), +('Lavalantula', 83, 'Horror', 4.7, 'TV-14'), +('Starship Troopers', 129, 'Sci-Fi', 7.2, 'PG-13'), +('Waltz With Bashir',90,'Documentary',8.0,'R'), +('Spaceballs', 96, 'Comedy', 7.1,'PG'), +('Monsters Inc.', 92, 'Animation', 8.1, 'G'); + +INSERT INTO movies (title, runtime, genre, imdb_score, rating) VALUES +('Zardoz', 105, 'Sci-Fi', 5.8, 'R'), +('The Room', 99, 'Comedy', 3.6, 'R'), +('Mad Max: Fury Road', 120, 'Action', 8.1, 'R'); + +SELECT * FROM movies WHERE genre = 'Sci-Fi'; +SELECT * FROM movies WHERE imdb_score >= 6.5; +SELECT * FROM movies WHERE rating in ('G','PG') AND runtime <100; +SELECT AVG(runtime) average_runtime, genre 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 IN ('Documentary','Horror'); +SELECT AVG(imdb_score), MIN(imdb_score), MAX(imdb_score), rating FROM movies GROUP BY rating; +SELECT AVG(imdb_score), MIN(imdb_score), MAX(imdb_score), rating FROM movies GROUP BY rating HAVING COUNT(*)>1; +DELETE FROM movies WHERE rating = 'R'; + + + + From 57557886104cfede4ff754433b12ebf0843076fe Mon Sep 17 00:00:00 2001 From: Eric Barnaba Date: Fri, 6 Apr 2018 15:00:35 -0400 Subject: [PATCH 2/9] added person domain/service/controller --- data-h2.sql | 13 +++++++++ .../controller/PersonController.java | 4 +++ .../persistenceapp/domain/Person.java | 4 +++ .../persistenceapp/service/PersonService.java | 4 +++ src/main/resources/schema-h2.sql | 27 +++++++++++++++++++ src/main/resources/script.sql | 26 ------------------ 6 files changed, 52 insertions(+), 26 deletions(-) create mode 100644 src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java create mode 100644 src/main/java/io/zipcoder/persistenceapp/domain/Person.java create mode 100644 src/main/java/io/zipcoder/persistenceapp/service/PersonService.java delete mode 100644 src/main/resources/script.sql diff --git a/data-h2.sql b/data-h2.sql index f6f18b5..5bc94b8 100644 --- a/data-h2.sql +++ b/data-h2.sql @@ -12,4 +12,17 @@ INSERT INTO PERSON ( LAST_NAME, FIRST_NAME, MOBILE, BIRTHDAY, HOME_ID)VALUES ('S INSERT INTO PERSON ( LAST_NAME, FIRST_NAME, MOBILE, BIRTHDAY, HOME_ID)VALUES ('Smith', 'Jane', '393-6181', '1987-12-06', 3); INSERT INTO PERSON ( LAST_NAME, FIRST_NAME, MOBILE, BIRTHDAY, HOME_ID)VALUES ('Brown', 'Doug', '466-6241', '1954-12-07', 3); +INSERT INTO movies (title, runtime, genre, imdb_score, rating) VALUES +('Howard the Duck', 110, 'Sci-Fi', 4.6, 'PG'), +('Lavalantula', 83, 'Horror', 4.7, 'TV-14'), +('Starship Troopers', 129, 'Sci-Fi', 7.2, 'PG-13'), +('Waltz With Bashir',90,'Documentary',8.0,'R'), +('Spaceballs', 96, 'Comedy', 7.1,'PG'), +('Monsters Inc.', 92, 'Animation', 8.1, 'G'); + +INSERT INTO movies (title, runtime, genre, imdb_score, rating) VALUES +('Zardoz', 105, 'Sci-Fi', 5.8, 'R'), +('The Room', 99, 'Comedy', 3.6, 'R'), +('Mad Max: Fury Road', 120, 'Action', 8.1, 'R'); + 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..a749022 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java @@ -0,0 +1,4 @@ +package io.zipcoder.persistenceapp.controller; + +public class PersonController { +} 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..4779320 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/domain/Person.java @@ -0,0 +1,4 @@ +package io.zipcoder.persistenceapp.domain; + +public class Person { +} diff --git a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java new file mode 100644 index 0000000..b5fe584 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java @@ -0,0 +1,4 @@ +package io.zipcoder.persistenceapp.service; + +public class PersonService { +} diff --git a/src/main/resources/schema-h2.sql b/src/main/resources/schema-h2.sql index 39c2c27..b23bed0 100644 --- a/src/main/resources/schema-h2.sql +++ b/src/main/resources/schema-h2.sql @@ -61,6 +61,33 @@ CREATE TABLE auto_prices ( ); +INSERT INTO HOME (ADDRESS, HOMENUMBER) VALUES ('36 E. Bayberry Rd.Savannah, GA 31404', '565-6895'); +INSERT INTO HOME (ADDRESS, HOMENUMBER) VALUES ('11 Essex Dr.Farmingdale, NY 11735', '454-4544'); +INSERT INTO HOME (ADDRESS, HOMENUMBER) VALUES ('920 Arlington Street Clifton, NJ 07011', '985-4515'); +INSERT INTO HOME (ADDRESS, HOMENUMBER) VALUES ('234 High Street, PA 19159 ', '267-3940'); + + +INSERT INTO PERSON ( LAST_NAME, FIRST_NAME, MOBILE, BIRTHDAY, HOME_ID ) VALUES ('Carbral', 'Sheeri', '230-4233', '1970-02-23', 2); +INSERT INTO PERSON ( LAST_NAME, FIRST_NAME, MOBILE, BIRTHDAY, HOME_ID) VALUES ( 'Sharam', 'Raj', '186-5223', '1980-08-31', 3); +INSERT INTO PERSON ( LAST_NAME, FIRST_NAME, MOBILE, BIRTHDAY, HOME_ID)VALUES ('Durand', 'Noelle', '395-6161', '1960-07-06', 1); +INSERT INTO PERSON ( LAST_NAME, FIRST_NAME, MOBILE, BIRTHDAY, HOME_ID)VALUES ('Smith', 'Thomas', '395-6181', '1987-07-06', 1); +INSERT INTO PERSON ( LAST_NAME, FIRST_NAME, MOBILE, BIRTHDAY, HOME_ID)VALUES ('Smith', 'Jane', '393-6181', '1987-12-06', 3); +INSERT INTO PERSON ( LAST_NAME, FIRST_NAME, MOBILE, BIRTHDAY, HOME_ID)VALUES ('Brown', 'Doug', '466-6241', '1954-12-07', 3); + +INSERT INTO movies (title, runtime, genre, imdb_score, rating) VALUES +('Howard the Duck', 110, 'Sci-Fi', 4.6, 'PG'), +('Lavalantula', 83, 'Horror', 4.7, 'TV-14'), +('Starship Troopers', 129, 'Sci-Fi', 7.2, 'PG-13'), +('Waltz With Bashir',90,'Documentary',8.0,'R'), +('Spaceballs', 96, 'Comedy', 7.1,'PG'), +('Monsters Inc.', 92, 'Animation', 8.1, 'G'); + +INSERT INTO movies (title, runtime, genre, imdb_score, rating) VALUES +('Zardoz', 105, 'Sci-Fi', 5.8, 'R'), +('The Room', 99, 'Comedy', 3.6, 'R'), +('Mad Max: Fury Road', 120, 'Action', 8.1, 'R'); + + DROP SEQUENCE hibernate_sequence; CREATE SEQUENCE hibernate_sequence; diff --git a/src/main/resources/script.sql b/src/main/resources/script.sql deleted file mode 100644 index 4800ca0..0000000 --- a/src/main/resources/script.sql +++ /dev/null @@ -1,26 +0,0 @@ -INSERT INTO movies (title, runtime, genre, imdb_score, rating) VALUES -('Howard the Duck', 110, 'Sci-Fi', 4.6, 'PG'), -('Lavalantula', 83, 'Horror', 4.7, 'TV-14'), -('Starship Troopers', 129, 'Sci-Fi', 7.2, 'PG-13'), -('Waltz With Bashir',90,'Documentary',8.0,'R'), -('Spaceballs', 96, 'Comedy', 7.1,'PG'), -('Monsters Inc.', 92, 'Animation', 8.1, 'G'); - -INSERT INTO movies (title, runtime, genre, imdb_score, rating) VALUES -('Zardoz', 105, 'Sci-Fi', 5.8, 'R'), -('The Room', 99, 'Comedy', 3.6, 'R'), -('Mad Max: Fury Road', 120, 'Action', 8.1, 'R'); - -SELECT * FROM movies WHERE genre = 'Sci-Fi'; -SELECT * FROM movies WHERE imdb_score >= 6.5; -SELECT * FROM movies WHERE rating in ('G','PG') AND runtime <100; -SELECT AVG(runtime) average_runtime, genre 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 IN ('Documentary','Horror'); -SELECT AVG(imdb_score), MIN(imdb_score), MAX(imdb_score), rating FROM movies GROUP BY rating; -SELECT AVG(imdb_score), MIN(imdb_score), MAX(imdb_score), rating FROM movies GROUP BY rating HAVING COUNT(*)>1; -DELETE FROM movies WHERE rating = 'R'; - - - - From 0918c0a3faddf534548f10cdeb0c45e065333764 Mon Sep 17 00:00:00 2001 From: Eric Barnaba Date: Fri, 6 Apr 2018 16:59:07 -0400 Subject: [PATCH 3/9] saving, getbyid method works --- pom.xml | 5 ++ .../controller/PersonController.java | 16 +++++ .../persistenceapp/domain/Person.java | 58 +++++++++++++++++++ .../service/PersonRowMapper.java | 25 ++++++++ .../persistenceapp/service/PersonService.java | 24 ++++++++ 5 files changed, 128 insertions(+) create mode 100644 src/main/java/io/zipcoder/persistenceapp/service/PersonRowMapper.java diff --git a/pom.xml b/pom.xml index 274f418..ecf5bde 100644 --- a/pom.xml +++ b/pom.xml @@ -48,6 +48,11 @@ spring-boot-starter-test test + + org.springframework + spring-context + 4.3.4.RELEASE + diff --git a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java index a749022..d3c2554 100644 --- a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java +++ b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java @@ -1,4 +1,20 @@ package io.zipcoder.persistenceapp.controller; +import io.zipcoder.persistenceapp.domain.Person; +import io.zipcoder.persistenceapp.service.PersonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpRequest; +import org.springframework.web.bind.annotation.*; + +@RestController public class PersonController { + + @Autowired + PersonService service; + + @RequestMapping(value = "/person/{id}", method = RequestMethod.GET) + public Person getPersonById(@PathVariable int id){ + return service.getPersonById(id); + } + } diff --git a/src/main/java/io/zipcoder/persistenceapp/domain/Person.java b/src/main/java/io/zipcoder/persistenceapp/domain/Person.java index 4779320..80f45c1 100644 --- a/src/main/java/io/zipcoder/persistenceapp/domain/Person.java +++ b/src/main/java/io/zipcoder/persistenceapp/domain/Person.java @@ -1,4 +1,62 @@ package io.zipcoder.persistenceapp.domain; +import javax.persistence.Entity; +import java.util.Date; + + public class Person { + private int id; + private String firstName; + private String lastName; + private String mobile; + private Date birthday; + private int homeId; + + public int getId() { + return id; + } + + public void setId(int 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 getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public Date getBirthday() { + return birthday; + } + + public void setBirthday(Date birthday) { + this.birthday = birthday; + } + + public int getHomeId() { + return homeId; + } + + public void setHomeId(int homeId) { + this.homeId = homeId; + } } diff --git a/src/main/java/io/zipcoder/persistenceapp/service/PersonRowMapper.java b/src/main/java/io/zipcoder/persistenceapp/service/PersonRowMapper.java new file mode 100644 index 0000000..2c464f6 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/service/PersonRowMapper.java @@ -0,0 +1,25 @@ +package io.zipcoder.persistenceapp.service; + + +import io.zipcoder.persistenceapp.domain.Person; +import org.springframework.jdbc.core.RowMapper; + +import javax.swing.tree.TreePath; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class PersonRowMapper implements RowMapper { + + @Override + public Object mapRow(ResultSet rs, int rowNum) throws SQLException { + Person person = new Person(); + person.setId(rs.getInt("ID")); + person.setFirstName(rs.getString("FIRST_NAME")); + person.setLastName(rs.getString("LAST_NAME")); + person.setMobile(rs.getString("MOBILE")); + person.setBirthday(rs.getDate("BIRTHDAY")); + person.setHomeId(rs.getInt("HOME_ID")); + + return person; + } +} diff --git a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java index b5fe584..8440eb5 100644 --- a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java @@ -1,4 +1,28 @@ package io.zipcoder.persistenceapp.service; +import io.zipcoder.persistenceapp.domain.Person; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +@Service public class PersonService { + + @Autowired + JdbcTemplate jdbc; + +// public void addPerson(Person person){ +// +// jdbc.query('INSERT into PERSON values (') +// +// } + + public Person getPersonById (int personId) { + String sql = "SELECT * FROM PERSON WHERE ID = ?"; + Person person = (Person)jdbc.queryForObject(sql, new Object[] {personId}, new PersonRowMapper()); + return person; + } + + + } From 2afa887f0c941e9a98ce397842828d2a7efb9446 Mon Sep 17 00:00:00 2001 From: Eric Barnaba Date: Fri, 6 Apr 2018 17:18:58 -0400 Subject: [PATCH 4/9] saving --- .../controller/PersonController.java | 8 ++++++ .../persistenceapp/service/PersonService.java | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java index d3c2554..d101ef2 100644 --- a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java +++ b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java @@ -3,9 +3,12 @@ import io.zipcoder.persistenceapp.domain.Person; import io.zipcoder.persistenceapp.service.PersonService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpMethod; import org.springframework.http.HttpRequest; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController public class PersonController { @@ -17,4 +20,9 @@ public Person getPersonById(@PathVariable int id){ return service.getPersonById(id); } + @RequestMapping(value = "/person", method = RequestMethod.GET) + public List getAllPersons () { + return service.getAllPerson(); + } + } diff --git a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java index 8440eb5..abe8d4d 100644 --- a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java @@ -5,6 +5,12 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + @Service public class PersonService { @@ -23,6 +29,25 @@ public Person getPersonById (int personId) { return person; } + public List getAllPerson () { + String sql = "SELECT * FROM PERSON"; + List people = new ArrayList<>(); + List> rows = jdbc.queryForList(sql); + for(Map row : rows) { + Person person = new Person(); + person.setId((int)row.get("ID")); + person.setFirstName((String)row.get("FIRST_NAME")); + person.setLastName((String)row.get("LAST_NAME")); + person.setMobile((String)row.get("MOBILE")); + person.setBirthday((Date)row.get("BIRTHDAY")); + person.setHomeId((short)row.get("HOME_ID")); + people.add(person); + + } + + return people; + } + } From b63fe08cffd04f3efb76fd84bc734f3882f401e0 Mon Sep 17 00:00:00 2001 From: Eric Barnaba Date: Fri, 6 Apr 2018 17:36:42 -0400 Subject: [PATCH 5/9] saving --- .../persistenceapp/controller/PersonController.java | 9 +++++++++ .../zipcoder/persistenceapp/service/PersonService.java | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java index d101ef2..c1339ab 100644 --- a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java +++ b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java @@ -5,6 +5,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpMethod; import org.springframework.http.HttpRequest; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -16,13 +17,21 @@ public class PersonController { PersonService service; @RequestMapping(value = "/person/{id}", method = RequestMethod.GET) + @ResponseStatus(HttpStatus.OK) public Person getPersonById(@PathVariable int id){ return service.getPersonById(id); } @RequestMapping(value = "/person", method = RequestMethod.GET) + @ResponseStatus(HttpStatus.OK) public List getAllPersons () { return service.getAllPerson(); } + @RequestMapping(value = "/person/{id}", method = RequestMethod.DELETE) + @ResponseStatus(HttpStatus.OK) + public void deletePerson(@PathVariable int id) { + service.deletePerson(id); + } + } diff --git a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java index abe8d4d..8dd91a0 100644 --- a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java @@ -48,6 +48,14 @@ public List getAllPerson () { return people; } + public void deletePerson(int personId){ + String sql = "DELETE FROM PERSON WHERE ID = " + personId; + jdbc.execute(sql); + } + + + + } From 620392b62e2db6de7ea71342421853e9ef7039bb Mon Sep 17 00:00:00 2001 From: Eric Barnaba Date: Sat, 7 Apr 2018 16:25:31 -0400 Subject: [PATCH 6/9] saving --- .../cache/PersonSurnameSearchCache.java | 13 +++ .../cache/PersonSurnameSearchCacheImp.java | 21 +++++ .../persistenceapp/config/AppConfig.java | 15 +++ .../controller/PersonController.java | 87 +++++++++++++++-- .../persistenceapp/domain/Person.java | 3 + .../persistenceapp/service/PersonService.java | 93 +++++++++++++------ 6 files changed, 194 insertions(+), 38 deletions(-) create mode 100644 src/main/java/io/zipcoder/persistenceapp/cache/PersonSurnameSearchCache.java create mode 100644 src/main/java/io/zipcoder/persistenceapp/cache/PersonSurnameSearchCacheImp.java create mode 100644 src/main/java/io/zipcoder/persistenceapp/config/AppConfig.java diff --git a/src/main/java/io/zipcoder/persistenceapp/cache/PersonSurnameSearchCache.java b/src/main/java/io/zipcoder/persistenceapp/cache/PersonSurnameSearchCache.java new file mode 100644 index 0000000..ad33f39 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/cache/PersonSurnameSearchCache.java @@ -0,0 +1,13 @@ +package io.zipcoder.persistenceapp.cache; + +import io.zipcoder.persistenceapp.domain.Person; +import org.springframework.context.annotation.Bean; + +import java.util.List; + + +public interface PersonSurnameSearchCache { + + public List getCache(); + public void setCache(List cache); +} diff --git a/src/main/java/io/zipcoder/persistenceapp/cache/PersonSurnameSearchCacheImp.java b/src/main/java/io/zipcoder/persistenceapp/cache/PersonSurnameSearchCacheImp.java new file mode 100644 index 0000000..ee679bd --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/cache/PersonSurnameSearchCacheImp.java @@ -0,0 +1,21 @@ +package io.zipcoder.persistenceapp.cache; + +import io.zipcoder.persistenceapp.domain.Person; +import org.hibernate.annotations.Cache; +import org.springframework.context.annotation.Bean; + +import java.util.ArrayList; +import java.util.List; + + +public class PersonSurnameSearchCacheImp implements PersonSurnameSearchCache { + private List cache = new ArrayList<>(); + + public List getCache() { + return cache; + } + + public void setCache(List cache) { + this.cache = cache; + } +} diff --git a/src/main/java/io/zipcoder/persistenceapp/config/AppConfig.java b/src/main/java/io/zipcoder/persistenceapp/config/AppConfig.java new file mode 100644 index 0000000..7d804fa --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/config/AppConfig.java @@ -0,0 +1,15 @@ +package io.zipcoder.persistenceapp.config; + +import io.zipcoder.persistenceapp.cache.PersonSurnameSearchCache; +import io.zipcoder.persistenceapp.cache.PersonSurnameSearchCacheImp; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class AppConfig { + + @Bean + public PersonSurnameSearchCache personSurnameSearchCache(){ + return new PersonSurnameSearchCacheImp(); + } +} diff --git a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java index c1339ab..33d0a40 100644 --- a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java +++ b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java @@ -3,12 +3,15 @@ import io.zipcoder.persistenceapp.domain.Person; import io.zipcoder.persistenceapp.service.PersonService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.http.HttpMethod; import org.springframework.http.HttpRequest; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; @RestController public class PersonController { @@ -17,21 +20,87 @@ public class PersonController { PersonService service; @RequestMapping(value = "/person/{id}", method = RequestMethod.GET) - @ResponseStatus(HttpStatus.OK) - public Person getPersonById(@PathVariable int id){ - return service.getPersonById(id); + public ResponseEntity getPersonById(@PathVariable int id){ + try { + Person person = service.getPersonById(id); + return new ResponseEntity<>(person, HttpStatus.OK); + } + catch(EmptyResultDataAccessException e){ + return new ResponseEntity<>("Person Not Found In Database",HttpStatus.NOT_FOUND); + } } @RequestMapping(value = "/person", method = RequestMethod.GET) - @ResponseStatus(HttpStatus.OK) - public List getAllPersons () { - return service.getAllPerson(); + public ResponseEntity getAllPersons () { + try{ + List people = service.getAllPerson(); + return new ResponseEntity<>(people, HttpStatus.OK); + } + catch(EmptyResultDataAccessException e){ + return new ResponseEntity<>("No People Currently In Database", HttpStatus.NOT_FOUND); + } } @RequestMapping(value = "/person/{id}", method = RequestMethod.DELETE) - @ResponseStatus(HttpStatus.OK) - public void deletePerson(@PathVariable int id) { - service.deletePerson(id); + public ResponseEntity deletePerson(@PathVariable int id) { + try { + service.deletePerson(id); + return new ResponseEntity<>(HttpStatus.OK); + } + catch(EmptyResultDataAccessException e){ + return new ResponseEntity<>("Person Not Found In Database",HttpStatus.NOT_FOUND); + } + } + + @RequestMapping(value = "/person/reverselookup/{mobile}", method = RequestMethod.GET) + public ResponseEntity getPersonByMobile(@PathVariable String mobile){ + try { + Person person = service.getPersonByMobile(mobile); + return new ResponseEntity<>(person, HttpStatus.OK); + } + catch(EmptyResultDataAccessException e){ + return new ResponseEntity<>("Person Not Found In Database",HttpStatus.NOT_FOUND); + } + } + + @RequestMapping(value = "/person/surname/{lastName}", method = RequestMethod.GET) + public ResponseEntity getAllPersonsWithSurname (@PathVariable String lastName) { + + List people = service.getAllPersonWithSurname(lastName); + if (people.size() == 0){ + return new ResponseEntity<>("No People With That Surname In Database", HttpStatus.NOT_FOUND); + } + else { + return new ResponseEntity<>(people, HttpStatus.OK); + } + } + + @RequestMapping(value = "/person/surname", method = RequestMethod.GET) + public ResponseEntity getSurnameCache(){ + List people = service.getSurnameCache(); + if (people.size() == 0){ + return new ResponseEntity<>("No Previous Search To Reference", HttpStatus.NOT_FOUND); + } + else { + return new ResponseEntity<>(people, HttpStatus.OK); + } + } + + @RequestMapping(value = "/person/firstname/stats", method = RequestMethod.GET) + public ResponseEntity getFirstNameStats () { + Map results = service.getFirstNameStats(); + if(results.keySet().size() == 0){ + return new ResponseEntity<>("No People In Database", HttpStatus.NOT_FOUND); + } + else{ + return new ResponseEntity<>(results, HttpStatus.OK); + } + } + + @RequestMapping(value = "/person", method = RequestMethod.POST) + public ResponseEntity addPerson(@RequestBody Person person){ + service.addPerson(person); + return new ResponseEntity<>(HttpStatus.CREATED); } } diff --git a/src/main/java/io/zipcoder/persistenceapp/domain/Person.java b/src/main/java/io/zipcoder/persistenceapp/domain/Person.java index 80f45c1..30d7afb 100644 --- a/src/main/java/io/zipcoder/persistenceapp/domain/Person.java +++ b/src/main/java/io/zipcoder/persistenceapp/domain/Person.java @@ -1,6 +1,8 @@ package io.zipcoder.persistenceapp.domain; import javax.persistence.Entity; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Date; @@ -49,6 +51,7 @@ public Date getBirthday() { } public void setBirthday(Date birthday) { + this.birthday = birthday; } diff --git a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java index 8dd91a0..28dc85a 100644 --- a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java @@ -1,15 +1,16 @@ package io.zipcoder.persistenceapp.service; +import io.zipcoder.persistenceapp.cache.PersonSurnameSearchCache; +import io.zipcoder.persistenceapp.cache.PersonSurnameSearchCacheImp; import io.zipcoder.persistenceapp.domain.Person; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; -import java.sql.ResultSet; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; @Service public class PersonService { @@ -17,45 +18,79 @@ public class PersonService { @Autowired JdbcTemplate jdbc; -// public void addPerson(Person person){ -// -// jdbc.query('INSERT into PERSON values (') -// -// } + @Autowired + PersonSurnameSearchCache surnameCache; + - public Person getPersonById (int personId) { + public Person getPersonById(int personId) throws EmptyResultDataAccessException { String sql = "SELECT * FROM PERSON WHERE ID = ?"; - Person person = (Person)jdbc.queryForObject(sql, new Object[] {personId}, new PersonRowMapper()); - return person; + return (Person) jdbc.queryForObject(sql, new Object[]{personId}, new PersonRowMapper()); + } - public List getAllPerson () { + public List getAllPerson() throws EmptyResultDataAccessException { String sql = "SELECT * FROM PERSON"; List people = new ArrayList<>(); - List> rows = jdbc.queryForList(sql); - for(Map row : rows) { - Person person = new Person(); - person.setId((int)row.get("ID")); - person.setFirstName((String)row.get("FIRST_NAME")); - person.setLastName((String)row.get("LAST_NAME")); - person.setMobile((String)row.get("MOBILE")); - person.setBirthday((Date)row.get("BIRTHDAY")); - person.setHomeId((short)row.get("HOME_ID")); - people.add(person); - - } - - return people; + List> rows = jdbc.queryForList(sql); + buildPersonList(people, rows); + return people; } - public void deletePerson(int personId){ + public void deletePerson(int personId) throws EmptyResultDataAccessException { String sql = "DELETE FROM PERSON WHERE ID = " + personId; jdbc.execute(sql); } + public Person getPersonByMobile(String mobile) throws EmptyResultDataAccessException { + String sql = "SELECT * FROM PERSON WHERE MOBILE = ?"; + return (Person) jdbc.queryForObject(sql, new Object[]{mobile}, new PersonRowMapper()); + } + + public List getAllPersonWithSurname(String lastName) throws EmptyResultDataAccessException { + String sql = "SELECT * FROM PERSON WHERE LAST_NAME = ?"; + List people = new ArrayList<>(); + List> rows = jdbc.queryForList(sql, new Object[]{lastName}); + buildPersonList(people, rows); + surnameCache.setCache(people); + return people; + } + + public List getSurnameCache() { + return surnameCache.getCache(); + } + + public Map getFirstNameStats () { + Map outputMap = new HashMap<>(); + String sql = "SELECT first_name, COUNT(first_name) FROM person GROUP BY first_name"; + List> rows = jdbc.queryForList(sql); + for(Map row : rows){ + String name = (String) row.get("FIRST_NAME"); + Number frequency = (Number) row.get("COUNT(FIRST_NAME)"); + outputMap.put(name, frequency); + } + return outputMap; + } + public void addPerson(Person person) { + DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + String sql = "INSERT INTO person ( LAST_NAME, FIRST_NAME, MOBILE, BIRTHDAY, HOME_ID ) VALUES ('" + person.getLastName() + + "','" + person.getFirstName() + "','" + person.getMobile() + "','" + format.format(person.getBirthday()) + "','" + person.getHomeId() + "')"; + jdbc.execute(sql); + } + private void buildPersonList(List listToBuild, List> results) { + for (Map row : results) { + Person person = new Person(); + person.setId((int) row.get("ID")); + person.setFirstName((String) row.get("FIRST_NAME")); + person.setLastName((String) row.get("LAST_NAME")); + person.setMobile((String) row.get("MOBILE")); + person.setBirthday((Date) row.get("BIRTHDAY")); + person.setHomeId((short) row.get("HOME_ID")); + listToBuild.add(person); + } + } } From be3a92ae334bf99d2d36ca92c02df81202e0c98e Mon Sep 17 00:00:00 2001 From: Eric Barnaba Date: Sat, 7 Apr 2018 16:45:17 -0400 Subject: [PATCH 7/9] all person database endpoints active --- .../persistenceapp/controller/PersonController.java | 12 ++++++++++++ .../persistenceapp/service/PersonService.java | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java index 33d0a40..5980743 100644 --- a/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java +++ b/src/main/java/io/zipcoder/persistenceapp/controller/PersonController.java @@ -103,4 +103,16 @@ public ResponseEntity addPerson(@RequestBody Person person){ return new ResponseEntity<>(HttpStatus.CREATED); } + @RequestMapping(value = "/person/{id}", method = RequestMethod.PUT) + public ResponseEntity updatePerson(@PathVariable int id, @RequestBody Person person){ + try { + service.getPersonById(id); + } + catch(EmptyResultDataAccessException e){ + return new ResponseEntity<>("Person Not Found In Database",HttpStatus.NOT_FOUND); + } + service.updatePerson(person, id); + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java index 28dc85a..249062a 100644 --- a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java @@ -78,6 +78,14 @@ public void addPerson(Person person) { jdbc.execute(sql); } + public void updatePerson(Person person, int id) throws EmptyResultDataAccessException { + DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + String sql = "UPDATE person SET FIRST_NAME = '" + person.getFirstName() +"', LAST_NAME = '" + person.getLastName() + + "', MOBILE = '" + person.getMobile() + "', BIRTHDAY = '" + format.format(person.getBirthday()) + "', HOME_ID = '" + + person.getHomeId() + "' WHERE ID = " + id; + jdbc.execute(sql); + } + private void buildPersonList(List listToBuild, List> results) { for (Map row : results) { Person person = new Person(); From 7dc8d73488961e4308c9febd20a57df993bc74e1 Mon Sep 17 00:00:00 2001 From: Eric Barnaba Date: Sat, 7 Apr 2018 16:53:44 -0400 Subject: [PATCH 8/9] home component added --- .../controller/HomeController.java | 4 +++ .../zipcoder/persistenceapp/domain/Home.java | 31 +++++++++++++++++++ .../rowmapper/HomeRowMapper.java | 4 +++ .../PersonRowMapper.java | 2 +- .../persistenceapp/service/HomeService.java | 4 +++ .../persistenceapp/service/PersonService.java | 2 +- 6 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/zipcoder/persistenceapp/controller/HomeController.java create mode 100644 src/main/java/io/zipcoder/persistenceapp/domain/Home.java create mode 100644 src/main/java/io/zipcoder/persistenceapp/rowmapper/HomeRowMapper.java rename src/main/java/io/zipcoder/persistenceapp/{service => rowmapper}/PersonRowMapper.java (93%) create mode 100644 src/main/java/io/zipcoder/persistenceapp/service/HomeService.java diff --git a/src/main/java/io/zipcoder/persistenceapp/controller/HomeController.java b/src/main/java/io/zipcoder/persistenceapp/controller/HomeController.java new file mode 100644 index 0000000..83b8e91 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/controller/HomeController.java @@ -0,0 +1,4 @@ +package io.zipcoder.persistenceapp.controller; + +public class HomeController { +} diff --git a/src/main/java/io/zipcoder/persistenceapp/domain/Home.java b/src/main/java/io/zipcoder/persistenceapp/domain/Home.java new file mode 100644 index 0000000..15984ed --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/domain/Home.java @@ -0,0 +1,31 @@ +package io.zipcoder.persistenceapp.domain; + +public class Home { + private int id; + private String address; + private String homeNumber; + + public int getId() { + return id; + } + + public void setId(int 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/rowmapper/HomeRowMapper.java b/src/main/java/io/zipcoder/persistenceapp/rowmapper/HomeRowMapper.java new file mode 100644 index 0000000..9c2ecc6 --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/rowmapper/HomeRowMapper.java @@ -0,0 +1,4 @@ +package io.zipcoder.persistenceapp.rowmapper; + +public class HomeRowMapper { +} diff --git a/src/main/java/io/zipcoder/persistenceapp/service/PersonRowMapper.java b/src/main/java/io/zipcoder/persistenceapp/rowmapper/PersonRowMapper.java similarity index 93% rename from src/main/java/io/zipcoder/persistenceapp/service/PersonRowMapper.java rename to src/main/java/io/zipcoder/persistenceapp/rowmapper/PersonRowMapper.java index 2c464f6..5c47373 100644 --- a/src/main/java/io/zipcoder/persistenceapp/service/PersonRowMapper.java +++ b/src/main/java/io/zipcoder/persistenceapp/rowmapper/PersonRowMapper.java @@ -1,4 +1,4 @@ -package io.zipcoder.persistenceapp.service; +package io.zipcoder.persistenceapp.rowmapper; import io.zipcoder.persistenceapp.domain.Person; diff --git a/src/main/java/io/zipcoder/persistenceapp/service/HomeService.java b/src/main/java/io/zipcoder/persistenceapp/service/HomeService.java new file mode 100644 index 0000000..184037b --- /dev/null +++ b/src/main/java/io/zipcoder/persistenceapp/service/HomeService.java @@ -0,0 +1,4 @@ +package io.zipcoder.persistenceapp.service; + +public class HomeService { +} diff --git a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java index 249062a..76a19f1 100644 --- a/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java +++ b/src/main/java/io/zipcoder/persistenceapp/service/PersonService.java @@ -1,8 +1,8 @@ package io.zipcoder.persistenceapp.service; import io.zipcoder.persistenceapp.cache.PersonSurnameSearchCache; -import io.zipcoder.persistenceapp.cache.PersonSurnameSearchCacheImp; import io.zipcoder.persistenceapp.domain.Person; +import io.zipcoder.persistenceapp.rowmapper.PersonRowMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; From fe2f313052d487940797119ff3893c3b3f396a20 Mon Sep 17 00:00:00 2001 From: Eric Barnaba Date: Sat, 7 Apr 2018 17:13:58 -0400 Subject: [PATCH 9/9] saving --- .../controller/HomeController.java | 28 +++++++++++++++++++ .../rowmapper/HomeRowMapper.java | 17 ++++++++++- .../persistenceapp/service/HomeService.java | 19 +++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/zipcoder/persistenceapp/controller/HomeController.java b/src/main/java/io/zipcoder/persistenceapp/controller/HomeController.java index 83b8e91..3488034 100644 --- a/src/main/java/io/zipcoder/persistenceapp/controller/HomeController.java +++ b/src/main/java/io/zipcoder/persistenceapp/controller/HomeController.java @@ -1,4 +1,32 @@ package io.zipcoder.persistenceapp.controller; + +import io.zipcoder.persistenceapp.domain.Home; +import io.zipcoder.persistenceapp.service.HomeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController public class HomeController { + + @Autowired + HomeService service; + + @RequestMapping(value = "/home/{id}", method = RequestMethod.GET) + public ResponseEntity getHomeById(@PathVariable int id){ + try { + Home home = service.getHomeById(id); + return new ResponseEntity<>(home, HttpStatus.OK); + } + catch(EmptyResultDataAccessException e){ + return new ResponseEntity<>("Home Not Found In Database",HttpStatus.NOT_FOUND); + } + } + } diff --git a/src/main/java/io/zipcoder/persistenceapp/rowmapper/HomeRowMapper.java b/src/main/java/io/zipcoder/persistenceapp/rowmapper/HomeRowMapper.java index 9c2ecc6..a36982a 100644 --- a/src/main/java/io/zipcoder/persistenceapp/rowmapper/HomeRowMapper.java +++ b/src/main/java/io/zipcoder/persistenceapp/rowmapper/HomeRowMapper.java @@ -1,4 +1,19 @@ package io.zipcoder.persistenceapp.rowmapper; -public class HomeRowMapper { +import io.zipcoder.persistenceapp.domain.Home; +import org.springframework.jdbc.core.RowMapper; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class HomeRowMapper implements RowMapper { + @Override + public Object mapRow(ResultSet rs, int rowNum) throws SQLException { + Home home = new Home(); + home.setId(rs.getInt("ID")); + home.setAddress(rs.getString("ADDRESS")); + home.setHomeNumber(rs.getString("HOMENUMBER")); + + return home; + } } diff --git a/src/main/java/io/zipcoder/persistenceapp/service/HomeService.java b/src/main/java/io/zipcoder/persistenceapp/service/HomeService.java index 184037b..f469e05 100644 --- a/src/main/java/io/zipcoder/persistenceapp/service/HomeService.java +++ b/src/main/java/io/zipcoder/persistenceapp/service/HomeService.java @@ -1,4 +1,23 @@ package io.zipcoder.persistenceapp.service; +import io.zipcoder.persistenceapp.domain.Home; +import io.zipcoder.persistenceapp.domain.Person; +import io.zipcoder.persistenceapp.rowmapper.HomeRowMapper; +import io.zipcoder.persistenceapp.rowmapper.PersonRowMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +@Service public class HomeService { + + @Autowired + JdbcTemplate jdbc; + + public Home getHomeById(int homeId) throws EmptyResultDataAccessException { + String sql = "SELECT * FROM HOME WHERE ID = ?"; + return (Home) jdbc.queryForObject(sql, new Object[]{homeId}, new HomeRowMapper()); + } + }