diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..5e3a3e5 --- /dev/null +++ b/compose.yml @@ -0,0 +1,10 @@ +services: + postgres: + restart: on-failure + image: postgres:13 + ports: + - "5454:5432" + environment: + POSTGRES_USER: user + POSTGRES_PASSWORD: 123456 + POSTGRES_DB: sweater_db diff --git a/pom.xml b/pom.xml index 023b939..1f37af7 100644 --- a/pom.xml +++ b/pom.xml @@ -43,6 +43,22 @@ spring-boot-starter-test test + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-docker-compose + runtime + true + + + org.postgresql + postgresql + runtime + diff --git a/src/main/java/net/sytes/kashey/sweater/GreetingController.java b/src/main/java/net/sytes/kashey/sweater/GreetingController.java index b0fd094..31e0589 100644 --- a/src/main/java/net/sytes/kashey/sweater/GreetingController.java +++ b/src/main/java/net/sytes/kashey/sweater/GreetingController.java @@ -1,7 +1,10 @@ package net.sytes.kashey.sweater; +import net.sytes.kashey.sweater.domain.Message; +import net.sytes.kashey.sweater.repository.MessageRepository; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import java.util.Map; @@ -9,6 +12,12 @@ import java.util.Map; @Controller public class GreetingController { + private final MessageRepository messageRepository; + + public GreetingController(MessageRepository messageRepository) { + this.messageRepository = messageRepository; + } + @GetMapping("/greeting") public String greeting(@RequestParam(name = "name", required = false, defaultValue = "World") String name, Map model) { @@ -16,9 +25,29 @@ public class GreetingController { return "greeting"; } - @GetMapping() - public String root(Map model) { - model.put("some", "Hello from main!!!"); + @GetMapping + public String findAllMessages(Map model) { + + model.put("messages", messageRepository.findAll()); + return "main"; + } + + @PostMapping + public String addMessage(@RequestParam String text, @RequestParam String tag, Map model) { + + messageRepository.save(new Message(text, tag)); + model.put("messages", messageRepository.findAll()); + return "main"; + } + + @PostMapping("filter") + public String filterByTag(@RequestParam String tag, Map model) { + + if (tag == null || tag.isEmpty()) { + model.put("messages", messageRepository.findAll()); + } else { + model.put("messages", messageRepository.findByTag(tag)); + } return "main"; } } \ No newline at end of file diff --git a/src/main/java/net/sytes/kashey/sweater/domain/Message.java b/src/main/java/net/sytes/kashey/sweater/domain/Message.java new file mode 100644 index 0000000..d226a83 --- /dev/null +++ b/src/main/java/net/sytes/kashey/sweater/domain/Message.java @@ -0,0 +1,47 @@ +package net.sytes.kashey.sweater.domain; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +@Entity +public class Message { + @Id + @GeneratedValue(strategy= GenerationType.AUTO) + private Integer id; + private String text; + private String tag; + + public Message() { + } + + public Message(String text, String tag) { + this.text = text; + this.tag = tag; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } +} diff --git a/src/main/java/net/sytes/kashey/sweater/repository/MessageRepository.java b/src/main/java/net/sytes/kashey/sweater/repository/MessageRepository.java new file mode 100644 index 0000000..d725455 --- /dev/null +++ b/src/main/java/net/sytes/kashey/sweater/repository/MessageRepository.java @@ -0,0 +1,10 @@ +package net.sytes.kashey.sweater.repository; + +import net.sytes.kashey.sweater.domain.Message; +import org.springframework.data.repository.CrudRepository; + +import java.util.List; + +public interface MessageRepository extends CrudRepository { + List findByTag(String tag); +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..ca96bee --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,6 @@ +spring.jpa.hibernate.ddl-auto = update +spring.datasource.url=jdbc:postgresql://localhost:5454/sweater_db +spring.datasource.username=user +spring.datasource.password=123456 +spring.datasource.driver-class-name=org.postgresql.Driver +spring.jpa.show-sql: true diff --git a/src/main/resources/templates/main.mustache b/src/main/resources/templates/main.mustache index 60fc9df..a8cfd43 100644 --- a/src/main/resources/templates/main.mustache +++ b/src/main/resources/templates/main.mustache @@ -1,5 +1,29 @@ -{{some}} + + + + +Add message + + + +Tag to filer + + + Find + + + + Messages list + {{#messages}} + + {{id}} + {{text}} + {{tag}} + + {{/messages}} + \ No newline at end of file