diff --git a/src/main/java/net/sytes/kashey/sweater/controller/MainController.java b/src/main/java/net/sytes/kashey/sweater/controller/MainController.java index 8a095c9..5f58f3a 100644 --- a/src/main/java/net/sytes/kashey/sweater/controller/MainController.java +++ b/src/main/java/net/sytes/kashey/sweater/controller/MainController.java @@ -1,7 +1,12 @@ package net.sytes.kashey.sweater.controller; import net.sytes.kashey.sweater.domain.Message; +import net.sytes.kashey.sweater.domain.User; import net.sytes.kashey.sweater.repository.MessageRepository; +import net.sytes.kashey.sweater.repository.UserRepository; +import net.sytes.kashey.sweater.security.CustomUserDetails; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -13,9 +18,11 @@ import java.util.Map; public class MainController { private final MessageRepository messageRepository; + private final UserRepository userRepository; - public MainController(MessageRepository messageRepository) { + public MainController(MessageRepository messageRepository, UserRepository userRepository) { this.messageRepository = messageRepository; + this.userRepository = userRepository; } @GetMapping("/") @@ -31,9 +38,15 @@ public class MainController { } @PostMapping("/main") - public String addMessage(@RequestParam String text, @RequestParam String tag, Map model) { + public String addMessage(@AuthenticationPrincipal CustomUserDetails details, + @RequestParam String text, + @RequestParam String tag, + Map model) { - messageRepository.save(new Message(text, tag)); + User author = userRepository.findByUsername(details.getUsername()) + .orElseThrow(() -> new UsernameNotFoundException("User not found: " + details.getUsername())); + + messageRepository.save(new Message(text, tag, author)); model.put("messages", messageRepository.findAll()); return "main"; } diff --git a/src/main/java/net/sytes/kashey/sweater/domain/Message.java b/src/main/java/net/sytes/kashey/sweater/domain/Message.java index d226a83..6c5f74e 100644 --- a/src/main/java/net/sytes/kashey/sweater/domain/Message.java +++ b/src/main/java/net/sytes/kashey/sweater/domain/Message.java @@ -1,9 +1,6 @@ package net.sytes.kashey.sweater.domain; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; @Entity public class Message { @@ -13,6 +10,10 @@ public class Message { private String text; private String tag; + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "user_id") + private User author; + public Message() { } @@ -21,6 +22,12 @@ public class Message { this.tag = tag; } + public Message(String text, String tag, User author) { + this.text = text; + this.tag = tag; + this.author = author; + } + public Integer getId() { return id; } @@ -44,4 +51,16 @@ public class Message { public void setTag(String tag) { this.tag = tag; } + + public User getAuthor() { + return author; + } + + public void setAuthor(User author) { + this.author = author; + } + + public String getAuthorName() { + return author == null ? "": author.getUsername(); + } } diff --git a/src/main/resources/templates/main.mustache b/src/main/resources/templates/main.mustache index 88fb4b0..555f8d7 100644 --- a/src/main/resources/templates/main.mustache +++ b/src/main/resources/templates/main.mustache @@ -32,6 +32,7 @@ {{id}} {{text}} {{tag}} + {{authorName}} {{/messages}}