Skip to content

Commit 523dd29

Browse files
feat: add new DTO UserInClassroomResponse
1 parent 3c743ba commit 523dd29

4 files changed

Lines changed: 57 additions & 6 deletions

File tree

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

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import com.vianavitor.simplelibrarygame.dto.ApiResponse;
44
import com.vianavitor.simplelibrarygame.dto.request.ChangeNameRequest;
55
import com.vianavitor.simplelibrarygame.dto.request.ModifyUsersInClassroomRequest;
6+
import com.vianavitor.simplelibrarygame.dto.response.UserInClassroomResponse;
7+
import com.vianavitor.simplelibrarygame.model.BookReadHistory;
68
import com.vianavitor.simplelibrarygame.model.Classroom;
9+
import com.vianavitor.simplelibrarygame.model.Student;
710
import com.vianavitor.simplelibrarygame.model.utils.classes.UserClassroom;
811
import com.vianavitor.simplelibrarygame.service.ClassroomService;
912
import jakarta.servlet.http.HttpServletRequest;
@@ -16,6 +19,7 @@
1619
import java.util.List;
1720
import java.util.Map;
1821
import java.util.Set;
22+
import java.util.stream.Collectors;
1923

2024
@RestController
2125
@RequestMapping("/api/classrooms")
@@ -49,12 +53,16 @@ public ResponseEntity<ApiResponse<Classroom>> getById(
4953
}
5054

5155
@PutMapping("/{id}/users")
52-
public ResponseEntity<ApiResponse<Set<UserClassroom>>> modifyUsers(
56+
public ResponseEntity<ApiResponse<Set<UserInClassroomResponse>>> modifyUsers(
5357
@PathVariable Long id,
5458
@Valid @RequestBody ModifyUsersInClassroomRequest request,
5559
HttpServletRequest req
5660
) {
57-
Set<UserClassroom> updated = classroomService.modifyUsersInClassroom(id, request.userIds());
61+
Set<UserInClassroomResponse> updated = classroomService.modifyUsersInClassroom(id, request.userIds())
62+
.stream()
63+
.map(this::userClassroomToDtoResp)
64+
.collect(Collectors.toSet());
65+
5866
return ResponseEntity.ok(ApiResponse.success(updated, "Users updated", req.getRequestURI()));
5967
}
6068

@@ -74,4 +82,25 @@ public ResponseEntity<ApiResponse<Void>> deleteClassroom(@PathVariable Long id,
7482
ApiResponse<Void> response = ApiResponse.success(null, "Classroom deleted", request.getRequestURI());
7583
return ResponseEntity.ok(response);
7684
}
85+
86+
private UserInClassroomResponse userClassroomToDtoResp(UserClassroom user) {
87+
if (user instanceof Student) {
88+
BookReadHistory history = ((Student) user).getStats().getCurrentBook();
89+
90+
return new UserInClassroomResponse(
91+
user.getId(), user.getName(), user.getUsername(), user.getLastLogin(),
92+
new UserInClassroomResponse.CurrentBookInfo(
93+
history.getId(),
94+
history.getBook().getTitle()
95+
),
96+
false,
97+
user.isActive()
98+
);
99+
}
100+
101+
return new UserInClassroomResponse(
102+
user.getId(), user.getName(), user.getUsername(), user.getLastLogin(),
103+
null, false, user.isActive()
104+
);
105+
}
77106
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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 UserInClassroomResponse(
9+
Long id,
10+
String name,
11+
String username,
12+
LocalDate lastLogin,
13+
@Nullable CurrentBookInfo currentBook,
14+
@JsonProperty("is_professor") boolean isProfessor,
15+
boolean active
16+
) {
17+
public record CurrentBookInfo (
18+
@Nullable Long id,
19+
@Nullable String title
20+
) {}
21+
}

src/main/java/com/vianavitor/simplelibrarygame/model/Student.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.JsonBackReference;
34
import com.fasterxml.jackson.annotation.JsonManagedReference;
45
import com.vianavitor.simplelibrarygame.model.utils.classes.UserClassroom;
56
import jakarta.persistence.*;
@@ -21,6 +22,7 @@ public class Student extends UserClassroom {
2122
joinColumns = @JoinColumn(name = "user_id"),
2223
inverseJoinColumns = @JoinColumn(name = "genre_id")
2324
)
25+
@JsonBackReference
2426
private Set<Genre> favoriteGenre = new HashSet<>();
2527

2628
@Autowired

src/main/java/com/vianavitor/simplelibrarygame/service/ClassroomService.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package com.vianavitor.simplelibrarygame.service;
22

3+
import com.vianavitor.simplelibrarygame.dto.response.UserInClassroomResponse;
34
import com.vianavitor.simplelibrarygame.exception.DuplicateResourceException;
45
import com.vianavitor.simplelibrarygame.exception.InvalidOperationException;
56
import com.vianavitor.simplelibrarygame.exception.ResourceNotFoundException;
6-
import com.vianavitor.simplelibrarygame.model.Book;
7-
import com.vianavitor.simplelibrarygame.model.Classroom;
8-
import com.vianavitor.simplelibrarygame.model.Professor;
9-
import com.vianavitor.simplelibrarygame.model.Student;
7+
import com.vianavitor.simplelibrarygame.model.*;
108
import com.vianavitor.simplelibrarygame.model.utils.classes.User;
119
import com.vianavitor.simplelibrarygame.model.utils.classes.UserClassroom;
1210
import com.vianavitor.simplelibrarygame.repository.ClassroomRepository;
@@ -17,6 +15,7 @@
1715
import org.springframework.stereotype.Service;
1816

1917
import java.util.*;
18+
import java.util.stream.Collectors;
2019

2120
@Service
2221
public class ClassroomService {

0 commit comments

Comments
 (0)