diff --git a/2019-08/spring-15/spring-15-jquery/.gitignore b/2019-08/spring-15/spring-15-jquery/.gitignore
new file mode 100644
index 00000000..e62c33c2
--- /dev/null
+++ b/2019-08/spring-15/spring-15-jquery/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+*.iml
+
+target/
diff --git a/2019-08/spring-15/spring-15-jquery/pom.xml b/2019-08/spring-15/spring-15-jquery/pom.xml
new file mode 100644
index 00000000..5e48edad
--- /dev/null
+++ b/2019-08/spring-15/spring-15-jquery/pom.xml
@@ -0,0 +1,55 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-15-jquery
+ 1.0
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.1.2.RELEASE
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
+
+ org.webjars
+ jquery
+ 3.3.1
+
+
+
+
+ com.h2database
+ h2
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
diff --git a/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/Main.java b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/Main.java
new file mode 100644
index 00000000..d33c8908
--- /dev/null
+++ b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/Main.java
@@ -0,0 +1,27 @@
+package ru.otus.spring;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import ru.otus.spring.domain.Person;
+import ru.otus.spring.repostory.PersonRepository;
+
+import javax.annotation.PostConstruct;
+
+@SpringBootApplication
+public class Main {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Main.class);
+ }
+
+ @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection")
+ @Autowired
+ private PersonRepository repository;
+
+ @PostConstruct
+ public void init() {
+ repository.save(new Person("Pushkin"));
+ repository.save(new Person("Lermontov"));
+ }
+}
diff --git a/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/domain/Person.java b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/domain/Person.java
new file mode 100644
index 00000000..374c55ac
--- /dev/null
+++ b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/domain/Person.java
@@ -0,0 +1,37 @@
+package ru.otus.spring.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class Person {
+
+ @Id
+ @GeneratedValue
+ private int id;
+ private String name;
+
+ public Person() {
+ }
+
+ public Person(String name) {
+ this.name = name;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/page/PersonPagesController.java b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/page/PersonPagesController.java
new file mode 100644
index 00000000..0f3a2e76
--- /dev/null
+++ b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/page/PersonPagesController.java
@@ -0,0 +1,15 @@
+package ru.otus.spring.page;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+
+@Controller
+public class PersonPagesController {
+
+ @GetMapping("/")
+ public String listPage(Model model) {
+ model.addAttribute("keywords", "list users in Omsk, omsk, list users, list users free");
+ return "list";
+ }
+}
diff --git a/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/repostory/PersonRepository.java
new file mode 100644
index 00000000..4b20e5b7
--- /dev/null
+++ b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/repostory/PersonRepository.java
@@ -0,0 +1,11 @@
+package ru.otus.spring.repostory;
+
+import org.springframework.data.repository.CrudRepository;
+import ru.otus.spring.domain.Person;
+
+import java.util.List;
+
+public interface PersonRepository extends CrudRepository {
+
+ List findAll();
+}
diff --git a/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/rest/PersonController.java b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/rest/PersonController.java
new file mode 100644
index 00000000..8073a615
--- /dev/null
+++ b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/rest/PersonController.java
@@ -0,0 +1,30 @@
+package ru.otus.spring.rest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import ru.otus.spring.domain.Person;
+import ru.otus.spring.repostory.PersonRepository;
+import ru.otus.spring.rest.dto.PersonDto;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@RestController
+public class PersonController {
+
+ private final PersonRepository repository;
+
+ @Autowired
+ public PersonController(PersonRepository repository) {
+ this.repository = repository;
+ }
+
+ @GetMapping("/api/persons")
+ public List getAllPersons() {
+ return repository.findAll().stream().map(PersonDto::toDto)
+ .collect(Collectors.toList());
+ }
+}
diff --git a/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/rest/dto/PersonDto.java b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
new file mode 100644
index 00000000..03918447
--- /dev/null
+++ b/2019-08/spring-15/spring-15-jquery/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2016 Russian Post
+ *
+ * This source code is Russian Post Confidential Proprietary.
+ * This software is protected by copyright. All rights and titles are reserved.
+ * You shall not use, copy, distribute, modify, decompile, disassemble or reverse engineer the software.
+ * Otherwise this violation would be treated by law and would be subject to legal prosecution.
+ * Legal use of the software provides receipt of a license from the right name only.
+ */
+package ru.otus.spring.rest.dto;
+
+import ru.otus.spring.domain.Person;
+
+/**
+ * DTO that represents Account
+ */
+@SuppressWarnings("all")
+public class PersonDto {
+
+ private int id = -1;
+ private String name;
+
+ public PersonDto() {
+ }
+
+ public PersonDto(int id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public static PersonDto toDto(Person person) {
+ return new PersonDto(person.getId(), person.getName());
+ }
+}
diff --git a/2019-08/spring-15/spring-15-jquery/src/main/resources/templates/list.html b/2019-08/spring-15/spring-15-jquery/src/main/resources/templates/list.html
new file mode 100644
index 00000000..1ccf1497
--- /dev/null
+++ b/2019-08/spring-15/spring-15-jquery/src/main/resources/templates/list.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+ List of all persons
+
+
+
+
+Persons:
+
+
+
+
+ | ID |
+ Name |
+
+
+
+
+
+
+
+