diff --git a/src/main/java/hello/cluebackend/application/submission/dto/response/SubmissionResponse.java b/src/main/java/hello/cluebackend/application/submission/dto/response/SubmissionResponse.java index 6e9c86c..5a86281 100644 --- a/src/main/java/hello/cluebackend/application/submission/dto/response/SubmissionResponse.java +++ b/src/main/java/hello/cluebackend/application/submission/dto/response/SubmissionResponse.java @@ -7,6 +7,8 @@ import java.util.UUID; public record SubmissionResponse( + UUID classId, + UUID assignmentId, String title, String content, LocalDateTime startDate, @@ -22,6 +24,8 @@ public record SubmissionResponse( ) { public static SubmissionResponse from(Submission submission, List sa) { return new SubmissionResponse( + submission.getClassRoom().getClassRoomId(), + submission.getAssignment().getAssignmentId(), submission.getAssignment().getTitle(), submission.getAssignment().getContent(), submission.getAssignment().getStartDate(), diff --git a/src/main/java/hello/cluebackend/domain/classroom/exception/AlreadyJoinedClassRoomException.java b/src/main/java/hello/cluebackend/domain/classroom/exception/AlreadyJoinedClassRoomException.java new file mode 100644 index 0000000..a97fb6e --- /dev/null +++ b/src/main/java/hello/cluebackend/domain/classroom/exception/AlreadyJoinedClassRoomException.java @@ -0,0 +1,11 @@ +package hello.cluebackend.domain.classroom.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.BAD_REQUEST) +public class AlreadyJoinedClassRoomException extends RuntimeException { + public AlreadyJoinedClassRoomException(String message) { + super(message); + } +} diff --git a/src/main/java/hello/cluebackend/domain/classroom/service/ClassRoomCommandService.java b/src/main/java/hello/cluebackend/domain/classroom/service/ClassRoomCommandService.java index d5dc49a..afb98a5 100644 --- a/src/main/java/hello/cluebackend/domain/classroom/service/ClassRoomCommandService.java +++ b/src/main/java/hello/cluebackend/domain/classroom/service/ClassRoomCommandService.java @@ -2,6 +2,7 @@ import hello.cluebackend.application.classroom.dto.ClassRoomDto; import hello.cluebackend.application.classroom.mapper.ClassRoomMapper; +import hello.cluebackend.domain.classroom.exception.AlreadyJoinedClassRoomException; import hello.cluebackend.domain.classroom.model.ClassRoom; import hello.cluebackend.domain.user.service.UserService; import hello.cluebackend.infrastructure.persistence.classroom.ClassRoomJpaRepository; @@ -55,6 +56,11 @@ public void deleteClassRoom(UUID userId, UUID classId) { public void joinClassRoom(UUID userId, String code) { ClassRoom findClassRoom = classRoomJpaRepository.findByCode(code).orElseThrow(() -> new EntityNotFoundException("classroom not found")); UserEntity findUser = userService.findById(userId); + + if (classRoomUserJpaRepository.existsByClassRoomAndUser(findClassRoom, findUser)) { + throw new AlreadyJoinedClassRoomException("이미 참여한 교실입니다."); + } + ClassRoomUser classRoomUser = ClassRoomUser.create(findClassRoom, findUser); classRoomUserJpaRepository.save(classRoomUser); } diff --git a/src/main/java/hello/cluebackend/presentation/api/classroom/ClassRoomQueryController.java b/src/main/java/hello/cluebackend/presentation/api/classroom/ClassRoomQueryController.java index 2683772..faf0a93 100644 --- a/src/main/java/hello/cluebackend/presentation/api/classroom/ClassRoomQueryController.java +++ b/src/main/java/hello/cluebackend/presentation/api/classroom/ClassRoomQueryController.java @@ -22,21 +22,24 @@ public class ClassRoomQueryController { private final ClassRoomQueryService classRoomQueryService; @GetMapping - public ResponseEntity> getAllClassRooms(@AuthenticationPrincipal CustomOAuth2User customOAuth2User){ + public ResponseEntity> getAllClassRooms( + @AuthenticationPrincipal CustomOAuth2User customOAuth2User + ) { return ResponseEntity.ok(classRoomQueryService.findMyClassRoomById(customOAuth2User.getUserId())); } @GetMapping("/{classId}/all") public ResponseEntity getAllInfo( + @AuthenticationPrincipal CustomOAuth2User customOAuth2User, @PathVariable UUID classId - ){ + ) { return ResponseEntity.ok(classRoomQueryService.getAllInfo(classId)); } @GetMapping("/{classId}") public ResponseEntity findClassRoom( - @PathVariable UUID classId, - @AuthenticationPrincipal CustomOAuth2User customOAuth2User + @AuthenticationPrincipal CustomOAuth2User customOAuth2User, + @PathVariable UUID classId ) { ClassRoomDto findClassRoomDto = classRoomQueryService.findById(customOAuth2User.getUserId(), classId); return ResponseEntity.ok(findClassRoomDto);