Skip to content

Commit 048c7e6

Browse files
committed
Add user field to question and refactor service and controller
1 parent cf1cb5c commit 048c7e6

File tree

4 files changed

+45
-6
lines changed

4 files changed

+45
-6
lines changed

src/main/java/com/example/postgresdemo/controller/QuestionController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import javax.validation.Valid;
1313

1414
@RestController
15-
1615
public class QuestionController {
1716
@Autowired
1817
private QuestionService questionService;

src/main/java/com/example/postgresdemo/model/Question.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package com.example.postgresdemo.model;
22

3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import org.hibernate.annotations.OnDelete;
5+
import org.hibernate.annotations.OnDeleteAction;
6+
37
import javax.persistence.*;
48
import javax.validation.constraints.NotBlank;
59
import javax.validation.constraints.Size;
@@ -23,6 +27,12 @@ public class Question extends AuditModel {
2327
@Column(columnDefinition = "text")
2428
private String description;
2529

30+
@ManyToOne(fetch = FetchType.LAZY, optional = false)
31+
@JoinColumn(name = "user_id", nullable = false)
32+
@OnDelete(action = OnDeleteAction.CASCADE)
33+
@JsonIgnore
34+
private User user;
35+
2636
public Long getId() {
2737
return id;
2838
}
@@ -46,4 +56,12 @@ public String getDescription() {
4656
public void setDescription(String description) {
4757
this.description = description;
4858
}
59+
60+
public User getUser() {
61+
return user;
62+
}
63+
64+
public void setUser(User user) {
65+
this.user = user;
66+
}
4967
}

src/main/java/com/example/postgresdemo/model/QuestionRequestDTO.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.example.postgresdemo.model;
22

33
import javax.validation.constraints.NotBlank;
4+
import javax.validation.constraints.NotNull;
45
import javax.validation.constraints.Size;
56

67
public class QuestionRequestDTO {
@@ -10,6 +11,9 @@ public class QuestionRequestDTO {
1011

1112
private String description;
1213

14+
@NotNull
15+
private Long authorId;
16+
1317
public String getTitle() {
1418
return title;
1519
}
@@ -25,4 +29,12 @@ public String getDescription() {
2529
public void setDescription(String description) {
2630
this.description = description;
2731
}
32+
33+
public Long getAuthorId() {
34+
return authorId;
35+
}
36+
37+
public void setAuthorId(Long authorId) {
38+
this.authorId = authorId;
39+
}
2840
}

src/main/java/com/example/postgresdemo/service/QuestionService.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,22 @@
44
import com.example.postgresdemo.model.Question;
55
import com.example.postgresdemo.model.QuestionRequestDTO;
66
import com.example.postgresdemo.model.QuestionResponseDTO;
7+
import com.example.postgresdemo.model.User;
78
import com.example.postgresdemo.repository.QuestionRepository;
9+
import com.example.postgresdemo.repository.UserRepository;
810
import org.springframework.data.domain.Page;
911
import org.springframework.data.domain.Pageable;
1012
import org.springframework.stereotype.Service;
1113

1214
@Service
1315
public class QuestionService {
1416
private final QuestionRepository questionRepository;
17+
private final UserRepository userRepository;
1518

16-
public QuestionService(QuestionRepository questionRepository) {
19+
20+
public QuestionService(QuestionRepository questionRepository, UserRepository userRepository) {
1721
this.questionRepository = questionRepository;
22+
this.userRepository = userRepository;
1823
}
1924

2025
public Page<QuestionResponseDTO> findAll(Pageable pageable) {
@@ -23,19 +28,23 @@ public Page<QuestionResponseDTO> findAll(Pageable pageable) {
2328
}
2429

2530
public QuestionResponseDTO create(QuestionRequestDTO questionRequest) {
26-
Question question = toQuestion(questionRequest);
31+
User user = userRepository.findById(questionRequest.getAuthorId())
32+
.orElseThrow(() -> new ResourceNotFoundException("User not found with id " + questionRequest.getAuthorId()));
33+
Question question = toQuestion(questionRequest, user);
2734
return toQuestionResponseDTO(questionRepository.save(question));
2835
}
2936

3037
public QuestionResponseDTO update(Long questionId, QuestionRequestDTO questionRequest) {
31-
Question question = toQuestion(questionRequest);
38+
User user = userRepository.findById(questionRequest.getAuthorId())
39+
.orElseThrow(() -> new ResourceNotFoundException("User not found with id " + questionRequest.getAuthorId()));
40+
Question question = toQuestion(questionRequest, user);
3241
return questionRepository.findById(questionId)
3342
.map(foundQuestion -> {
3443
foundQuestion.setTitle(question.getTitle());
3544
foundQuestion.setDescription(question.getDescription());
45+
foundQuestion.setUser(user);
3646
return toQuestionResponseDTO(questionRepository.save(foundQuestion));
3747
}).orElseThrow(() -> new ResourceNotFoundException("Question not found with id " + questionId));
38-
3948
}
4049

4150
public void delete(Long questionId) {
@@ -53,10 +62,11 @@ private QuestionResponseDTO toQuestionResponseDTO(Question question) {
5362
return questionResponse;
5463
}
5564

56-
private Question toQuestion(QuestionRequestDTO questionRequestDTO) {
65+
private Question toQuestion(QuestionRequestDTO questionRequestDTO, User user) {
5766
Question question = new Question();
5867
question.setTitle(questionRequestDTO.getTitle());
5968
question.setDescription(questionRequestDTO.getDescription());
69+
question.setUser(user);
6070
return question;
6171
}
6272
}

0 commit comments

Comments
 (0)