Skip to content

Commit b5fbfff

Browse files
feat: add and implement new response DTOs
1 parent 60af438 commit b5fbfff

6 files changed

Lines changed: 107 additions & 12 deletions

File tree

src/main/java/com/vianavitor/simplelibrarygame/controller/BookReadHistoryController.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.vianavitor.simplelibrarygame.controller;
22

33
import com.vianavitor.simplelibrarygame.dto.ApiResponse;
4+
import com.vianavitor.simplelibrarygame.dto.response.UsersBookReadHistoryResponse;
5+
import com.vianavitor.simplelibrarygame.model.Book;
46
import com.vianavitor.simplelibrarygame.model.BookReadHistory;
57
import com.vianavitor.simplelibrarygame.service.BookReadHistoryService;
68
import jakarta.servlet.http.HttpServletRequest;
@@ -10,6 +12,7 @@
1012
import org.springframework.web.bind.annotation.*;
1113

1214
import java.util.List;
15+
import java.util.stream.Collectors;
1316

1417
@RestController
1518
@RequestMapping("/api/read-history")
@@ -32,10 +35,27 @@ public ResponseEntity<ApiResponse<BookReadHistory>> getById(@PathVariable Long i
3235
return ResponseEntity.ok(response);
3336
}
3437

38+
private UsersBookReadHistoryResponse bookReadHistoryToDto(BookReadHistory history) {
39+
Book book = history.getBook();
40+
41+
return new UsersBookReadHistoryResponse(
42+
history.getId(),
43+
new UsersBookReadHistoryResponse.BookInfo(
44+
book.getId(),
45+
book.getTitle()
46+
),
47+
history.getLastUpdate(), history.getLastPageRead()
48+
);
49+
}
50+
3551
@GetMapping("/student/{studentId}")
36-
public ResponseEntity<ApiResponse<List<BookReadHistory>>> getByStudent(@PathVariable Long studentId, HttpServletRequest request) {
37-
List<BookReadHistory> list = historyService.getByStudent(studentId);
38-
ApiResponse<List<BookReadHistory>> response = ApiResponse.success(list, request.getRequestURI());
52+
public ResponseEntity<ApiResponse<List<UsersBookReadHistoryResponse>>> getByStudent(@PathVariable Long studentId, HttpServletRequest request) {
53+
List<UsersBookReadHistoryResponse> list = historyService.getByStudent(studentId)
54+
.stream()
55+
.map(this::bookReadHistoryToDto)
56+
.toList();
57+
58+
ApiResponse<List<UsersBookReadHistoryResponse>> response = ApiResponse.success(list, request.getRequestURI());
3959
return ResponseEntity.ok(response);
4060
}
4161

@@ -47,9 +67,12 @@ public ResponseEntity<ApiResponse<List<BookReadHistory>>> getByBook(@PathVariabl
4767
}
4868

4969
@GetMapping("/student/{studentId}/last")
50-
public ResponseEntity<ApiResponse<BookReadHistory>> getLastByStudent(@PathVariable Long studentId, HttpServletRequest request) {
51-
BookReadHistory last = historyService.getByStudentTheLastOne(studentId);
52-
ApiResponse<BookReadHistory> response = ApiResponse.success(last, request.getRequestURI());
70+
public ResponseEntity<ApiResponse<UsersBookReadHistoryResponse>> getLastByStudent(@PathVariable Long studentId, HttpServletRequest request) {
71+
UsersBookReadHistoryResponse last = this.bookReadHistoryToDto(
72+
historyService.getByStudentTheLastOne(studentId)
73+
);
74+
75+
ApiResponse<UsersBookReadHistoryResponse> response = ApiResponse.success(last, request.getRequestURI());
5376
return ResponseEntity.ok(response);
5477
}
5578
}

src/main/java/com/vianavitor/simplelibrarygame/controller/BookSummaryController.java

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import com.vianavitor.simplelibrarygame.dto.ApiResponse;
44
import com.vianavitor.simplelibrarygame.dto.request.SubmitSummaryRequest;
5+
import com.vianavitor.simplelibrarygame.dto.response.BookSummaryResponse;
6+
import com.vianavitor.simplelibrarygame.model.Book;
57
import com.vianavitor.simplelibrarygame.model.BookSummary;
8+
import com.vianavitor.simplelibrarygame.model.Student;
69
import com.vianavitor.simplelibrarygame.service.BookSummaryService;
710
import jakarta.servlet.http.HttpServletRequest;
811
import jakarta.validation.Valid;
@@ -29,17 +32,41 @@ public ResponseEntity<ApiResponse<Void>> submitSummary(@Valid @RequestBody Submi
2932
.body(ApiResponse.success(null, "Summary submitted", req.getRequestURI()));
3033
}
3134

35+
private BookSummaryResponse bookSummaryToDto(BookSummary summary) {
36+
Student student = summary.getStudent();
37+
Book book = summary.getBook();
38+
39+
return new BookSummaryResponse(
40+
summary.getId(), summary.getText(),
41+
new BookSummaryResponse.StudentInfo(
42+
student.getId(), student.getName()
43+
),
44+
new BookSummaryResponse.BookInfo(
45+
book.getId(), book.getTitle()
46+
),
47+
summary.getWrittenAt()
48+
);
49+
}
50+
3251
@GetMapping("/student/{studentId}")
33-
public ResponseEntity<ApiResponse<List<BookSummary>>> getByStudent(@PathVariable Long studentId, HttpServletRequest request) {
34-
List<BookSummary> summaries = summaryService.getByStudent(studentId);
35-
ApiResponse<List<BookSummary>> response = ApiResponse.success(summaries, request.getRequestURI());
52+
public ResponseEntity<ApiResponse<List<BookSummaryResponse>>> getByStudent(@PathVariable Long studentId, HttpServletRequest request) {
53+
List<BookSummaryResponse> summaries = summaryService.getByStudent(studentId)
54+
.stream()
55+
.map(this::bookSummaryToDto)
56+
.toList();
57+
58+
ApiResponse<List<BookSummaryResponse>> response = ApiResponse.success(summaries, request.getRequestURI());
3659
return ResponseEntity.ok(response);
3760
}
3861

3962
@GetMapping("/book/{bookId}")
40-
public ResponseEntity<ApiResponse<List<BookSummary>>> getByBook(@PathVariable Long bookId, HttpServletRequest request) {
41-
List<BookSummary> summaries = summaryService.getByBook(bookId);
42-
ApiResponse<List<BookSummary>> response = ApiResponse.success(summaries, request.getRequestURI());
63+
public ResponseEntity<ApiResponse<List<BookSummaryResponse>>> getByBook(@PathVariable Long bookId, HttpServletRequest request) {
64+
List<BookSummaryResponse> summaries = summaryService.getByBook(bookId)
65+
.stream()
66+
.map(this::bookSummaryToDto)
67+
.toList();
68+
69+
ApiResponse<List<BookSummaryResponse>> response = ApiResponse.success(summaries, request.getRequestURI());
4370
return ResponseEntity.ok(response);
4471
}
4572
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.vianavitor.simplelibrarygame.dto.response;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
5+
import java.time.LocalDate;
6+
7+
public record BookSummaryResponse(
8+
Long id,
9+
String text,
10+
@JsonProperty("written_by") StudentInfo writtenBy,
11+
BookInfo book,
12+
@JsonProperty("written_at") LocalDate writtenAt
13+
) {
14+
public record StudentInfo(
15+
Long id,
16+
String name
17+
) {}
18+
19+
public record BookInfo(
20+
Long id,
21+
String title
22+
) {}
23+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.vianavitor.simplelibrarygame.dto.response;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import jakarta.annotation.Nullable;
5+
6+
import java.time.LocalDate;
7+
8+
public record UsersBookReadHistoryResponse(
9+
Long id,
10+
BookInfo book,
11+
@JsonProperty("last_update") @Nullable LocalDate lastUpdate,
12+
@JsonProperty("last_page_read") int lastPageRead
13+
) {
14+
public record BookInfo(
15+
Long id,
16+
String title
17+
) {}
18+
}

src/main/java/com/vianavitor/simplelibrarygame/model/Book.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.vianavitor.simplelibrarygame.model;
22

3+
import com.fasterxml.jackson.annotation.JsonIgnore;
34
import com.vianavitor.simplelibrarygame.model.utils.fields.ReadingLevel;
45
import jakarta.annotation.Nullable;
56
import jakarta.persistence.*;
@@ -48,6 +49,7 @@ public class Book {
4849
private double ratingValue;
4950

5051
@Column(columnDefinition = "int not null default 0")
52+
@JsonIgnore
5153
private int ratingCount;
5254

5355
@Column(columnDefinition = "int not null default 1")

src/main/java/com/vianavitor/simplelibrarygame/model/Group.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.vianavitor.simplelibrarygame.model;
22

3+
import com.fasterxml.jackson.annotation.JsonIgnore;
34
import jakarta.persistence.*;
45

56
@Entity
@@ -12,6 +13,7 @@ public class Group {
1213

1314
@ManyToOne
1415
@JoinColumn(name = "user_id")
16+
@JsonIgnore
1517
private Student student;
1618

1719
public Long getId() {

0 commit comments

Comments
 (0)