diff --git a/README.md b/README.md index 4184fef..05696b4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # topjava02 -Старт вебинара: 27.02 в 20.00 GMT+3 +Прграмма курса: http://javawebinar.ru/topjava/ -Проект к вебинару http://javawebinar.ru/topjava/ - -Демо разрабатываемого приложения: http://caloriesmng.herokuapp.com/ \ No newline at end of file +Демо разрабатываемого приложения: http://topjava.herokuapp.com/ \ No newline at end of file diff --git a/conf/messages/app.properties b/conf/messages/app.properties index 2001086..15b5456 100644 --- a/conf/messages/app.properties +++ b/conf/messages/app.properties @@ -1,5 +1,5 @@ app.title=Calories management -app.footer=Webinar Maven/ Spring/ Security/ JPA(Hibernate)/ Jackson/jQuery application +app.footer=Java Online Project Maven/ Spring/ Security/ JPA(Hibernate)/ Jackson/jQuery users.title=User list meals.title=Meals list app.registered=You are registered. Please Sign in. diff --git a/conf/messages/app_ru.properties b/conf/messages/app_ru.properties index eb0aaf2..f0d7427 100644 --- a/conf/messages/app_ru.properties +++ b/conf/messages/app_ru.properties @@ -1,5 +1,5 @@ app.title=Подсчет калорий -app.footer=Приложение по вебинару Maven/ Spring/ Security/ JPA(Hibernate)/ Jackson/jQuery +app.footer=Онлайн Java проект Maven/ Spring/ Security/ JPA(Hibernate)/ Jackson/jQuery users.title=Список Пользователей meals.title=Список еды app.registered=Вы загеристрированы. Введите ваш логин/пароль. \ No newline at end of file diff --git a/hr.bat b/hr.bat index 89b82a0..3c81552 100644 --- a/hr.bat +++ b/hr.bat @@ -1,2 +1,2 @@ -call mvn -P heroku,postgres -DskipTests=true package +call mvn -B -s settings.xml -DskipTests=true clean install call java -Dspring.profiles.active="datajpa,heroku" -DDATABASE_URL="postgres://user:user@localhost:5432/topjava02" -jar target/dependency/webapp-runner.jar target/*.war diff --git a/pom.xml b/pom.xml index 86a4535..c3f36ed 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 1.0-SNAPSHOT Calories Management - http://caloriesmng.herokuapp.com/ + http://topjava.herokuapp.com/ 1.8 diff --git a/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java b/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java index 4022226..5384cbb 100644 --- a/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java +++ b/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java @@ -2,7 +2,14 @@ import ru.javawebinar.topjava.LoggerWrapper; -import javax.persistence.*; +import javax.persistence.Access; +import javax.persistence.AccessType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import javax.persistence.SequenceGenerator; +import java.io.Serializable; /** * User: gkislin @@ -11,7 +18,7 @@ @MappedSuperclass @Access(AccessType.FIELD) //@JsonAutoDetect(fieldVisibility = ANY, getterVisibility = NONE, isGetterVisibility = NONE, setterVisibility = NONE) -public class BaseEntity { +public class BaseEntity implements Serializable{ protected static final LoggerWrapper LOG = LoggerWrapper.get(BaseEntity.class); public static final int START_SEQ = 100000; diff --git a/src/main/java/ru/javawebinar/topjava/web/RootController.java b/src/main/java/ru/javawebinar/topjava/web/RootController.java index 013f5b4..6f02010 100644 --- a/src/main/java/ru/javawebinar/topjava/web/RootController.java +++ b/src/main/java/ru/javawebinar/topjava/web/RootController.java @@ -1,6 +1,7 @@ package ru.javawebinar.topjava.web; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataIntegrityViolationException; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -81,13 +82,16 @@ public String register(ModelMap model) { @RequestMapping(value = "/register", method = RequestMethod.POST) public String saveRegister(@Valid UserTo userTo, BindingResult result, SessionStatus status, ModelMap model) { - if (result.hasErrors()) { - model.addAttribute("register", true); - return "profile"; - } else { - status.setComplete(); - userService.save(UserUtil.createFromTo(userTo)); - return "redirect:login?message=app.registered"; + if (!result.hasErrors()) { + try { + userService.save(UserUtil.createFromTo(userTo)); + status.setComplete(); + return "redirect:login?message=app.registered"; + } catch (DataIntegrityViolationException ex) { + result.rejectValue("email", "error.user", "User with this email already present in application."); + } } + model.addAttribute("register", true); + return "profile"; } } diff --git a/src/main/resources/db/populateDB.sql b/src/main/resources/db/populateDB.sql index 9d4978a..34e5e37 100644 --- a/src/main/resources/db/populateDB.sql +++ b/src/main/resources/db/populateDB.sql @@ -12,8 +12,8 @@ VALUES ('Admin', 'admin@gmail.com', '$2a$10$WejOLxVuXRpOgr4IlzQJ.eT4UcukNqHlAiOV INSERT INTO user_roles (role, user_id) VALUES ('ROLE_USER', 100000); INSERT INTO user_roles (role, user_id) VALUES ('ROLE_ADMIN', 100001); -INSERT INTO meals (datetime, description, calories, user_id) VALUES ('2015-01-06 09:00:00', 'завтрак', 500, 100000); -INSERT INTO meals (datetime, description, calories, user_id) VALUES ('2015-01-06 13:00:00', 'обед', 1000, 100000); -INSERT INTO meals (datetime, description, calories, user_id) VALUES ('2015-01-07 00:00:00', 'ужин', 600, 100000); -INSERT INTO meals (datetime, description, calories, user_id) VALUES ('2015-01-07 13:00:00', 'еще обед', 1300, 100000); -INSERT INTO meals (datetime, description, calories, user_id) VALUES ('2015-01-06 14:00:00', 'еда админа', 2000, 100001); +INSERT INTO meals (datetime, description, calories, user_id) VALUES ('2015-01-06 09:00:00', 'breakfast', 500, 100000); +INSERT INTO meals (datetime, description, calories, user_id) VALUES ('2015-01-06 13:00:00', 'dinner', 1000, 100000); +INSERT INTO meals (datetime, description, calories, user_id) VALUES ('2015-01-07 00:00:00', 'supper', 600, 100000); +INSERT INTO meals (datetime, description, calories, user_id) VALUES ('2015-01-07 13:00:00', 'dinner', 1300, 100000); +INSERT INTO meals (datetime, description, calories, user_id) VALUES ('2015-01-06 14:00:00', 'admin_meal', 2000, 100001); diff --git a/src/main/resources/db/postgres.properties b/src/main/resources/db/postgres.properties index a7f045f..30a2027 100644 --- a/src/main/resources/db/postgres.properties +++ b/src/main/resources/db/postgres.properties @@ -1,10 +1,6 @@ -#database.url=jdbc:postgresql://ec2-54-228-184-236.eu-west-1.compute.amazonaws.com:5432/dfgpjfq69ca298?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory -#database.username=banydqiclzovdb -#database.password=h62cZV7oFaJGwaCkqtGuG93nfl - -database.url=jdbc:postgresql://localhost:5432/topjava02 +database.url=jdbc:postgresql://localhost:5432/topjava database.username=user -database.password=user +database.password=password database.init=true jdbc.initLocation=initDB.sql diff --git a/src/main/resources/spring/spring-db.xml b/src/main/resources/spring/spring-db.xml index c029db2..b5cf023 100644 --- a/src/main/resources/spring/spring-db.xml +++ b/src/main/resources/spring/spring-db.xml @@ -53,12 +53,21 @@ - - - - - + class="org.apache.tomcat.jdbc.pool.DataSource" + p:url="#{ 'jdbc:postgresql://' + @dbUrl.getHost() + @dbUrl.getPath() }" + p:username="#{ @dbUrl.getUserInfo().split(':')[0] }" + p:password="#{ @dbUrl.getUserInfo().split(':')[1] }" + p:driverClassName="org.postgresql.Driver" + p:validationQuery="SELECT 1 FROM users" + p:maxActive="5" + p:minIdle="1" + p:maxWait="20000" + p:initialSize="2" + p:maxIdle="5" + p:testOnBorrow="true" + p:removeAbandoned="true" + p:testOnConnect="true" + p:testWhileIdle="true"/> diff --git a/src/main/webapp/WEB-INF/tags/inputField.tag b/src/main/webapp/WEB-INF/tags/inputField.tag index 57010c1..d952a79 100644 --- a/src/main/webapp/WEB-INF/tags/inputField.tag +++ b/src/main/webapp/WEB-INF/tags/inputField.tag @@ -11,7 +11,7 @@
-
+
diff --git a/src/main/webapp/resources/js/customDatatable.js b/src/main/webapp/resources/js/customDatatable.js index 2504d03..26126ba 100644 --- a/src/main/webapp/resources/js/customDatatable.js +++ b/src/main/webapp/resources/js/customDatatable.js @@ -1,6 +1,6 @@ var form; -function makeEditable(ajaxUrl) { +function makeEditable() { form = $('#detailsForm'); $('#add').click(function () { @@ -33,6 +33,7 @@ function makeEditable(ajaxUrl) { $(document).ajaxSend(function(e, xhr, options) { xhr.setRequestHeader(header, token); }); + init(); } diff --git a/src/test/java/ru/javawebinar/topjava/web/user/AdminRestControllerTest.java b/src/test/java/ru/javawebinar/topjava/web/user/AdminRestControllerTest.java index 579fc6b..55941c1 100644 --- a/src/test/java/ru/javawebinar/topjava/web/user/AdminRestControllerTest.java +++ b/src/test/java/ru/javawebinar/topjava/web/user/AdminRestControllerTest.java @@ -110,7 +110,8 @@ public void testCreate() throws Exception { @Test public void testGetAll() throws Exception { - TestUtil.print(mockMvc.perform(get(REST_URL).contentType(MediaType.APPLICATION_JSON) + TestUtil.print(mockMvc.perform(get(REST_URL) + .contentType(MediaType.APPLICATION_JSON) .with(userHttpBasic(ADMIN))) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON))