diff --git a/src/main/java/com/example/spot/post/application/PostCommandService.java b/src/main/java/com/example/spot/post/application/PostCommandService.java index 1290ad8a..c9a182f2 100644 --- a/src/main/java/com/example/spot/post/application/PostCommandService.java +++ b/src/main/java/com/example/spot/post/application/PostCommandService.java @@ -6,7 +6,6 @@ import com.example.spot.post.presentation.dto.PostCreateRequest; import com.example.spot.post.presentation.dto.PostCreateResponse; import com.example.spot.post.presentation.dto.PostLikeResponse; -import com.example.spot.report.presentation.dto.PostReportResponse; import com.example.spot.post.presentation.dto.PostUpdateRequest; import com.example.spot.post.presentation.dto.ScrapAllDeleteRequest; import com.example.spot.post.presentation.dto.ScrapPostResponse; diff --git a/src/main/java/com/example/spot/post/application/PostCommandServiceImpl.java b/src/main/java/com/example/spot/post/application/PostCommandServiceImpl.java index 6845e985..bc73ddb5 100644 --- a/src/main/java/com/example/spot/post/application/PostCommandServiceImpl.java +++ b/src/main/java/com/example/spot/post/application/PostCommandServiceImpl.java @@ -8,9 +8,7 @@ import com.example.spot.member.domain.Member; import com.example.spot.post.domain.Post; import com.example.spot.comment.domain.PostComment; -import com.example.spot.report.domain.PostReport; import com.example.spot.post.domain.enums.Board; -import com.example.spot.post.domain.enums.PostStatus; import com.example.spot.post.domain.association.MemberScrap; import com.example.spot.comment.domain.association.LikedPostCommentRepository; import com.example.spot.post.domain.association.LikedPostRepository; @@ -25,7 +23,6 @@ import com.example.spot.post.presentation.dto.PostCreateRequest; import com.example.spot.post.presentation.dto.PostCreateResponse; import com.example.spot.post.presentation.dto.PostLikeResponse; -import com.example.spot.report.presentation.dto.PostReportResponse; import com.example.spot.post.presentation.dto.PostUpdateRequest; import com.example.spot.post.presentation.dto.ScrapAllDeleteRequest; import com.example.spot.post.presentation.dto.ScrapPostResponse; diff --git a/src/main/java/com/example/spot/post/presentation/controller/PostController.java b/src/main/java/com/example/spot/post/presentation/controller/PostController.java index 7cdafead..7320a017 100644 --- a/src/main/java/com/example/spot/post/presentation/controller/PostController.java +++ b/src/main/java/com/example/spot/post/presentation/controller/PostController.java @@ -15,7 +15,6 @@ import com.example.spot.post.presentation.dto.PostCreateResponse; import com.example.spot.post.presentation.dto.PostLikeResponse; import com.example.spot.post.presentation.dto.PostPagingResponse; -import com.example.spot.report.presentation.dto.PostReportResponse; import com.example.spot.post.presentation.dto.PostRepresentativeResponse; import com.example.spot.post.presentation.dto.PostSingleResponse; import com.example.spot.post.presentation.dto.PostUpdateRequest; diff --git a/src/main/java/com/example/spot/report/application/ReportCommandService.java b/src/main/java/com/example/spot/report/application/ReportCommandService.java index 43c150c4..74a0df44 100644 --- a/src/main/java/com/example/spot/report/application/ReportCommandService.java +++ b/src/main/java/com/example/spot/report/application/ReportCommandService.java @@ -1,19 +1,19 @@ package com.example.spot.report.application; import com.example.spot.member.presentation.dto.MemberResponseDTO; -import com.example.spot.report.presentation.dto.PostReportResponse; -import com.example.spot.story.web.dto.response.StoryResDTO; -import com.example.spot.study.presentation.dto.request.StudyMemberReportDTO; +import com.example.spot.report.presentation.dto.PostReportDTO; +import com.example.spot.story.web.dto.response.StoryResponseDTO; +import com.example.spot.report.presentation.dto.StudyMemberReportDTO; import jakarta.validation.Valid; public interface ReportCommandService { // 게시글 신고 - PostReportResponse reportPost(Long postId, Long memberId); + PostReportDTO reportPost(Long postId, Long memberId); // 스터디 회원 신고 MemberResponseDTO.ReportedMemberDTO reportStudyMember(Long studyId, Long memberId, @Valid StudyMemberReportDTO studyMemberReportDTO); // 스터디 게시글 신고 - StoryResDTO.PostPreviewDTO reportStudyPost(Long studyId, Long postId); + StoryResponseDTO.StoryPreviewDTO reportStudyPost(Long studyId, Long postId); } diff --git a/src/main/java/com/example/spot/report/application/ReportCommandServiceImpl.java b/src/main/java/com/example/spot/report/application/ReportCommandServiceImpl.java index bbae7fbc..855f78ac 100644 --- a/src/main/java/com/example/spot/report/application/ReportCommandServiceImpl.java +++ b/src/main/java/com/example/spot/report/application/ReportCommandServiceImpl.java @@ -12,15 +12,15 @@ import com.example.spot.post.domain.PostRepository; import com.example.spot.post.domain.enums.PostStatus; import com.example.spot.report.domain.*; -import com.example.spot.report.presentation.dto.PostReportResponse; +import com.example.spot.report.presentation.dto.PostReportDTO; import com.example.spot.story.domain.Story; import com.example.spot.story.domain.StoryRepository; -import com.example.spot.story.web.dto.response.StoryResDTO; +import com.example.spot.story.web.dto.response.StoryResponseDTO; import com.example.spot.study.domain.Study; import com.example.spot.study.domain.StudyRepository; import com.example.spot.study.domain.enums.StudyApplicationStatus; import com.example.spot.study.domain.repository.StudyMemberRepository; -import com.example.spot.study.presentation.dto.request.StudyMemberReportDTO; +import com.example.spot.report.presentation.dto.StudyMemberReportDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -41,7 +41,7 @@ public class ReportCommandServiceImpl implements ReportCommandService { private final PostReportRepository postReportRepository; @Override - public PostReportResponse reportPost(Long postId, Long memberId) { + public PostReportDTO reportPost(Long postId, Long memberId) { // 동일한 게시글에 대한 중복 신고 방지 if (postReportRepository.existsByPostIdAndMemberId(postId, memberId)) { @@ -65,7 +65,7 @@ public PostReportResponse reportPost(Long postId, Long memberId) { postReportRepository.save(postReport); - return PostReportResponse.toDTO(postId, memberId); + return PostReportDTO.toDTO(postId, memberId); } /** @@ -122,7 +122,7 @@ public MemberResponseDTO.ReportedMemberDTO reportStudyMember(Long studyId, Long * @return 신고를 당한 스터디 게시글의 아이디와 제목을 반환합니다. */ @Override - public StoryResDTO.PostPreviewDTO reportStudyPost(Long studyId, Long postId) { + public StoryResponseDTO.StoryPreviewDTO reportStudyPost(Long studyId, Long postId) { //=== Exception ===// Long reporterId = SecurityUtils.getCurrentUserId(); @@ -151,6 +151,6 @@ public StoryResDTO.PostPreviewDTO reportStudyPost(Long studyId, Long postId) { storyReport = storyReportRepository.save(storyReport); story.addStudyPostReport(storyReport); - return StoryResDTO.PostPreviewDTO.toDTO(story); + return StoryResponseDTO.StoryPreviewDTO.toDTO(story); } } diff --git a/src/main/java/com/example/spot/report/presentation/controller/ReportController.java b/src/main/java/com/example/spot/report/presentation/controller/ReportController.java index d15eab33..8b8aa1b5 100644 --- a/src/main/java/com/example/spot/report/presentation/controller/ReportController.java +++ b/src/main/java/com/example/spot/report/presentation/controller/ReportController.java @@ -6,9 +6,9 @@ import com.example.spot.member.presentation.dto.MemberResponseDTO; import com.example.spot.report.application.ReportCommandService; import com.example.spot.story.domain.validation.annotation.ExistStory; -import com.example.spot.story.web.dto.response.StoryResDTO; +import com.example.spot.story.web.dto.response.StoryResponseDTO; import com.example.spot.study.domain.validation.annotation.ExistStudy; -import com.example.spot.study.presentation.dto.request.StudyMemberReportDTO; +import com.example.spot.report.presentation.dto.StudyMemberReportDTO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -50,10 +50,10 @@ public ApiResponse reportStudyMember( @Parameter(name = "studyId", description = "스터디의 id를 입력합니다.", required = true) @Parameter(name = "postId", description = "신고할 스터디 게시글의 id를 입력합니다.", required = true) @PostMapping("/studies/{studyId}/posts/{postId}/reports") - public ApiResponse reportStudyPost( + public ApiResponse reportStudyPost( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistStory Long postId) { - StoryResDTO.PostPreviewDTO postPreviewDTO = reportCommandService.reportStudyPost(studyId, postId); - return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_REPORTED, postPreviewDTO); + StoryResponseDTO.StoryPreviewDTO storyPreviewDTO = reportCommandService.reportStudyPost(studyId, postId); + return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_REPORTED, storyPreviewDTO); } } diff --git a/src/main/java/com/example/spot/report/presentation/dto/PostReportResponse.java b/src/main/java/com/example/spot/report/presentation/dto/PostReportDTO.java similarity index 74% rename from src/main/java/com/example/spot/report/presentation/dto/PostReportResponse.java rename to src/main/java/com/example/spot/report/presentation/dto/PostReportDTO.java index 9eea899b..67fc1f7e 100644 --- a/src/main/java/com/example/spot/report/presentation/dto/PostReportResponse.java +++ b/src/main/java/com/example/spot/report/presentation/dto/PostReportDTO.java @@ -9,13 +9,13 @@ @Builder @Getter @AllArgsConstructor -public class PostReportResponse { +public class PostReportDTO { private Long reportedPostId; private Long reporterId; private LocalDateTime reportedAt; - public static PostReportResponse toDTO(Long reportedPostId, Long reporterId) { - return PostReportResponse.builder() + public static PostReportDTO toDTO(Long reportedPostId, Long reporterId) { + return PostReportDTO.builder() .reportedPostId(reportedPostId) .reporterId(reporterId) .reportedAt(LocalDateTime.now()) diff --git a/src/main/java/com/example/spot/study/presentation/dto/request/StudyMemberReportDTO.java b/src/main/java/com/example/spot/report/presentation/dto/StudyMemberReportDTO.java similarity index 84% rename from src/main/java/com/example/spot/study/presentation/dto/request/StudyMemberReportDTO.java rename to src/main/java/com/example/spot/report/presentation/dto/StudyMemberReportDTO.java index ef267a86..b4ade53e 100644 --- a/src/main/java/com/example/spot/study/presentation/dto/request/StudyMemberReportDTO.java +++ b/src/main/java/com/example/spot/report/presentation/dto/StudyMemberReportDTO.java @@ -1,4 +1,4 @@ -package com.example.spot.study.presentation.dto.request; +package com.example.spot.report.presentation.dto; import com.example.spot.common.presentation.validator.TextLength; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/example/spot/schedule/application/ScheduleCommandService.java b/src/main/java/com/example/spot/schedule/application/ScheduleCommandService.java index a23fa0b2..6927b100 100644 --- a/src/main/java/com/example/spot/schedule/application/ScheduleCommandService.java +++ b/src/main/java/com/example/spot/schedule/application/ScheduleCommandService.java @@ -1,9 +1,9 @@ package com.example.spot.schedule.application; import com.example.spot.schedule.presentation.dto.request.ScheduleRequestDTO; -import com.example.spot.schedule.presentation.dto.request.StudyQuizRequestDTO; +import com.example.spot.schedule.presentation.dto.request.QuizRequestDTO; import com.example.spot.schedule.presentation.dto.response.ScheduleResponseDTO; -import com.example.spot.schedule.presentation.dto.response.StudyQuizResponseDTO; +import com.example.spot.schedule.presentation.dto.response.QuizResponseDTO; import java.time.LocalDate; @@ -16,11 +16,11 @@ public interface ScheduleCommandService { ScheduleResponseDTO.ScheduleDTO modSchedule(Long studyId, Long scheduleId, ScheduleRequestDTO.ScheduleDTO scheduleModDTO); // 스터디 퀴즈 생성 - StudyQuizResponseDTO.QuizDTO createAttendanceQuiz(Long studyId, Long scheduleId, StudyQuizRequestDTO.QuizDTO quizRequestDTO); + QuizResponseDTO.QuestionDTO createAttendanceQuiz(Long studyId, Long scheduleId, QuizRequestDTO.QuizDTO quizRequestDTO); // 스터디 출석 - StudyQuizResponseDTO.AttendanceDTO attendantStudy(Long studyId, Long scheduleId, StudyQuizRequestDTO.AttendanceDTO attendanceRequestDTO); + QuizResponseDTO.AttendanceDTO attendantStudy(Long studyId, Long scheduleId, QuizRequestDTO.AttendanceDTO attendanceRequestDTO); // 스터디 퀴즈 삭제 - StudyQuizResponseDTO.QuizDTO deleteAttendanceQuiz(Long studyId, Long scheduleId, LocalDate date); + QuizResponseDTO.QuestionDTO deleteAttendanceQuiz(Long studyId, Long scheduleId, LocalDate date); } diff --git a/src/main/java/com/example/spot/schedule/application/ScheduleCommandServiceImpl.java b/src/main/java/com/example/spot/schedule/application/ScheduleCommandServiceImpl.java index e0313710..a81f802a 100644 --- a/src/main/java/com/example/spot/schedule/application/ScheduleCommandServiceImpl.java +++ b/src/main/java/com/example/spot/schedule/application/ScheduleCommandServiceImpl.java @@ -21,9 +21,9 @@ import com.example.spot.study.domain.enums.StudyApplicationStatus; import com.example.spot.study.domain.repository.StudyMemberRepository; import com.example.spot.schedule.presentation.dto.request.ScheduleRequestDTO; -import com.example.spot.schedule.presentation.dto.request.StudyQuizRequestDTO; +import com.example.spot.schedule.presentation.dto.request.QuizRequestDTO; import com.example.spot.schedule.presentation.dto.response.ScheduleResponseDTO; -import com.example.spot.schedule.presentation.dto.response.StudyQuizResponseDTO; +import com.example.spot.schedule.presentation.dto.response.QuizResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -204,7 +204,7 @@ private static void checkStartAndFinishDate(ScheduleRequestDTO.ScheduleDTO sched * @return 생성된 퀴즈의 아이디와 질문이 반환됩니다. */ @Override - public StudyQuizResponseDTO.QuizDTO createAttendanceQuiz(Long studyId, Long scheduleId, StudyQuizRequestDTO.QuizDTO quizRequestDTO) { + public QuizResponseDTO.QuestionDTO createAttendanceQuiz(Long studyId, Long scheduleId, QuizRequestDTO.QuizDTO quizRequestDTO) { //=== Exception ===// Long memberId = SecurityUtils.getCurrentUserId(); @@ -247,7 +247,7 @@ public StudyQuizResponseDTO.QuizDTO createAttendanceQuiz(Long studyId, Long sche schedule.addQuiz(quiz); member.addQuiz(quiz); - return StudyQuizResponseDTO.QuizDTO.toDTO(quiz); + return QuizResponseDTO.QuestionDTO.toDTO(quiz); } /** @@ -259,7 +259,7 @@ public StudyQuizResponseDTO.QuizDTO createAttendanceQuiz(Long studyId, Long sche * @return 회원 아이디, 퀴즈 아이디, 출석 아이디, 정답 여부, 시도 횟수, 출석 정보 생성 시각을 반환합니다. */ @Override - public StudyQuizResponseDTO.AttendanceDTO attendantStudy(Long studyId, Long scheduleId, StudyQuizRequestDTO.AttendanceDTO attendanceRequestDTO) { + public QuizResponseDTO.AttendanceDTO attendantStudy(Long studyId, Long scheduleId, QuizRequestDTO.AttendanceDTO attendanceRequestDTO) { //=== Exception ===// Long memberId = SecurityUtils.getCurrentUserId(); @@ -314,7 +314,7 @@ public StudyQuizResponseDTO.AttendanceDTO attendantStudy(Long studyId, Long sche quiz.addMemberAttendance(quizSubmission); quizSubmission = quizSubmissionRepository.save(quizSubmission); - return StudyQuizResponseDTO.AttendanceDTO.toDTO(quizSubmission, try_num+1); + return QuizResponseDTO.AttendanceDTO.toDTO(quizSubmission, try_num+1); } /** @@ -326,7 +326,7 @@ public StudyQuizResponseDTO.AttendanceDTO attendantStudy(Long studyId, Long sche * @return 삭제된 퀴즈의 아이디와 질문을 반환합니다. */ @Override - public StudyQuizResponseDTO.QuizDTO deleteAttendanceQuiz(Long studyId, Long scheduleId, LocalDate date) { + public QuizResponseDTO.QuestionDTO deleteAttendanceQuiz(Long studyId, Long scheduleId, LocalDate date) { //=== Exception ===// Long memberId = SecurityUtils.getCurrentUserId(); @@ -362,7 +362,7 @@ public StudyQuizResponseDTO.QuizDTO deleteAttendanceQuiz(Long studyId, Long sche }); quizRepository.delete(quiz); - return StudyQuizResponseDTO.QuizDTO.toDTO(quiz); + return QuizResponseDTO.QuestionDTO.toDTO(quiz); } diff --git a/src/main/java/com/example/spot/schedule/application/ScheduleQueryService.java b/src/main/java/com/example/spot/schedule/application/ScheduleQueryService.java index 696c1276..73ab01eb 100644 --- a/src/main/java/com/example/spot/schedule/application/ScheduleQueryService.java +++ b/src/main/java/com/example/spot/schedule/application/ScheduleQueryService.java @@ -1,8 +1,7 @@ package com.example.spot.schedule.application; import com.example.spot.schedule.presentation.dto.response.ScheduleResponseDTO; -import com.example.spot.schedule.presentation.dto.response.StudyQuizResponseDTO; -import com.example.spot.schedule.presentation.dto.response.StudyScheduleResponseDTO; +import com.example.spot.schedule.presentation.dto.response.QuizResponseDTO; import org.springframework.data.domain.Pageable; import java.time.LocalDate; @@ -16,11 +15,11 @@ public interface ScheduleQueryService { ScheduleResponseDTO.MonthlyScheduleDTO getSchedule(Long studyId, Long scheduleId); // 다가오는 모임 일정 조회하기 - StudyScheduleResponseDTO findStudySchedule(Long studyId, Pageable pageable); + ScheduleResponseDTO.SchedulePageDTO findStudySchedule(Long studyId, Pageable pageable); // 금일 회원 출석 여부 조회하기 - StudyQuizResponseDTO.AttendanceListDTO getAllAttendances(Long studyId, Long scheduleId, LocalDate date); + QuizResponseDTO.AttendanceListDTO getAllAttendances(Long studyId, Long scheduleId, LocalDate date); // 스터디 출석퀴즈 조회하기 - StudyQuizResponseDTO.QuizDTO getAttendanceQuiz(Long studyId, Long scheduleId, LocalDate date); + QuizResponseDTO.QuestionDTO getAttendanceQuiz(Long studyId, Long scheduleId, LocalDate date); } diff --git a/src/main/java/com/example/spot/schedule/application/ScheduleQueryServiceImpl.java b/src/main/java/com/example/spot/schedule/application/ScheduleQueryServiceImpl.java index 069aecb0..423aaf9b 100644 --- a/src/main/java/com/example/spot/schedule/application/ScheduleQueryServiceImpl.java +++ b/src/main/java/com/example/spot/schedule/application/ScheduleQueryServiceImpl.java @@ -13,13 +13,12 @@ import com.example.spot.schedule.domain.enums.SchedulePeriod; import com.example.spot.schedule.domain.repository.QuizRepository; import com.example.spot.schedule.domain.repository.QuizSubmissionRepository; -import com.example.spot.schedule.presentation.dto.response.StudyScheduleResponseDTO; import com.example.spot.study.domain.Study; import com.example.spot.study.domain.StudyRepository; import com.example.spot.study.domain.enums.StudyApplicationStatus; import com.example.spot.study.domain.repository.StudyMemberRepository; import com.example.spot.schedule.presentation.dto.response.ScheduleResponseDTO; -import com.example.spot.schedule.presentation.dto.response.StudyQuizResponseDTO; +import com.example.spot.schedule.presentation.dto.response.QuizResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; @@ -129,7 +128,7 @@ public ScheduleResponseDTO.MonthlyScheduleDTO getSchedule(Long studyId, Long sch * @throws GeneralException 스터디 멤버가 아닌 경우 */ @Override - public StudyScheduleResponseDTO findStudySchedule(Long studyId, Pageable pageable) { + public ScheduleResponseDTO.SchedulePageDTO findStudySchedule(Long studyId, Pageable pageable) { // 로그인한 회원이 해당 스터디 회원인지 확인 if (!isMember(SecurityUtils.getCurrentUserId(), studyId)) @@ -143,7 +142,7 @@ public StudyScheduleResponseDTO findStudySchedule(Long studyId, Pageable pageabl throw new GeneralException(ErrorStatus._STUDY_SCHEDULE_NOT_FOUND); // DTO로 변환하여 반환 - List scheduleDTOS = schedules.stream().map(schedule -> StudyScheduleResponseDTO.StudyScheduleDTO.builder() + List scheduleDTOS = schedules.stream().map(schedule -> ScheduleResponseDTO.SchedulePreviewDTO.builder() .title(schedule.getTitle()) .location(schedule.getLocation()) .startedAt(schedule.getStartedAt()) @@ -151,7 +150,7 @@ public StudyScheduleResponseDTO findStudySchedule(Long studyId, Pageable pageabl .build()).toList(); // 페이징 처리 - return new StudyScheduleResponseDTO(new PageImpl<>(scheduleDTOS, pageable, schedules.size()), scheduleDTOS, schedules.size()); + return new ScheduleResponseDTO.SchedulePageDTO(new PageImpl<>(scheduleDTOS, pageable, schedules.size()), scheduleDTOS, schedules.size()); } /** @@ -233,7 +232,7 @@ private void addPeriodSchedules(Schedule schedule, int year, int month, List new StudyHandler(ErrorStatus._STUDY_MEMBER_NOT_FOUND)); //=== Feature ===// - List studyMembers = studyMemberRepository.findAllByStudyIdAndStatus(studyId, StudyApplicationStatus.APPROVED).stream() + List studyMembers = studyMemberRepository.findAllByStudyIdAndStatus(studyId, StudyApplicationStatus.APPROVED).stream() .map(memberStudy -> { List attendanceList = quizSubmissionRepository.findByQuizIdAndMemberId(quiz.getId(), memberStudy.getMember().getId()); for (QuizSubmission attendance : attendanceList) { // MemberAttendance에 퀴즈에 대한 정답이 저장되어 있으면 금일 출석 성공 if (attendance.getIsCorrect()) - return StudyQuizResponseDTO.StudyMemberDTO.toDTO(memberStudy, Boolean.TRUE); + return QuizResponseDTO.AttendingMemberDTO.toDTO(memberStudy, Boolean.TRUE); } // 퀴즈를 풀지 않았거나 MemberAttendance에 오답만 저장되어 있으면 금일 출석 실패 - return StudyQuizResponseDTO.StudyMemberDTO.toDTO(memberStudy, Boolean.FALSE); + return QuizResponseDTO.AttendingMemberDTO.toDTO(memberStudy, Boolean.FALSE); }) .toList(); - return StudyQuizResponseDTO.AttendanceListDTO.toDTO(quiz, studyMembers); + return QuizResponseDTO.AttendanceListDTO.toDTO(quiz, studyMembers); } @Override - public StudyQuizResponseDTO.QuizDTO getAttendanceQuiz(Long studyId, Long scheduleId, LocalDate date) { + public QuizResponseDTO.QuestionDTO getAttendanceQuiz(Long studyId, Long scheduleId, LocalDate date) { // Authorization Long memberId = SecurityUtils.getCurrentUserId(); @@ -307,7 +306,7 @@ public StudyQuizResponseDTO.QuizDTO getAttendanceQuiz(Long studyId, Long schedul } Quiz quiz = todayQuizzes.get(0); - return StudyQuizResponseDTO.QuizDTO.toDTO(quiz); + return QuizResponseDTO.QuestionDTO.toDTO(quiz); } diff --git a/src/main/java/com/example/spot/schedule/presentation/controller/ScheduleController.java b/src/main/java/com/example/spot/schedule/presentation/controller/ScheduleController.java index 17dd1e67..f1f9da65 100644 --- a/src/main/java/com/example/spot/schedule/presentation/controller/ScheduleController.java +++ b/src/main/java/com/example/spot/schedule/presentation/controller/ScheduleController.java @@ -7,10 +7,9 @@ import com.example.spot.schedule.application.ScheduleQueryService; import com.example.spot.schedule.domain.validation.annotation.ExistSchedule; import com.example.spot.schedule.presentation.dto.request.ScheduleRequestDTO; -import com.example.spot.schedule.presentation.dto.request.StudyQuizRequestDTO; +import com.example.spot.schedule.presentation.dto.request.QuizRequestDTO; import com.example.spot.schedule.presentation.dto.response.ScheduleResponseDTO; -import com.example.spot.schedule.presentation.dto.response.StudyQuizResponseDTO; -import com.example.spot.schedule.presentation.dto.response.StudyScheduleResponseDTO; +import com.example.spot.schedule.presentation.dto.response.QuizResponseDTO; import com.example.spot.study.domain.validation.annotation.ExistStudy; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -105,11 +104,11 @@ public ApiResponse modSchedule( 현재 시점 이후에 진행되는 모임 일정의 목록을 schedule에서 반환합니다. """) @GetMapping("/studies/{studyId}/upcoming-schedules") - public ApiResponse getUpcomingSchedules( + public ApiResponse getUpcomingSchedules( @PathVariable @ExistStudy Long studyId, @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "1") int size){ - StudyScheduleResponseDTO studyScheduleResponseDTO = scheduleQueryService.findStudySchedule(studyId, PageRequest.of(page, size)); + ScheduleResponseDTO.SchedulePageDTO studyScheduleResponseDTO = scheduleQueryService.findStudySchedule(studyId, PageRequest.of(page, size)); return ApiResponse.onSuccess(SuccessStatus._STUDY_SCHEDULE_FOUND, studyScheduleResponseDTO); } @@ -125,11 +124,11 @@ public ApiResponse getUpcomingSchedules( @Parameter(name = "studyId", description = "출석 퀴즈를 생성할 스터디의 id를 입력합니다.", required = true) @Parameter(name = "scheduleId", description = "출석 퀴즈를 생성할 일정의 id를 입력합니다.", required = true) @PostMapping("/studies/{studyId}/schedules/{scheduleId}/quiz") - public ApiResponse createAttendanceQuiz( + public ApiResponse createAttendanceQuiz( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistSchedule Long scheduleId, - @RequestBody @Valid StudyQuizRequestDTO.QuizDTO quizRequestDTO) { - StudyQuizResponseDTO.QuizDTO quizResponseDTO = scheduleCommandService.createAttendanceQuiz(studyId, scheduleId, quizRequestDTO); + @RequestBody @Valid QuizRequestDTO.QuizDTO quizRequestDTO) { + QuizResponseDTO.QuestionDTO quizResponseDTO = scheduleCommandService.createAttendanceQuiz(studyId, scheduleId, quizRequestDTO); return ApiResponse.onSuccess(SuccessStatus._STUDY_QUIZ_CREATED, quizResponseDTO); } @@ -142,12 +141,12 @@ public ApiResponse createAttendanceQuiz( @Parameter(name = "studyId", description = "출석 퀴즈를 불러올 스터디의 id를 입력합니다.", required = true) @Parameter(name = "scheduleId", description = "출석 퀴즈를 불러올 일정의 id를 입력합니다.", required = true) @GetMapping("/studies/{studyId}/schedules/{scheduleId}/quiz") - public ApiResponse getAttendanceQuiz( + public ApiResponse getAttendanceQuiz( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistSchedule Long scheduleId, @RequestParam LocalDate date) { - StudyQuizResponseDTO.QuizDTO quizDTO = scheduleQueryService.getAttendanceQuiz(studyId, scheduleId, date); - return ApiResponse.onSuccess(SuccessStatus._STUDY_QUIZ_FOUND, quizDTO); + QuizResponseDTO.QuestionDTO questionDTO = scheduleQueryService.getAttendanceQuiz(studyId, scheduleId, date); + return ApiResponse.onSuccess(SuccessStatus._STUDY_QUIZ_FOUND, questionDTO); } @@ -160,11 +159,11 @@ public ApiResponse getAttendanceQuiz( @Parameter(name = "studyId", description = "스터디의 id를 입력합니다.", required = true) @Parameter(name = "scheduleId", description = "일정의 id를 입력합니다.", required = true) @PostMapping("/studies/{studyId}/schedules/{scheduleId}/attendance") - public ApiResponse attendantStudy( + public ApiResponse attendantStudy( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistSchedule Long scheduleId, - @RequestBody @Valid StudyQuizRequestDTO.AttendanceDTO attendanceRequestDTO) { - StudyQuizResponseDTO.AttendanceDTO attendanceResponseDTO = scheduleCommandService.attendantStudy(studyId, scheduleId, attendanceRequestDTO); + @RequestBody @Valid QuizRequestDTO.AttendanceDTO attendanceRequestDTO) { + QuizResponseDTO.AttendanceDTO attendanceResponseDTO = scheduleCommandService.attendantStudy(studyId, scheduleId, attendanceRequestDTO); if (attendanceResponseDTO.getIsCorrect()) { return ApiResponse.onSuccess(SuccessStatus._STUDY_ATTENDANCE_CREATED_CORRECT_ANSWER, attendanceResponseDTO); } else { @@ -182,12 +181,12 @@ public ApiResponse attendantStudy( @Parameter(name = "studyId", description = "스터디의 id를 입력합니다.", required = true) @Parameter(name = "scheduleId", description = "일정의 id를 입력합니다.", required = true) @DeleteMapping("/studies/{studyId}/schedules/{scheduleId}/quiz") - public ApiResponse deleteAttendanceQuiz( + public ApiResponse deleteAttendanceQuiz( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistSchedule Long scheduleId, @RequestParam LocalDate date) { - StudyQuizResponseDTO.QuizDTO quizDTO = scheduleCommandService.deleteAttendanceQuiz(studyId, scheduleId, date); - return ApiResponse.onSuccess(SuccessStatus._STUDY_QUIZ_DELETED, quizDTO); + QuizResponseDTO.QuestionDTO questionDTO = scheduleCommandService.deleteAttendanceQuiz(studyId, scheduleId, date); + return ApiResponse.onSuccess(SuccessStatus._STUDY_QUIZ_DELETED, questionDTO); } @Tag(name = "스터디 출석체크") @@ -199,11 +198,11 @@ public ApiResponse deleteAttendanceQuiz( @Parameter(name = "studyId", description = "스터디의 id를 입력합니다.", required = true) @Parameter(name = "scheduleId", description = "출석을 확인할 일정의 id를 입력합니다.", required = true) @GetMapping("/studies/{studyId}/schedules/{scheduleId}/attendance") - public ApiResponse getAllAttendances( + public ApiResponse getAllAttendances( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistSchedule Long scheduleId, @RequestParam LocalDate date) { - StudyQuizResponseDTO.AttendanceListDTO attendanceListDTO = scheduleQueryService.getAllAttendances(studyId, scheduleId, date); + QuizResponseDTO.AttendanceListDTO attendanceListDTO = scheduleQueryService.getAllAttendances(studyId, scheduleId, date); return ApiResponse.onSuccess(SuccessStatus._STUDY_MEMBER_ATTENDANCES_FOUND, attendanceListDTO); } } \ No newline at end of file diff --git a/src/main/java/com/example/spot/schedule/presentation/dto/request/StudyQuizRequestDTO.java b/src/main/java/com/example/spot/schedule/presentation/dto/request/QuizRequestDTO.java similarity index 95% rename from src/main/java/com/example/spot/schedule/presentation/dto/request/StudyQuizRequestDTO.java rename to src/main/java/com/example/spot/schedule/presentation/dto/request/QuizRequestDTO.java index 907ed5e6..6aca69fd 100644 --- a/src/main/java/com/example/spot/schedule/presentation/dto/request/StudyQuizRequestDTO.java +++ b/src/main/java/com/example/spot/schedule/presentation/dto/request/QuizRequestDTO.java @@ -9,7 +9,7 @@ import java.time.LocalDateTime; @Getter -public class StudyQuizRequestDTO { +public class QuizRequestDTO { @Getter @Builder diff --git a/src/main/java/com/example/spot/schedule/presentation/dto/response/StudyQuizResponseDTO.java b/src/main/java/com/example/spot/schedule/presentation/dto/response/QuizResponseDTO.java similarity index 85% rename from src/main/java/com/example/spot/schedule/presentation/dto/response/StudyQuizResponseDTO.java rename to src/main/java/com/example/spot/schedule/presentation/dto/response/QuizResponseDTO.java index 98e88fb7..090df647 100644 --- a/src/main/java/com/example/spot/schedule/presentation/dto/response/StudyQuizResponseDTO.java +++ b/src/main/java/com/example/spot/schedule/presentation/dto/response/QuizResponseDTO.java @@ -12,19 +12,19 @@ import java.util.List; @Getter -public class StudyQuizResponseDTO { +public class QuizResponseDTO { @Getter @RequiredArgsConstructor(access = AccessLevel.PRIVATE) @Builder(access = AccessLevel.PRIVATE) - public static class QuizDTO { + public static class QuestionDTO { private final Long quizId; private final String question; private final LocalDateTime createdAt; - public static QuizDTO toDTO(Quiz quiz) { - return QuizDTO.builder() + public static QuestionDTO toDTO(Quiz quiz) { + return QuestionDTO.builder() .quizId(quiz.getId()) .question(quiz.getQuestion()) .createdAt(quiz.getCreatedAt()) @@ -63,9 +63,9 @@ public static class AttendanceListDTO { private final Long scheduleId; private final Long quizId; - private final List studyMembers; + private final List studyMembers; - public static AttendanceListDTO toDTO(Quiz quiz, List studyMembers) { + public static AttendanceListDTO toDTO(Quiz quiz, List studyMembers) { return AttendanceListDTO.builder() .scheduleId(quiz.getSchedule().getId()) .quizId(quiz.getId()) @@ -77,7 +77,7 @@ public static AttendanceListDTO toDTO(Quiz quiz, List studyMembe @Getter @RequiredArgsConstructor(access = AccessLevel.PRIVATE) @Builder(access = AccessLevel.PRIVATE) - public static class StudyMemberDTO { + public static class AttendingMemberDTO { private final Long memberId; private final String name; @@ -85,8 +85,8 @@ public static class StudyMemberDTO { private final Boolean isOwned; private final Boolean isAttending; - public static StudyMemberDTO toDTO(StudyMember studyMember, Boolean isAttending) { - return StudyMemberDTO.builder() + public static AttendingMemberDTO toDTO(StudyMember studyMember, Boolean isAttending) { + return AttendingMemberDTO.builder() .memberId(studyMember.getMember().getId()) .name(studyMember.getMember().getName()) .profileImage(studyMember.getMember().getProfileImage()) diff --git a/src/main/java/com/example/spot/schedule/presentation/dto/response/ScheduleResponseDTO.java b/src/main/java/com/example/spot/schedule/presentation/dto/response/ScheduleResponseDTO.java index 2b56c54e..4e9ab5c4 100644 --- a/src/main/java/com/example/spot/schedule/presentation/dto/response/ScheduleResponseDTO.java +++ b/src/main/java/com/example/spot/schedule/presentation/dto/response/ScheduleResponseDTO.java @@ -3,10 +3,8 @@ import com.example.spot.schedule.domain.Schedule; import com.example.spot.schedule.domain.enums.SchedulePeriod; import com.example.spot.study.domain.Study; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.RequiredArgsConstructor; +import lombok.*; +import org.springframework.data.domain.Page; import java.time.LocalDateTime; import java.util.List; @@ -22,7 +20,6 @@ public static class ScheduleDTO { private final Long studyId; private final Long scheduleId; private final String title; - private final LocalDateTime startedAt; private final LocalDateTime finishedAt; @@ -92,4 +89,38 @@ public static MonthlyScheduleDTO toDTOWithDate( .build(); } } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class SchedulePageDTO { + private int totalPages; + private long totalElements; + private boolean first; + private boolean last; + private int size; + private List schedules; + + + public SchedulePageDTO(Page page, List schedules, long totalElements){ + this.totalPages = totalElements == 0 ? 1 : (int) Math.ceil((double) totalElements / page.getSize()); + this.totalElements = totalElements; + this.first = page.isFirst(); + this.last = page.isLast(); + this.size = page.getSize(); + this.schedules = schedules; + } + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class SchedulePreviewDTO { + private LocalDateTime startedAt; + private LocalDateTime finishedAt; + private String title; + private String location; + } } diff --git a/src/main/java/com/example/spot/schedule/presentation/dto/response/StudyScheduleResponseDTO.java b/src/main/java/com/example/spot/schedule/presentation/dto/response/StudyScheduleResponseDTO.java deleted file mode 100644 index fdd0fa7f..00000000 --- a/src/main/java/com/example/spot/schedule/presentation/dto/response/StudyScheduleResponseDTO.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.example.spot.schedule.presentation.dto.response; - - -import java.time.LocalDateTime; -import java.util.List; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.springframework.data.domain.Page; - -@Builder -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class StudyScheduleResponseDTO { - private int totalPages; - private long totalElements; - private boolean first; - private boolean last; - private int size; - private List schedules; - - - public StudyScheduleResponseDTO(Page page, List schedules, long totalElements){ - this.totalPages = totalElements == 0 ? 1 : (int) Math.ceil((double) totalElements / page.getSize()); - this.totalElements = totalElements; - this.first = page.isFirst(); - this.last = page.isLast(); - this.size = page.getSize(); - this.schedules = schedules; - } - - @Builder - @Getter - @NoArgsConstructor - @AllArgsConstructor - public static class StudyScheduleDTO{ - private LocalDateTime startedAt; - private LocalDateTime finishedAt; - private String title; - private String location; - } - -} diff --git a/src/main/java/com/example/spot/story/application/StoryCommandService.java b/src/main/java/com/example/spot/story/application/StoryCommandService.java index 9ab27cdb..ab3ccdc0 100644 --- a/src/main/java/com/example/spot/story/application/StoryCommandService.java +++ b/src/main/java/com/example/spot/story/application/StoryCommandService.java @@ -3,24 +3,24 @@ import com.example.spot.story.web.dto.request.StoryCommentRequestDTO; import com.example.spot.story.web.dto.request.StoryRequestDTO; import com.example.spot.story.web.dto.response.StoryCommentResponseDTO; -import com.example.spot.story.web.dto.response.StoryResDTO; +import com.example.spot.story.web.dto.response.StoryResponseDTO; public interface StoryCommandService { // 스터디 게시글 생성 - StoryResDTO.PostPreviewDTO createPost(Long studyId, StoryRequestDTO.PostDTO postRequestDTO); + StoryResponseDTO.StoryPreviewDTO createPost(Long studyId, StoryRequestDTO.StoryDTO postRequestDTO); // 스터디 게시글 편집 - StoryResDTO.PostPreviewDTO updatePost(Long studyId, Long postId, StoryRequestDTO.PostDTO postDTO); + StoryResponseDTO.StoryPreviewDTO updatePost(Long studyId, Long postId, StoryRequestDTO.StoryDTO storyDTO); // 스터디 게시글 삭제 - StoryResDTO.PostPreviewDTO deletePost(Long studyId, Long postId); + StoryResponseDTO.StoryPreviewDTO deletePost(Long studyId, Long postId); // 스터디 게시글 좋아요 - StoryResDTO.PostLikeNumDTO likePost(Long studyId, Long postId); + StoryResponseDTO.StoryLikeNumDTO likePost(Long studyId, Long postId); // 스터디 게시글 좋아요 취소 - StoryResDTO.PostLikeNumDTO cancelPostLike(Long studyId, Long postId); + StoryResponseDTO.StoryLikeNumDTO cancelPostLike(Long studyId, Long postId); // 스터디 게시글 댓글 생성 StoryCommentResponseDTO.CommentDTO createComment(Long studyId, Long postId, StoryCommentRequestDTO.CommentDTO commentRequestDTO); diff --git a/src/main/java/com/example/spot/story/application/StoryCommandServiceImpl.java b/src/main/java/com/example/spot/story/application/StoryCommandServiceImpl.java index 03c8d3d4..6e0f0d66 100644 --- a/src/main/java/com/example/spot/story/application/StoryCommandServiceImpl.java +++ b/src/main/java/com/example/spot/story/application/StoryCommandServiceImpl.java @@ -29,7 +29,7 @@ import com.example.spot.story.web.dto.request.StoryCommentRequestDTO; import com.example.spot.story.web.dto.request.StoryRequestDTO; import com.example.spot.story.web.dto.response.StoryCommentResponseDTO; -import com.example.spot.story.web.dto.response.StoryResDTO; +import com.example.spot.story.web.dto.response.StoryResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; @@ -72,7 +72,7 @@ public class StoryCommandServiceImpl implements StoryCommandService { * @return 작성된 스터디 게시글의 Preview(게시글 아이디, 제목)를 반환합니다. */ @Override - public StoryResDTO.PostPreviewDTO createPost(Long studyId, StoryRequestDTO.PostDTO postRequestDTO) { + public StoryResponseDTO.StoryPreviewDTO createPost(Long studyId, StoryRequestDTO.StoryDTO postRequestDTO) { //=== Exception ===// Long memberId = SecurityUtils.getCurrentUserId(); @@ -157,11 +157,11 @@ public StoryResDTO.PostPreviewDTO createPost(Long studyId, StoryRequestDTO.PostD member.updateStudyPost(story); study.updateStudyPost(story); - return StoryResDTO.PostPreviewDTO.toDTO(story); + return StoryResponseDTO.StoryPreviewDTO.toDTO(story); } @Override - public StoryResDTO.PostPreviewDTO updatePost(Long studyId, Long postId, StoryRequestDTO.PostDTO postDTO) { + public StoryResponseDTO.StoryPreviewDTO updatePost(Long studyId, Long postId, StoryRequestDTO.StoryDTO storyDTO) { Long memberId = SecurityUtils.getCurrentUserId(); SecurityUtils.verifyUserId(memberId); @@ -182,26 +182,26 @@ public StoryResDTO.PostPreviewDTO updatePost(Long studyId, Long postId, StoryReq .orElseThrow(() -> new StudyHandler(ErrorStatus._STUDY_POST_UPDATE_INVALID)); // 스터디장만 공지 가능 - if (!studyMember.getIsOwned() && postDTO.getIsAnnouncement()) { + if (!studyMember.getIsOwned() && storyDTO.getIsAnnouncement()) { throw new StudyHandler(ErrorStatus._STUDY_POST_ANNOUNCEMENT_INVALID); } // 스터디 게시글 이미지 업데이트 - updateStudyPostImage(postDTO, story); + updateStudyPostImage(storyDTO, story); // 스터디 게시글 업데이트 - story.updatePost(postDTO); + story.updatePost(storyDTO); - return StoryResDTO.PostPreviewDTO.toDTO(story); + return StoryResponseDTO.StoryPreviewDTO.toDTO(story); } - private void updateStudyPostImage(StoryRequestDTO.PostDTO postDTO, Story story) { + private void updateStudyPostImage(StoryRequestDTO.StoryDTO storyDTO, Story story) { List storyImages = story.getImages(); // 기존 이미지가 존재하는 경우 이미지 유지 - if (!StringUtils.hasText(postDTO.getExistingImage())) { + if (!StringUtils.hasText(storyDTO.getExistingImage())) { // 기존 이미지가 없고 새로운 이미지를 등록한 경우 이미지 url 변경 - if (postDTO.getImage() != null) { - String imageUrl = s3ImageService.upload(postDTO.getImage()); + if (storyDTO.getImage() != null) { + String imageUrl = s3ImageService.upload(storyDTO.getImage()); storyImages.forEach(studyPostImage -> { studyPostImage.setUrl(imageUrl); story.updateImage(studyPostImage); @@ -217,7 +217,7 @@ private void updateStudyPostImage(StoryRequestDTO.PostDTO postDTO, Story story) * @return 삭제된 스터디 게시글의 Preview(게시글 아이디, 제목)를 반환합니다. */ @Override - public StoryResDTO.PostPreviewDTO deletePost(Long studyId, Long postId) { + public StoryResponseDTO.StoryPreviewDTO deletePost(Long studyId, Long postId) { //=== Exception ===// Long memberId = SecurityUtils.getCurrentUserId(); @@ -261,7 +261,7 @@ public StoryResDTO.PostPreviewDTO deletePost(Long studyId, Long postId) { throw new StudyHandler(ErrorStatus._STUDY_POST_DELETION_INVALID); } - return StoryResDTO.PostPreviewDTO.toDTO(story); + return StoryResponseDTO.StoryPreviewDTO.toDTO(story); } /** @@ -272,7 +272,7 @@ public StoryResDTO.PostPreviewDTO deletePost(Long studyId, Long postId) { * @return 게시글의 Preview(게시글 아이디, 제목)와 함께 좋아요 개수가 반환됩니다. */ @Override - public StoryResDTO.PostLikeNumDTO likePost(Long studyId, Long postId) { + public StoryResponseDTO.StoryLikeNumDTO likePost(Long studyId, Long postId) { //=== Exception ===// Long memberId = SecurityUtils.getCurrentUserId(); @@ -311,7 +311,7 @@ public StoryResDTO.PostLikeNumDTO likePost(Long studyId, Long postId) { story.plusLikeNum(); story = storyRepository.save(story); - return StoryResDTO.PostLikeNumDTO.toDTO(story); + return StoryResponseDTO.StoryLikeNumDTO.toDTO(story); } /** @@ -322,7 +322,7 @@ public StoryResDTO.PostLikeNumDTO likePost(Long studyId, Long postId) { * @return 게시글의 Preview(게시글 아이디, 제목)와 함께 좋아요 개수가 반환됩니다. */ @Override - public StoryResDTO.PostLikeNumDTO cancelPostLike(Long studyId, Long postId) { + public StoryResponseDTO.StoryLikeNumDTO cancelPostLike(Long studyId, Long postId) { //=== Exception ===// Long memberId = SecurityUtils.getCurrentUserId(); @@ -353,7 +353,7 @@ public StoryResDTO.PostLikeNumDTO cancelPostLike(Long studyId, Long postId) { likedStoryRepository.delete(likedStory); storyRepository.save(story); - return StoryResDTO.PostLikeNumDTO.toDTO(story); + return StoryResponseDTO.StoryLikeNumDTO.toDTO(story); } /* ----------------------------- 스터디 게시글 댓글 관련 API ------------------------------------- */ diff --git a/src/main/java/com/example/spot/story/application/StoryQueryService.java b/src/main/java/com/example/spot/story/application/StoryQueryService.java index 846f751e..327a6911 100644 --- a/src/main/java/com/example/spot/story/application/StoryQueryService.java +++ b/src/main/java/com/example/spot/story/application/StoryQueryService.java @@ -2,7 +2,6 @@ import com.example.spot.story.domain.enums.StoryCategoryQuery; import com.example.spot.story.web.dto.response.StoryCommentResponseDTO; -import com.example.spot.story.web.dto.response.StoryResDTO; import com.example.spot.story.web.dto.response.StoryResponseDTO; import com.example.spot.study.presentation.dto.response.StudyImageResponseDTO; import org.springframework.data.domain.PageRequest; @@ -10,16 +9,16 @@ public interface StoryQueryService { // 스터디 게시글 목록 불러오기 - StoryResDTO.PostListDTO getAllPosts(PageRequest pageRequest, Long studyId, StoryCategoryQuery storyCategoryQuery); + StoryResponseDTO.StoryListDTO getAllPosts(PageRequest pageRequest, Long studyId, StoryCategoryQuery storyCategoryQuery); // 스터디 게시글 불러오기 - StoryResDTO.PostDetailDTO getPost(Long studyId, Long postId, Boolean likeOrScrap); + StoryResponseDTO.StoryDetailDTO getPost(Long studyId, Long postId, Boolean likeOrScrap); // 스터디 공지 게시글 불러오기 - StoryResponseDTO findStudyAnnouncementPost(Long studyId); + StoryResponseDTO.StoryContentDTO findStudyAnnouncementPost(Long studyId); // 스터디 게시글 댓글 목록 불러오기 - StoryCommentResponseDTO.CommentReplyListDTO getAllComments(Long studyId, Long postId); + StoryCommentResponseDTO.ReplyListDTO getAllComments(Long studyId, Long postId); // 스터디 이미지 목록 조회 StudyImageResponseDTO.ImageListDTO getAllStudyImages(Long studyId, PageRequest pageRequest); diff --git a/src/main/java/com/example/spot/story/application/StoryQueryServiceImpl.java b/src/main/java/com/example/spot/story/application/StoryQueryServiceImpl.java index 0f0c6b99..c718b2b5 100644 --- a/src/main/java/com/example/spot/story/application/StoryQueryServiceImpl.java +++ b/src/main/java/com/example/spot/story/application/StoryQueryServiceImpl.java @@ -7,7 +7,6 @@ import com.example.spot.member.domain.Member; import com.example.spot.story.domain.Story; import com.example.spot.story.domain.enums.StoryCategory; -import com.example.spot.story.web.dto.response.StoryResponseDTO; import com.example.spot.study.domain.enums.StudyApplicationStatus; import com.example.spot.story.domain.enums.StoryCategoryQuery; import com.example.spot.study.domain.Study; @@ -20,7 +19,7 @@ import com.example.spot.study.domain.StudyRepository; import com.example.spot.common.security.utils.SecurityUtils; import com.example.spot.story.web.dto.response.StoryCommentResponseDTO; -import com.example.spot.story.web.dto.response.StoryResDTO; +import com.example.spot.story.web.dto.response.StoryResponseDTO; import com.example.spot.study.presentation.dto.response.StudyImageResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; @@ -59,7 +58,7 @@ public class StoryQueryServiceImpl implements StoryQueryService { * 2. themeQuery가 null인 경우 필터링 없이 게시글 목록을 반환합니다. */ @Override - public StoryResDTO.PostListDTO getAllPosts(PageRequest pageRequest, Long studyId, StoryCategoryQuery storyCategoryQuery) { + public StoryResponseDTO.StoryListDTO getAllPosts(PageRequest pageRequest, Long studyId, StoryCategoryQuery storyCategoryQuery) { Long memberId = SecurityUtils.getCurrentUserId(); SecurityUtils.verifyUserId(memberId); @@ -92,14 +91,14 @@ else if (storyCategoryQuery.equals(StoryCategoryQuery.ANNOUNCEMENT)) { totalPosts = storyRepository.countByStudyIdAndStoryCategory(studyId, storyCategory); } - return StoryResDTO.PostListDTO.builder() + return StoryResponseDTO.StoryListDTO.builder() .studyId(studyId) .posts(stories.stream() .map(studyPost -> { if (likedStoryRepository.existsByMemberIdAndStoryId(memberId, studyPost.getId())) { - return StoryResDTO.PostDTO.toDTO(studyPost, true); + return StoryResponseDTO.StoryDTO.toDTO(studyPost, true); } else { - return StoryResDTO.PostDTO.toDTO(studyPost, false); + return StoryResponseDTO.StoryDTO.toDTO(studyPost, false); } }) .toList()) @@ -119,7 +118,7 @@ else if (storyCategoryQuery.equals(StoryCategoryQuery.ANNOUNCEMENT)) { */ @Override @Transactional(readOnly = false) - public StoryResDTO.PostDetailDTO getPost(Long studyId, Long postId, Boolean likeOrScrap) { + public StoryResponseDTO.StoryDetailDTO getPost(Long studyId, Long postId, Boolean likeOrScrap) { //=== Exception ===// Long memberId = SecurityUtils.getCurrentUserId(); @@ -154,7 +153,7 @@ public StoryResDTO.PostDetailDTO getPost(Long studyId, Long postId, Boolean like Integer commentNum = storyCommentRepository.findAllByStoryId(postId).size(); boolean isLiked = likedStoryRepository.existsByMemberIdAndStoryId(memberId, story.getId()); boolean isWriter = story.getMember().getId().equals(memberId); - return StoryResDTO.PostDetailDTO.toDTO(story, commentNum, isLiked, isWriter); + return StoryResponseDTO.StoryDetailDTO.toDTO(story, commentNum, isLiked, isWriter); } /** @@ -166,7 +165,7 @@ public StoryResDTO.PostDetailDTO getPost(Long studyId, Long postId, Boolean like * @throws GeneralException 스터디 멤버가 아닌 경우 */ @Override - public StoryResponseDTO findStudyAnnouncementPost(Long studyId) { + public StoryResponseDTO.StoryContentDTO findStudyAnnouncementPost(Long studyId) { // 로그인한 회원이 해당 스터디 회원인지 확인 if (!isMember(SecurityUtils.getCurrentUserId(), studyId)) @@ -177,7 +176,8 @@ public StoryResponseDTO findStudyAnnouncementPost(Long studyId) { studyId, true).orElseThrow(() -> new GeneralException(ErrorStatus._STUDY_POST_NOT_FOUND)); // DTO로 변환하여 반환 - return StoryResponseDTO.builder() + return StoryResponseDTO.StoryContentDTO + .builder() .title(story.getTitle()) .content(story.getContent()).build(); } @@ -202,7 +202,7 @@ private boolean isMember(Long memberId, Long studyId) { * @return 스터디 게시글에 작성된 댓글의 목록을 반환합니다. 하나의 댓글에는 해당 댓글에 대한 답글 목록이 포함되어 있습니다. */ @Override - public StoryCommentResponseDTO.CommentReplyListDTO getAllComments(Long studyId, Long postId) { + public StoryCommentResponseDTO.ReplyListDTO getAllComments(Long studyId, Long postId) { //=== Exception ===// Long memberId = SecurityUtils.getCurrentUserId(); @@ -229,7 +229,7 @@ public StoryCommentResponseDTO.CommentReplyListDTO getAllComments(Long studyId, .sorted(Comparator.comparing(StoryComment::getCreatedAt)) .toList(); - return StoryCommentResponseDTO.CommentReplyListDTO.toDTO(story.getId(), storyComments, member, defaultImage); + return StoryCommentResponseDTO.ReplyListDTO.toDTO(story.getId(), storyComments, member, defaultImage); } diff --git a/src/main/java/com/example/spot/story/domain/Story.java b/src/main/java/com/example/spot/story/domain/Story.java index 8306ec88..dcc9d829 100644 --- a/src/main/java/com/example/spot/story/domain/Story.java +++ b/src/main/java/com/example/spot/story/domain/Story.java @@ -136,7 +136,7 @@ public void addStudyPostReport(StoryReport storyReport) { storyReports.add(storyReport); } - public void updatePost(StoryRequestDTO.PostDTO requestDTO) { + public void updatePost(StoryRequestDTO.StoryDTO requestDTO) { isAnnouncement = requestDTO.getIsAnnouncement(); storyCategory = requestDTO.getStoryCategory(); title = requestDTO.getTitle(); diff --git a/src/main/java/com/example/spot/story/web/controller/StoryController.java b/src/main/java/com/example/spot/story/web/controller/StoryController.java index 05c7caed..250753f4 100644 --- a/src/main/java/com/example/spot/story/web/controller/StoryController.java +++ b/src/main/java/com/example/spot/story/web/controller/StoryController.java @@ -5,14 +5,13 @@ import com.example.spot.story.domain.enums.StoryCategoryQuery; import com.example.spot.story.application.StoryCommandService; import com.example.spot.story.application.StoryQueryService; -import com.example.spot.story.web.dto.response.StoryResponseDTO; import com.example.spot.study.domain.validation.annotation.ExistStudy; import com.example.spot.story.domain.validation.annotation.ExistStory; import com.example.spot.story.domain.validation.annotation.ExistStoryComment; import com.example.spot.story.web.dto.request.StoryCommentRequestDTO; import com.example.spot.story.web.dto.request.StoryRequestDTO; import com.example.spot.story.web.dto.response.StoryCommentResponseDTO; -import com.example.spot.story.web.dto.response.StoryResDTO; +import com.example.spot.story.web.dto.response.StoryResponseDTO; import com.example.spot.study.presentation.dto.response.StudyImageResponseDTO; import io.swagger.v3.oas.annotations.Operation; @@ -44,11 +43,11 @@ public class StoryController { """) @Parameter(name = "studyId", description = "게시글을 작성할 스터디의 id를 입력합니다.", required = true) @PostMapping(value = "/studies/{studyId}/posts", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public ApiResponse createPost( + public ApiResponse createPost( @PathVariable @ExistStudy Long studyId, - @ModelAttribute(name = "post") @Valid StoryRequestDTO.PostDTO postRequestDTO) { - StoryResDTO.PostPreviewDTO postPreviewDTO = storyCommandService.createPost(studyId, postRequestDTO); - return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_CREATED, postPreviewDTO); + @ModelAttribute(name = "post") @Valid StoryRequestDTO.StoryDTO postRequestDTO) { + StoryResponseDTO.StoryPreviewDTO storyPreviewDTO = storyCommandService.createPost(studyId, postRequestDTO); + return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_CREATED, storyPreviewDTO); } @Tag(name= "스터디 게시글") @@ -59,13 +58,13 @@ public ApiResponse createPost( @Parameter(name = "studyId", description = "스터디의 id를 입력합니다.", required = true) @Parameter(name = "postId", description = "편집할 스터디 게시글의 id를 입력합니다.", required = true) @PatchMapping(value = "/studies/{studyId}/posts/{postId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public ApiResponse updatePost( + public ApiResponse updatePost( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistStory Long postId, - @ModelAttribute(name= "post") @Valid StoryRequestDTO.PostDTO postDTO + @ModelAttribute(name= "post") @Valid StoryRequestDTO.StoryDTO storyDTO ) { - StoryResDTO.PostPreviewDTO postPreviewDTO = storyCommandService.updatePost(studyId, postId, postDTO); - return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_UPDATED, postPreviewDTO); + StoryResponseDTO.StoryPreviewDTO storyPreviewDTO = storyCommandService.updatePost(studyId, postId, storyDTO); + return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_UPDATED, storyPreviewDTO); } @Tag(name = "스터디 게시글") @@ -77,11 +76,11 @@ public ApiResponse updatePost( @Parameter(name = "studyId", description = "스터디의 id를 입력합니다.", required = true) @Parameter(name = "postId", description = "삭제할 스터디 게시글의 id를 입력합니다.", required = true) @DeleteMapping("/studies/{studyId}/posts/{postId}") - public ApiResponse deletePost( + public ApiResponse deletePost( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistStory Long postId) { - StoryResDTO.PostPreviewDTO postPreviewDTO = storyCommandService.deletePost(studyId, postId); - return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_DELETED, postPreviewDTO); + StoryResponseDTO.StoryPreviewDTO storyPreviewDTO = storyCommandService.deletePost(studyId, postId); + return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_DELETED, storyPreviewDTO); } @Tag(name = "스터디 게시글") @@ -95,13 +94,13 @@ public ApiResponse deletePost( """) @Parameter(name = "studyId", description = "게시글 목록을 불러올 스터디의 id를 입력합니다.", required = true) @GetMapping("/studies/{studyId}/posts") - public ApiResponse getAllPosts( + public ApiResponse getAllPosts( @PathVariable @ExistStudy Long studyId, @RequestParam(required = false) StoryCategoryQuery storyCategoryQuery, @RequestParam @Min(0) Integer offset, @RequestParam @Min(1) Integer limit) { - StoryResDTO.PostListDTO postListDTO = storyQueryService.getAllPosts(PageRequest.of(offset, limit), studyId, storyCategoryQuery); - return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_LIST_FOUND, postListDTO); + StoryResponseDTO.StoryListDTO storyListDTO = storyQueryService.getAllPosts(PageRequest.of(offset, limit), studyId, storyCategoryQuery); + return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_LIST_FOUND, storyListDTO); } @Tag(name = "스터디 게시글") @@ -112,12 +111,12 @@ public ApiResponse getAllPosts( @Parameter(name = "studyId", description = "스터디의 id를 입력합니다.", required = true) @Parameter(name = "postId", description = "불러올 스터디 게시글의 id를 입력합니다.", required = true) @GetMapping("/studies/{studyId}/posts/{postId}") - public ApiResponse getPost( + public ApiResponse getPost( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistStory Long postId, @RequestParam Boolean likeOrScrap) { - StoryResDTO.PostDetailDTO postDetailDTO = storyQueryService.getPost(studyId, postId, likeOrScrap); - return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_FOUND, postDetailDTO); + StoryResponseDTO.StoryDetailDTO storyDetailDTO = storyQueryService.getPost(studyId, postId, likeOrScrap); + return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_FOUND, storyDetailDTO); } @Tag(name = "스터디 상세 정보") @@ -126,9 +125,9 @@ public ApiResponse getPost( study_post의 announced_at이 가장 최근인 공지 1개가 반환됩니다. """) @GetMapping("/studies/{studyId}/announce") - public ApiResponse getRecentAnnouncement(@PathVariable @ExistStudy Long studyId) { - StoryResponseDTO storyResponseDTO = storyQueryService.findStudyAnnouncementPost(studyId); - return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_FOUND, storyResponseDTO); + public ApiResponse getRecentAnnouncement(@PathVariable @ExistStudy Long studyId) { + StoryResponseDTO.StoryContentDTO storyContentDTO = storyQueryService.findStudyAnnouncementPost(studyId); + return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_FOUND, storyContentDTO); } @Tag(name = "스터디 게시글") @@ -139,11 +138,11 @@ public ApiResponse getRecentAnnouncement(@PathVariable @ExistS @Parameter(name = "studyId", description = "스터디의 id를 입력합니다.", required = true) @Parameter(name = "postId", description = "좋아요를 누를 스터디 게시글의 id를 입력합니다.", required = true) @PostMapping("/studies/{studyId}/posts/{postId}/likes") - public ApiResponse likePost( + public ApiResponse likePost( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistStory Long postId) { - StoryResDTO.PostLikeNumDTO postLikeNumDTO = storyCommandService.likePost(studyId, postId); - return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_LIKED, postLikeNumDTO); + StoryResponseDTO.StoryLikeNumDTO storyLikeNumDTO = storyCommandService.likePost(studyId, postId); + return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_LIKED, storyLikeNumDTO); } @Tag(name = "스터디 게시글") @@ -154,11 +153,11 @@ public ApiResponse likePost( @Parameter(name = "studyId", description = "스터디의 id를 입력합니다.", required = true) @Parameter(name = "postId", description = "좋아요를 취소할 스터디 게시글의 id를 입력합니다.", required = true) @DeleteMapping("/studies/{studyId}/posts/{postId}/likes") - public ApiResponse cancelPostLike( + public ApiResponse cancelPostLike( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistStory Long postId) { - StoryResDTO.PostLikeNumDTO postLikeNumDTO = storyCommandService.cancelPostLike(studyId, postId); - return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_DISLIKED, postLikeNumDTO); + StoryResponseDTO.StoryLikeNumDTO storyLikeNumDTO = storyCommandService.cancelPostLike(studyId, postId); + return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_DISLIKED, storyLikeNumDTO); } /* ----------------------------- 스터디 게시글 댓글 관련 API ------------------------------------- */ @@ -290,11 +289,11 @@ public ApiResponse cancelCommentDisli @Parameter(name = "studyId", description = "스터디의 id를 입력합니다.", required = true) @Parameter(name = "postId", description = "댓글을 불러올 스터디 게시글의 id를 입력합니다.", required = true) @GetMapping("/studies/{studyId}/posts/{postId}/comments") - public ApiResponse getAllComments( + public ApiResponse getAllComments( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistStory Long postId) { - StoryCommentResponseDTO.CommentReplyListDTO commentReplyListDTO = storyQueryService.getAllComments(studyId, postId); - return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_COMMENT_FOUND, commentReplyListDTO); + StoryCommentResponseDTO.ReplyListDTO replyListDTO = storyQueryService.getAllComments(studyId, postId); + return ApiResponse.onSuccess(SuccessStatus._STUDY_POST_COMMENT_FOUND, replyListDTO); } /* ----------------------------- 스터디 게시글 이미지 관련 API ------------------------------------- */ diff --git a/src/main/java/com/example/spot/story/web/dto/request/StoryRequestDTO.java b/src/main/java/com/example/spot/story/web/dto/request/StoryRequestDTO.java index 419ec847..94a37e29 100644 --- a/src/main/java/com/example/spot/story/web/dto/request/StoryRequestDTO.java +++ b/src/main/java/com/example/spot/story/web/dto/request/StoryRequestDTO.java @@ -13,9 +13,9 @@ public class StoryRequestDTO { @Getter @Setter @Builder - @Schema(name = "StudyPostDTO") + @Schema(name = "StoryDTO") @AllArgsConstructor - public static class PostDTO { + public static class StoryDTO { @NotNull @Schema(description = "공지 여부", example = "false") diff --git a/src/main/java/com/example/spot/story/web/dto/response/StoryCommentResponseDTO.java b/src/main/java/com/example/spot/story/web/dto/response/StoryCommentResponseDTO.java index c8c7b645..3785922b 100644 --- a/src/main/java/com/example/spot/story/web/dto/response/StoryCommentResponseDTO.java +++ b/src/main/java/com/example/spot/story/web/dto/response/StoryCommentResponseDTO.java @@ -20,7 +20,7 @@ public class StoryCommentResponseDTO { public static class CommentDTO { private final Long commentId; - private final MemberInfoDTO member; + private final CommentingMemberDTO member; private final String content; private final Integer likeCount; private final Integer dislikeCount; @@ -28,7 +28,7 @@ public static class CommentDTO { public static CommentDTO toDTO(StoryComment comment, String name, String defaultImage) { return CommentDTO.builder() .commentId(comment.getId()) - .member(MemberInfoDTO.toDTO(comment.getMember(), name, comment.getIsAnonymous(), defaultImage)) + .member(CommentingMemberDTO.toDTO(comment.getMember(), name, comment.getIsAnonymous(), defaultImage)) .content(comment.getContent()) .likeCount(comment.getLikeCount()) .dislikeCount(comment.getDislikeCount()) @@ -39,21 +39,21 @@ public static CommentDTO toDTO(StoryComment comment, String name, String default @Getter @RequiredArgsConstructor(access = AccessLevel.PRIVATE) @Builder(access = AccessLevel.PRIVATE) - public static class MemberInfoDTO { + public static class CommentingMemberDTO { private final Long memberId; private final String name; private final String profileImage; - public static MemberInfoDTO toDTO(Member member, String anonymity, Boolean isAnonymous, String defaultImage) { + public static CommentingMemberDTO toDTO(Member member, String anonymity, Boolean isAnonymous, String defaultImage) { if (isAnonymous) { - return MemberInfoDTO.builder() + return CommentingMemberDTO.builder() .memberId(member.getId()) .name(anonymity) .profileImage(defaultImage) .build(); } else { - return MemberInfoDTO.builder() + return CommentingMemberDTO.builder() .memberId(member.getId()) .name(member.getName()) .profileImage(member.getProfileImage()) @@ -89,16 +89,16 @@ public static CommentPreviewDTO toDTO(StoryComment comment) { @Getter @RequiredArgsConstructor(access = AccessLevel.PRIVATE) @Builder(access = AccessLevel.PRIVATE) - public static class CommentReplyListDTO { + public static class ReplyListDTO { private final Long postId; - private final List comments; + private final List comments; - public static CommentReplyListDTO toDTO(Long postId, List comments, Member member, String defaultImage) { - return CommentReplyListDTO.builder() + public static ReplyListDTO toDTO(Long postId, List comments, Member member, String defaultImage) { + return ReplyListDTO.builder() .postId(postId) .comments(comments.stream() - .map(comment -> CommentReplyDTO.toDTO(comment, member, defaultImage)) + .map(comment -> ReplyDTO.toDTO(comment, member, defaultImage)) .toList()) .build(); } @@ -107,23 +107,23 @@ public static CommentReplyListDTO toDTO(Long postId, List comments @Getter @RequiredArgsConstructor(access = AccessLevel.PRIVATE) @Builder(access = AccessLevel.PRIVATE) - public static class CommentReplyDTO { + public static class ReplyDTO { private final Long commentId; - private final MemberInfoDTO member; + private final CommentingMemberDTO member; private final String content; private final Integer likeCount; private final Integer dislikeCount; private final Boolean isDeleted; private final String isLiked; - private final List applies; + private final List applies; - public static CommentReplyDTO toDTO(StoryComment comment, Member member, String defaultImage) { + public static ReplyDTO toDTO(StoryComment comment, Member member, String defaultImage) { String anonymity = "익명" + comment.getAnonymousNum(); - return CommentReplyDTO.builder() + return ReplyDTO.builder() .commentId(comment.getId()) - .member(MemberInfoDTO.toDTO(comment.getMember(), anonymity, comment.getIsAnonymous(), defaultImage)) + .member(CommentingMemberDTO.toDTO(comment.getMember(), anonymity, comment.getIsAnonymous(), defaultImage)) .content(comment.getContent()) .likeCount(comment.getLikeCount()) .dislikeCount(comment.getDislikeCount()) @@ -131,7 +131,7 @@ public static CommentReplyDTO toDTO(StoryComment comment, Member member, String .isLiked(getIsLiked(comment, member)) .applies(comment.getChildrenComment().stream() .sorted(Comparator.comparing(StoryComment::getCreatedAt)) - .map(child -> CommentReplyDTO.toDTO(child, member, defaultImage)) + .map(child -> ReplyDTO.toDTO(child, member, defaultImage)) .toList()) .build(); } diff --git a/src/main/java/com/example/spot/story/web/dto/response/StoryResDTO.java b/src/main/java/com/example/spot/story/web/dto/response/StoryResDTO.java deleted file mode 100644 index 2acca7c3..00000000 --- a/src/main/java/com/example/spot/story/web/dto/response/StoryResDTO.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.example.spot.story.web.dto.response; - -import com.example.spot.member.domain.Member; -import com.example.spot.story.domain.Story; -import com.example.spot.story.domain.enums.StoryCategory; -import com.example.spot.story.domain.association.StoryImage; -import lombok.*; - -import java.time.LocalDateTime; -import java.util.List; - -@Getter -public class StoryResDTO { - - @Getter - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - @Builder(access = AccessLevel.PRIVATE) - public static class PostPreviewDTO { - - private final Long postId; - private final String title; - - public static PostPreviewDTO toDTO(Story story) { - return PostPreviewDTO.builder() - .postId(story.getId()) - .title(story.getTitle()) - .build(); - } - } - - @Getter - @RequiredArgsConstructor - public static class ImageListDTO { - private final List images; - } - - @Getter - @RequiredArgsConstructor - @Builder - public static class PostListDTO { - - private final Long studyId; - private final List posts; - private final Long totalPages; - } - - @Getter - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - @Builder(access = AccessLevel.PRIVATE) - public static class PostDTO { - - private final Long postId; - private final String title; - private final String content; - private final StoryCategory storyCategory; - private final Boolean isAnnouncement; - private final LocalDateTime createdAt; - private final Integer likeNum; - private final Integer hitNum; - private final Integer commentNum; - private final Boolean isLiked; - - public static PostDTO toDTO(Story story, boolean isLiked) { - return PostDTO.builder() - .postId(story.getId()) - .title(story.getTitle()) - .content(story.getContent()) - .storyCategory(story.getStoryCategory()) - .isAnnouncement(story.getIsAnnouncement()) - .createdAt(story.getCreatedAt()) - .likeNum(story.getLikeNum()) - .hitNum(story.getHitNum()) - .commentNum(story.getCommentNum()) - .isLiked(isLiked) - .build(); - } - } - - @Getter - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - @Builder(access = AccessLevel.PRIVATE) - public static class PostDetailDTO { - - private final PostMemberDTO member; - private final Long postId; - private final String title; - private final String content; - private final StoryCategory storyCategory; - private final Boolean isAnnouncement; - private final LocalDateTime createdAt; - private final Integer likeNum; - private final Integer hitNum; - private final Integer commentNum; - private final Boolean isLiked; - private final Boolean isWriter; - private final List studyPostImages; - - public static PostDetailDTO toDTO(Story story, Integer commentNum, boolean isLiked, boolean isWriter) { - return PostDetailDTO.builder() - .member(PostMemberDTO.toDTO(story.getMember())) - .postId(story.getId()) - .title(story.getTitle()) - .content(story.getContent()) - .storyCategory(story.getStoryCategory()) - .isAnnouncement(story.getIsAnnouncement()) - .createdAt(story.getCreatedAt()) - .likeNum(story.getLikeNum()) - .hitNum(story.getHitNum()) - .commentNum(commentNum) - .isLiked(isLiked) - .isWriter(isWriter) - .studyPostImages(story.getImages().stream() - .map(ImageDTO::toDTO) - .toList()) - .build(); - } - } - - @Getter - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - @Builder(access = AccessLevel.PRIVATE) - private static class PostMemberDTO { - - private final Long memberId; - private final String name; - private final String profileImage; - - public static PostMemberDTO toDTO(Member member) { - return PostMemberDTO.builder() - .memberId(member.getId()) - .name(member.getName()) - .profileImage(member.getProfileImage()) - .build(); - } - } - - @Getter - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - @Builder(access = AccessLevel.PRIVATE) - public static class ImageDTO { - - private final Long imageId; - private final String imageUrl; - - public static ImageDTO toDTO(StoryImage storyImage) { - return ImageDTO.builder() - .imageId(storyImage.getId()) - .imageUrl(storyImage.getUrl()) - .build(); - } - } - - @Getter - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - @Builder(access = AccessLevel.PRIVATE) - public static class PostLikeNumDTO { - - private final Long postId; - private final String title; - private final Integer likeNum; - - public static PostLikeNumDTO toDTO(Story story) { - return PostLikeNumDTO.builder() - .postId(story.getId()) - .title(story.getTitle()) - .likeNum(story.getLikeNum()) - .build(); - } - - } -} diff --git a/src/main/java/com/example/spot/story/web/dto/response/StoryResponseDTO.java b/src/main/java/com/example/spot/story/web/dto/response/StoryResponseDTO.java index a083cf47..a962099c 100644 --- a/src/main/java/com/example/spot/story/web/dto/response/StoryResponseDTO.java +++ b/src/main/java/com/example/spot/story/web/dto/response/StoryResponseDTO.java @@ -1,16 +1,172 @@ package com.example.spot.story.web.dto.response; +import com.example.spot.member.domain.Member; +import com.example.spot.story.domain.Story; +import com.example.spot.story.domain.enums.StoryCategory; +import com.example.spot.story.domain.association.StoryImage; +import lombok.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import java.time.LocalDateTime; +import java.util.List; -@Builder @Getter -@NoArgsConstructor -@AllArgsConstructor public class StoryResponseDTO { - private String title; - private String content; + + @Getter + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + @Builder(access = AccessLevel.PRIVATE) + public static class StoryPreviewDTO { + + private final Long postId; + private final String title; + + public static StoryPreviewDTO toDTO(Story story) { + return StoryPreviewDTO.builder() + .postId(story.getId()) + .title(story.getTitle()) + .build(); + } + } + + @Getter + @RequiredArgsConstructor + @Builder + public static class StoryListDTO { + + private final Long studyId; + private final List posts; + private final Long totalPages; + } + + @Getter + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + @Builder(access = AccessLevel.PRIVATE) + public static class StoryDTO { + + private final Long postId; + private final String title; + private final String content; + private final StoryCategory storyCategory; + private final Boolean isAnnouncement; + private final LocalDateTime createdAt; + private final Integer likeNum; + private final Integer hitNum; + private final Integer commentNum; + private final Boolean isLiked; + + public static StoryDTO toDTO(Story story, boolean isLiked) { + return StoryDTO.builder() + .postId(story.getId()) + .title(story.getTitle()) + .content(story.getContent()) + .storyCategory(story.getStoryCategory()) + .isAnnouncement(story.getIsAnnouncement()) + .createdAt(story.getCreatedAt()) + .likeNum(story.getLikeNum()) + .hitNum(story.getHitNum()) + .commentNum(story.getCommentNum()) + .isLiked(isLiked) + .build(); + } + } + + @Getter + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + @Builder(access = AccessLevel.PRIVATE) + public static class StoryDetailDTO { + + private final PostingMemberDTO member; + private final Long postId; + private final String title; + private final String content; + private final StoryCategory storyCategory; + private final Boolean isAnnouncement; + private final LocalDateTime createdAt; + private final Integer likeNum; + private final Integer hitNum; + private final Integer commentNum; + private final Boolean isLiked; + private final Boolean isWriter; + private final List studyPostImages; + + public static StoryDetailDTO toDTO(Story story, Integer commentNum, boolean isLiked, boolean isWriter) { + return StoryDetailDTO.builder() + .member(PostingMemberDTO.toDTO(story.getMember())) + .postId(story.getId()) + .title(story.getTitle()) + .content(story.getContent()) + .storyCategory(story.getStoryCategory()) + .isAnnouncement(story.getIsAnnouncement()) + .createdAt(story.getCreatedAt()) + .likeNum(story.getLikeNum()) + .hitNum(story.getHitNum()) + .commentNum(commentNum) + .isLiked(isLiked) + .isWriter(isWriter) + .studyPostImages(story.getImages().stream() + .map(ImageDTO::toDTO) + .toList()) + .build(); + } + } + + @Getter + @RequiredArgsConstructor + @Builder + public static class StoryContentDTO { + private final String title; + private final String content; + } + + @Getter + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + @Builder(access = AccessLevel.PRIVATE) + private static class PostingMemberDTO { + + private final Long memberId; + private final String name; + private final String profileImage; + + public static PostingMemberDTO toDTO(Member member) { + return PostingMemberDTO.builder() + .memberId(member.getId()) + .name(member.getName()) + .profileImage(member.getProfileImage()) + .build(); + } + } + + @Getter + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + @Builder(access = AccessLevel.PRIVATE) + public static class ImageDTO { + + private final Long imageId; + private final String imageUrl; + + public static ImageDTO toDTO(StoryImage storyImage) { + return ImageDTO.builder() + .imageId(storyImage.getId()) + .imageUrl(storyImage.getUrl()) + .build(); + } + } + + @Getter + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + @Builder(access = AccessLevel.PRIVATE) + public static class StoryLikeNumDTO { + + private final Long postId; + private final String title; + private final Integer likeNum; + + public static StoryLikeNumDTO toDTO(Story story) { + return StoryLikeNumDTO.builder() + .postId(story.getId()) + .title(story.getTitle()) + .likeNum(story.getLikeNum()) + .build(); + } + } } diff --git a/src/main/java/com/example/spot/study/application/StudyCommandService.java b/src/main/java/com/example/spot/study/application/StudyCommandService.java index 06c5274d..de8f8775 100644 --- a/src/main/java/com/example/spot/study/application/StudyCommandService.java +++ b/src/main/java/com/example/spot/study/application/StudyCommandService.java @@ -1,24 +1,23 @@ package com.example.spot.study.application; -import com.example.spot.study.presentation.dto.request.StudyJoinRequestDTO; -import com.example.spot.study.presentation.dto.request.StudyRegisterRequestDTO; -import com.example.spot.study.presentation.dto.response.StudyJoinResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyLikeResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyRegisterResponseDTO; +import com.example.spot.study.presentation.dto.request.StudyMemberRequestDTO; +import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO; +import com.example.spot.study.presentation.dto.response.StudyResponseDTO; +import jakarta.validation.Valid; public interface StudyCommandService { // 스터디 참여 신청하기 - StudyJoinResponseDTO.JoinDTO applyToStudy(Long studyId, StudyJoinRequestDTO.StudyJoinDTO studyJoinRequestDTO); + StudyMemberResponseDTO.JoinDTO applyToStudy(Long studyId, StudyMemberRequestDTO.@Valid JoinDTO studyJoinRequestDTO); // 스터디 등록하기 - StudyRegisterResponseDTO.RegisterDTO registerStudy(StudyRegisterRequestDTO.RegisterDTO studyRegisterRequestDTO); + StudyResponseDTO.RegisterDTO registerStudy(StudyMemberRequestDTO.RegisterDTO studyRegisterRequestDTO); // TODO 스터디 좋아요 Member 도메인 하위로 옮기기 - StudyLikeResponseDTO likeStudy(Long memberId, Long studyId); + StudyResponseDTO.LikeDTO likeStudy(Long memberId, Long studyId); void addHotKeyword(String keyword); // 스터디 정보 수정 - StudyRegisterResponseDTO.RegisterDTO updateStudyInfo(Long studyId, StudyRegisterRequestDTO.RegisterDTO studyInfoDTO); + StudyResponseDTO.RegisterDTO updateStudyInfo(Long studyId, StudyMemberRequestDTO.RegisterDTO studyInfoDTO); } diff --git a/src/main/java/com/example/spot/study/application/StudyCommandServiceImpl.java b/src/main/java/com/example/spot/study/application/StudyCommandServiceImpl.java index d7f8f2e0..4e1de468 100644 --- a/src/main/java/com/example/spot/study/application/StudyCommandServiceImpl.java +++ b/src/main/java/com/example/spot/study/application/StudyCommandServiceImpl.java @@ -24,12 +24,11 @@ import com.example.spot.study.domain.repository.StudyThemeRepository; import com.example.spot.study.domain.repository.ThemeRepository; import com.example.spot.common.security.utils.SecurityUtils; -import com.example.spot.study.presentation.dto.request.StudyJoinRequestDTO; -import com.example.spot.study.presentation.dto.request.StudyRegisterRequestDTO; -import com.example.spot.study.presentation.dto.request.StudyRegisterRequestDTO.RegisterDTO; -import com.example.spot.study.presentation.dto.response.StudyJoinResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyLikeResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyRegisterResponseDTO; +import com.example.spot.study.presentation.dto.request.StudyMemberRequestDTO; +import com.example.spot.study.presentation.dto.request.StudyMemberRequestDTO.RegisterDTO; +import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO; +import com.example.spot.study.presentation.dto.response.StudyResponseDTO; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -65,7 +64,7 @@ public class StudyCommandServiceImpl implements StudyCommandService { // [스터디 생성/참여] 참여 신청하기 @Transactional - public StudyJoinResponseDTO.JoinDTO applyToStudy(Long studyId, StudyJoinRequestDTO.StudyJoinDTO studyJoinRequestDTO) { + public StudyMemberResponseDTO.JoinDTO applyToStudy(Long studyId, StudyMemberRequestDTO.@Valid JoinDTO studyJoinRequestDTO) { // Authorization Long memberId = SecurityUtils.getCurrentUserId(); @@ -112,12 +111,12 @@ public StudyJoinResponseDTO.JoinDTO applyToStudy(Long studyId, StudyJoinRequestD study.addMemberStudy(studyMember); studyMemberRepository.save(studyMember); - return StudyJoinResponseDTO.JoinDTO.toDTO(member, study); + return StudyMemberResponseDTO.JoinDTO.toDTO(member, study); } // [스터디 생성/참여] 스터디 생성하기 @Transactional - public StudyRegisterResponseDTO.RegisterDTO registerStudy(StudyRegisterRequestDTO.RegisterDTO studyRegisterRequestDTO) { + public StudyResponseDTO.RegisterDTO registerStudy(StudyMemberRequestDTO.RegisterDTO studyRegisterRequestDTO) { // Authorization Long memberId = SecurityUtils.getCurrentUserId(); @@ -152,7 +151,7 @@ public StudyRegisterResponseDTO.RegisterDTO registerStudy(StudyRegisterRequestDT studyRepository.save(study); - return StudyRegisterResponseDTO.RegisterDTO.toDTO(study); + return StudyResponseDTO.RegisterDTO.toDTO(study); } @@ -164,7 +163,7 @@ public StudyRegisterResponseDTO.RegisterDTO registerStudy(StudyRegisterRequestDT */ @Override - public StudyRegisterResponseDTO.RegisterDTO updateStudyInfo(Long studyId, RegisterDTO studyInfoDTO) { + public StudyResponseDTO.RegisterDTO updateStudyInfo(Long studyId, RegisterDTO studyInfoDTO) { Long currentUserId = SecurityUtils.getCurrentUserId(); @@ -193,7 +192,7 @@ public StudyRegisterResponseDTO.RegisterDTO updateStudyInfo(Long studyId, Regist studyRepository.save(study); - return StudyRegisterResponseDTO.RegisterDTO.toDTO(study); + return StudyResponseDTO.RegisterDTO.toDTO(study); } /** @@ -203,10 +202,9 @@ public StudyRegisterResponseDTO.RegisterDTO updateStudyInfo(Long studyId, Regist * @return 스터디 제목과 좋아요 상태를 반환합니다. * @throws StudyHandler 스터디가 존재하지 않는 경우 * @throws MemberHandler 회원이 존재하지 않는 경우 - * @see StudyLikeResponseDTO */ @Override - public StudyLikeResponseDTO likeStudy(Long memberId, Long studyId) { + public StudyResponseDTO.LikeDTO likeStudy(Long memberId, Long studyId) { // 회원과 스터디 조회 Study study = studyRepository.findById(studyId) @@ -233,7 +231,7 @@ public StudyLikeResponseDTO likeStudy(Long memberId, Long studyId) { } // 저장 및 응답 객체 생성 preferredStudyRepository.save(preferredStudy); - return new StudyLikeResponseDTO(preferredStudy); + return new StudyResponseDTO.LikeDTO(preferredStudy); } @@ -255,7 +253,7 @@ private void createMemberStudy(Member member, Study study) { } - private void createRegionStudy(Study study, StudyRegisterRequestDTO.RegisterDTO studyRegisterRequestDTO) { + private void createRegionStudy(Study study, StudyMemberRequestDTO.RegisterDTO studyRegisterRequestDTO) { studyRegisterRequestDTO.getRegions() .forEach(stringRegion -> { @@ -277,7 +275,7 @@ private void createRegionStudy(Study study, StudyRegisterRequestDTO.RegisterDTO }); } - private void createStudyTheme(Study study, StudyRegisterRequestDTO.RegisterDTO studyRegisterRequestDTO) { + private void createStudyTheme(Study study, StudyMemberRequestDTO.RegisterDTO studyRegisterRequestDTO) { studyRegisterRequestDTO.getThemes() .forEach(stringTheme -> { diff --git a/src/main/java/com/example/spot/study/application/StudyMemberCommandService.java b/src/main/java/com/example/spot/study/application/StudyMemberCommandService.java index ad50e46d..3fa022d4 100644 --- a/src/main/java/com/example/spot/study/application/StudyMemberCommandService.java +++ b/src/main/java/com/example/spot/study/application/StudyMemberCommandService.java @@ -1,33 +1,23 @@ package com.example.spot.study.application; -import com.example.spot.member.presentation.dto.MemberResponseDTO; -import com.example.spot.study.presentation.dto.request.StudyHostWithdrawRequestDTO; -import com.example.spot.study.presentation.dto.request.StudyMemberReportDTO; -import com.example.spot.vote.presentation.dto.request.StudyVoteRequestDTO; -import com.example.spot.story.web.dto.response.StoryResDTO; -import com.example.spot.study.presentation.dto.response.StudyTerminationResponseDTO; -import com.example.spot.vote.presentation.dto.response.StudyVoteResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyWithdrawalResponseDTO; -import com.example.spot.todo.presentation.dto.request.ToDoListRequestDTO; -import com.example.spot.todo.presentation.dto.response.ToDoListResponseDTO; -import com.example.spot.todo.presentation.dto.response.ToDoListResponseDTO.ToDoListCreateResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyApplyResponseDTO; -import jakarta.validation.Valid; +import com.example.spot.study.presentation.dto.request.StudyMemberRequestDTO; +import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO; +import com.example.spot.study.presentation.dto.response.StudyResponseDTO; public interface StudyMemberCommandService { // 스터디 탈퇴 - StudyWithdrawalResponseDTO.WithdrawalDTO withdrawFromStudy(Long studyId); + StudyMemberResponseDTO.WithdrawalDTO withdrawFromStudy(Long studyId); // 스터디 호스트 탈퇴 - StudyWithdrawalResponseDTO.WithdrawalDTO withdrawHostFromStudy(Long studyId, StudyHostWithdrawRequestDTO requestDTO); + StudyMemberResponseDTO.WithdrawalDTO withdrawHostFromStudy(Long studyId, StudyMemberRequestDTO.HostWithdrawDTO hostWithdrawDTO); // 스터디 종료 - StudyTerminationResponseDTO.TerminationDTO terminateStudy(Long studyId, String performance); + StudyResponseDTO.TerminationDTO terminateStudy(Long studyId, String performance); // 스터디 신청 수락 - StudyApplyResponseDTO acceptAndRejectStudyApply(Long memberId, Long studyId, boolean isAccept); + StudyMemberResponseDTO.ApplicationStatusDTO acceptAndRejectStudyApply(Long memberId, Long studyId, boolean isAccept); // 스터디 승인 거절 테스트 - StudyApplyResponseDTO acceptAndRejectStudyApplyForTest(Long memberId, Long studyId, boolean isAccept); + StudyMemberResponseDTO.ApplicationStatusDTO acceptAndRejectStudyApplyForTest(Long memberId, Long studyId, boolean isAccept); } diff --git a/src/main/java/com/example/spot/study/application/StudyMemberCommandServiceImpl.java b/src/main/java/com/example/spot/study/application/StudyMemberCommandServiceImpl.java index c7660a3f..5e308594 100644 --- a/src/main/java/com/example/spot/study/application/StudyMemberCommandServiceImpl.java +++ b/src/main/java/com/example/spot/study/application/StudyMemberCommandServiceImpl.java @@ -18,13 +18,11 @@ import com.example.spot.report.domain.StoryReportRepository; import com.example.spot.story.domain.StoryRepository; import com.example.spot.study.domain.StudyRepository; -import com.example.spot.study.presentation.dto.request.StudyHostWithdrawRequestDTO; -import com.example.spot.study.presentation.dto.response.StudyTerminationResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyWithdrawalResponseDTO; +import com.example.spot.study.presentation.dto.request.StudyMemberRequestDTO; +import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO; +import com.example.spot.study.presentation.dto.response.StudyResponseDTO; import com.example.spot.common.security.utils.SecurityUtils; import com.example.spot.common.application.s3.S3ImageService; -import com.example.spot.study.presentation.dto.response.StudyWithdrawalResponseDTO.WithdrawalDTO; -import com.example.spot.study.presentation.dto.response.StudyApplyResponseDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -57,7 +55,7 @@ public class StudyMemberCommandServiceImpl implements StudyMemberCommandService * @param studyId 타겟 회원이 탈퇴하고자 하는 스터디의 아이디를 입력 받습니다. * @return 탈퇴한 스터디의 아이디와 이름, 탈퇴한 회원의 아이디와 이름이 반환됩니다. */ - public StudyWithdrawalResponseDTO.WithdrawalDTO withdrawFromStudy(Long studyId) { + public StudyMemberResponseDTO.WithdrawalDTO withdrawFromStudy(Long studyId) { // Authorization Long memberId = SecurityUtils.getCurrentUserId(); @@ -83,11 +81,11 @@ public StudyWithdrawalResponseDTO.WithdrawalDTO withdrawFromStudy(Long studyId) studyMemberRepository.delete(studyMember); - return StudyWithdrawalResponseDTO.WithdrawalDTO.toDTO(member, study); + return StudyMemberResponseDTO.WithdrawalDTO.toDTO(member, study); } @Override - public WithdrawalDTO withdrawHostFromStudy(Long studyId, StudyHostWithdrawRequestDTO requestDTO) { + public StudyMemberResponseDTO.WithdrawalDTO withdrawHostFromStudy(Long studyId, StudyMemberRequestDTO.HostWithdrawDTO hostWithdrawDTO) { // Authorization Long hostId = SecurityUtils.getCurrentUserId(); SecurityUtils.verifyUserId(hostId); @@ -99,17 +97,17 @@ public WithdrawalDTO withdrawHostFromStudy(Long studyId, StudyHostWithdrawReques throw new StudyHandler(ErrorStatus._STUDY_OWNER_ONLY_CAN_WITHDRAW); } - StudyMember newHostStudy = studyMemberRepository.findByMemberIdAndStudyIdAndStatus(requestDTO.getNewHostId(), studyId, StudyApplicationStatus.APPROVED) + StudyMember newHostStudy = studyMemberRepository.findByMemberIdAndStudyIdAndStatus(hostWithdrawDTO.getNewHostId(), studyId, StudyApplicationStatus.APPROVED) .orElseThrow(() -> new StudyHandler(ErrorStatus._STUDY_MEMBER_NOT_EXIST)); studyMemberRepository.delete(studyMember); newHostStudy.setIsOwned(true); - newHostStudy.setReason(requestDTO.getReason()); + newHostStudy.setReason(hostWithdrawDTO.getReason()); studyMemberRepository.save(newHostStudy); - return StudyWithdrawalResponseDTO.WithdrawalDTO.toDTO(newHostStudy.getMember(), newHostStudy.getStudy()); + return StudyMemberResponseDTO.WithdrawalDTO.toDTO(newHostStudy.getMember(), newHostStudy.getStudy()); } /** * 운영중인 스터디를 종료하는 메서드입니다. 스터디장만 호출 가능합니다. @@ -118,7 +116,7 @@ public WithdrawalDTO withdrawHostFromStudy(Long studyId, StudyHostWithdrawReques * @param performance 종료할 스터디의 성과를 입력 받습니다. * @return 종료된 스터디의 아이디, 이름, 상태를 반환합니다. */ - public StudyTerminationResponseDTO.TerminationDTO terminateStudy(Long studyId, String performance) { + public StudyResponseDTO.TerminationDTO terminateStudy(Long studyId, String performance) { // Authorization Long memberId = SecurityUtils.getCurrentUserId(); @@ -142,7 +140,7 @@ public StudyTerminationResponseDTO.TerminationDTO terminateStudy(Long studyId, S study.terminateStudy(performance); studyRepository.save(study); - return StudyTerminationResponseDTO.TerminationDTO.toDTO(study); + return StudyResponseDTO.TerminationDTO.toDTO(study); } /** @@ -159,7 +157,7 @@ public StudyTerminationResponseDTO.TerminationDTO terminateStudy(Long studyId, S * @throws MemberHandler 스터디 장을 찾을 수 없을 때 */ @Override - public StudyApplyResponseDTO acceptAndRejectStudyApply(Long memberId, Long studyId, + public StudyMemberResponseDTO.ApplicationStatusDTO acceptAndRejectStudyApply(Long memberId, Long studyId, boolean isAccept) { // 신청을 처리하는 회원이 스터디 소유자인지 확인 @@ -204,7 +202,7 @@ public StudyApplyResponseDTO acceptAndRejectStudyApply(Long memberId, Long study } // 스터디 신청 처리 결과 반환 - return StudyApplyResponseDTO.builder() + return StudyMemberResponseDTO.ApplicationStatusDTO.builder() .status(studyMember.getStatus()) .updatedAt(studyMember.getUpdatedAt()) .build(); @@ -225,7 +223,7 @@ public StudyApplyResponseDTO acceptAndRejectStudyApply(Long memberId, Long study * */ @Override - public StudyApplyResponseDTO acceptAndRejectStudyApplyForTest(Long memberId, Long studyId, + public StudyMemberResponseDTO.ApplicationStatusDTO acceptAndRejectStudyApplyForTest(Long memberId, Long studyId, boolean isAccept) { // 스터디 신청을 처리하는 회원이 스터디 소유자인지 확인 @@ -258,7 +256,7 @@ public StudyApplyResponseDTO acceptAndRejectStudyApplyForTest(Long memberId, Lon } // 스터디 신청 처리 결과 반환 - return StudyApplyResponseDTO.builder() + return StudyMemberResponseDTO.ApplicationStatusDTO.builder() .status(studyMember.getStatus()) .updatedAt(studyMember.getUpdatedAt()) .build(); diff --git a/src/main/java/com/example/spot/study/application/StudyMemberQueryService.java b/src/main/java/com/example/spot/study/application/StudyMemberQueryService.java index c925c5f5..83985e50 100644 --- a/src/main/java/com/example/spot/study/application/StudyMemberQueryService.java +++ b/src/main/java/com/example/spot/study/application/StudyMemberQueryService.java @@ -1,36 +1,22 @@ package com.example.spot.study.application; -import com.example.spot.todo.presentation.dto.response.ToDoListResponseDTO; -import com.example.spot.schedule.presentation.dto.response.ScheduleResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyImageResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyMemberResDTO; -import com.example.spot.schedule.presentation.dto.response.StudyQuizResponseDTO; -import com.example.spot.vote.presentation.dto.response.StudyVoteResponseDTO; import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO; -import com.example.spot.story.web.dto.response.StoryResponseDTO; -import com.example.spot.schedule.presentation.dto.response.StudyScheduleResponseDTO; - - -import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO.StudyApplicantDTO; -import java.time.LocalDate; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; public interface StudyMemberQueryService { // 참여하는 회원 목록 불러오기 - StudyMemberResponseDTO findStudyMembers(Long studyId); + StudyMemberResponseDTO.StudyMemberListDTO findStudyMembers(Long studyId); // 스터디 별 신청 회원 목록 조회하기 - StudyMemberResponseDTO findStudyApplicants(Long studyId); + StudyMemberResponseDTO.StudyMemberListDTO findStudyApplicants(Long studyId); // 스터디 호스트 조회하기 - StudyMemberResDTO.StudyHostDTO getStudyHost(Long studyId); + StudyMemberResponseDTO.HostDTO getStudyHost(Long studyId); // 스터디 신청 정보 가져오기 - StudyMemberResponseDTO.StudyApplyMemberDTO findStudyApplication(Long studyId, Long memberId); + StudyMemberResponseDTO.ApplyingMemberDTO findStudyApplication(Long studyId, Long memberId); // 스터디 신청 여부 확인 - StudyApplicantDTO isApplied(Long studyId); + StudyMemberResponseDTO.AppliedStudyDTO isApplied(Long studyId); } diff --git a/src/main/java/com/example/spot/study/application/StudyMemberQueryServiceImpl.java b/src/main/java/com/example/spot/study/application/StudyMemberQueryServiceImpl.java index 69368081..412f5e7d 100644 --- a/src/main/java/com/example/spot/study/application/StudyMemberQueryServiceImpl.java +++ b/src/main/java/com/example/spot/study/application/StudyMemberQueryServiceImpl.java @@ -4,30 +4,21 @@ import com.example.spot.common.api.exception.handler.MemberHandler; import com.example.spot.common.api.exception.handler.StudyHandler; import com.example.spot.member.domain.Member; -import com.example.spot.story.domain.Story; import com.example.spot.study.domain.association.StudyMember; import com.example.spot.study.domain.enums.StudyApplicationStatus; import com.example.spot.member.domain.MemberRepository; import com.example.spot.study.domain.repository.StudyMemberRepository; import com.example.spot.story.domain.StoryRepository; import com.example.spot.study.domain.StudyRepository; -import com.example.spot.study.presentation.dto.response.StudyImageResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyMemberResDTO; import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO; -import com.example.spot.story.web.dto.response.StoryResponseDTO; import com.example.spot.common.security.utils.SecurityUtils; -import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO.StudyApplicantDTO; import lombok.RequiredArgsConstructor; import com.example.spot.common.api.exception.GeneralException; -import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO.StudyApplyMemberDTO; -import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO.StudyMemberDTO; -import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Comparator; import java.util.List; @@ -50,7 +41,7 @@ public class StudyMemberQueryServiceImpl implements StudyMemberQueryService { * @throws GeneralException 스터디 멤버가 아닌 경우 */ @Override - public StudyMemberResponseDTO findStudyMembers(Long studyId) { + public StudyMemberResponseDTO.StudyMemberListDTO findStudyMembers(Long studyId) { // 스터디 멤버 조회 List memberStudies = studyMemberRepository.findAllByStudyIdAndStatus(studyId, StudyApplicationStatus.APPROVED); @@ -60,13 +51,13 @@ public StudyMemberResponseDTO findStudyMembers(Long studyId) { throw new GeneralException(ErrorStatus._STUDY_MEMBER_NOT_FOUND); // DTO로 변환하여 반환 - List memberDTOS = memberStudies.stream().map(memberStudy -> StudyMemberDTO.builder() + List memberDTOS = memberStudies.stream().map(memberStudy -> StudyMemberResponseDTO.StudyMemberDTO.builder() .memberId(memberStudy.getMember().getId()) .nickname(memberStudy.getMember().getName()) .profileImage(memberStudy.getMember().getProfileImage()) .build()).toList(); // DTO로 변환하여 반환 - return new StudyMemberResponseDTO(memberDTOS); + return new StudyMemberResponseDTO.StudyMemberListDTO(memberDTOS); } @@ -79,7 +70,7 @@ public StudyMemberResponseDTO findStudyMembers(Long studyId) { * @throws GeneralException 조회 하는 회원이 스터디 장이 아닌 경우 */ @Override - public StudyMemberResponseDTO findStudyApplicants(Long studyId) { + public StudyMemberResponseDTO.StudyMemberListDTO findStudyApplicants(Long studyId) { // 로그인한 회원이 해당 스터디 장인지 확인 if (!isOwner(SecurityUtils.getCurrentUserId(), studyId)) @@ -93,18 +84,18 @@ public StudyMemberResponseDTO findStudyApplicants(Long studyId) { throw new GeneralException(ErrorStatus._STUDY_APPLICANT_NOT_FOUND); // DTO로 변환하여 반환 - List memberDTOS = memberStudies.stream().map(memberStudy -> StudyMemberDTO.builder() + List memberDTOS = memberStudies.stream().map(memberStudy -> StudyMemberResponseDTO.StudyMemberDTO.builder() .memberId(memberStudy.getMember().getId()) .nickname(memberStudy.getMember().getName()) .profileImage(memberStudy.getMember().getProfileImage()) .build()).toList(); // DTO로 변환하여 반환 - return new StudyMemberResponseDTO(memberDTOS); + return new StudyMemberResponseDTO.StudyMemberListDTO(memberDTOS); } @Override - public StudyMemberResDTO.StudyHostDTO getStudyHost(Long studyId) { + public StudyMemberResponseDTO.HostDTO getStudyHost(Long studyId) { // Authorization Long memberId = SecurityUtils.getCurrentUserId(); @@ -117,9 +108,9 @@ public StudyMemberResDTO.StudyHostDTO getStudyHost(Long studyId) { // 로그인한 회원이 호스트인지 확인 if (studyHost.getMember().getId().equals(memberId)) { - return StudyMemberResDTO.StudyHostDTO.toDTO(true, member); + return StudyMemberResponseDTO.HostDTO.toDTO(true, member); } else { - return StudyMemberResDTO.StudyHostDTO.toDTO(false, studyHost.getMember()); + return StudyMemberResponseDTO.HostDTO.toDTO(false, studyHost.getMember()); } } @@ -134,7 +125,7 @@ public StudyMemberResDTO.StudyHostDTO getStudyHost(Long studyId) { * @throws GeneralException 스터디 장은 스터디에 신청할 수 없음 */ @Override - public StudyApplyMemberDTO findStudyApplication(Long studyId, Long memberId) { + public StudyMemberResponseDTO.ApplyingMemberDTO findStudyApplication(Long studyId, Long memberId) { // 로그인한 회원이 해당 스터디 장인지 확인 if (!isOwner(SecurityUtils.getCurrentUserId(), studyId)) @@ -149,7 +140,7 @@ public StudyApplyMemberDTO findStudyApplication(Long studyId, Long memberId) { throw new GeneralException(ErrorStatus._STUDY_OWNER_CANNOT_APPLY); // DTO로 변환하여 반환 - return StudyApplyMemberDTO.builder() + return StudyMemberResponseDTO.ApplyingMemberDTO.builder() .memberId(studyMember.getMember().getId()) .studyId(studyMember.getStudy().getId()) .introduction(studyMember.getIntroduction()) @@ -166,7 +157,7 @@ public StudyApplyMemberDTO findStudyApplication(Long studyId, Long memberId) { * @throws GeneralException 이미 스터디 멤버인 경우 */ @Override - public StudyApplicantDTO isApplied(Long studyId) { + public StudyMemberResponseDTO.AppliedStudyDTO isApplied(Long studyId) { // 로그인한 회원 ID 조회 Long currentUserId = SecurityUtils.getCurrentUserId(); @@ -175,7 +166,7 @@ public StudyApplicantDTO isApplied(Long studyId) { throw new GeneralException(ErrorStatus._ALREADY_STUDY_MEMBER); // DTO로 변환하여 반환 - return StudyApplicantDTO.builder() + return StudyMemberResponseDTO.AppliedStudyDTO.builder() .isApplied(studyMemberRepository.existsByMemberIdAndStudyIdAndStatus(currentUserId, studyId, StudyApplicationStatus.APPLIED)) .studyId(studyId) .build(); diff --git a/src/main/java/com/example/spot/study/application/StudyQueryService.java b/src/main/java/com/example/spot/study/application/StudyQueryService.java index 6c281a23..d48d0ebc 100644 --- a/src/main/java/com/example/spot/study/application/StudyQueryService.java +++ b/src/main/java/com/example/spot/study/application/StudyQueryService.java @@ -2,13 +2,13 @@ import com.example.spot.study.domain.enums.StudySortBy; import com.example.spot.study.domain.enums.ThemeType; -import com.example.spot.study.presentation.dto.request.SearchRequestStudyDTO; -import com.example.spot.study.presentation.dto.request.SearchRequestStudyWithThemeDTO; +import com.example.spot.study.presentation.dto.request.StudySearchRequestDTO; +import com.example.spot.study.presentation.dto.request.StudySearchRequestWithThemeDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.HotKeywordDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.MyPageDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.StudyPreviewDTO; -import com.example.spot.study.presentation.dto.response.StudyInfoResponseDTO; +import com.example.spot.study.presentation.dto.response.StudyResponseDTO; import org.springframework.data.domain.Pageable; public interface StudyQueryService { @@ -17,7 +17,7 @@ public interface StudyQueryService { HotKeywordDTO getHotKeyword(); // 스터디 정보 조회 - StudyInfoResponseDTO.StudyInfoDTO getStudyInfo(Long studyId); + StudyResponseDTO.StudyInfoDTO getStudyInfo(Long studyId); // 마이페이지 용 스터디 개수 조회 MyPageDTO getMyPageStudyCount(Long memberId); @@ -26,7 +26,7 @@ public interface StudyQueryService { StudyPreviewDTO findStudies(Pageable pageable, StudySortBy sortBy); // 조건별 스터디 목록 조회 - StudyPreviewDTO findStudiesByConditions(Pageable pageable, SearchRequestStudyDTO request, StudySortBy sortBy); + StudyPreviewDTO findStudiesByConditions(Pageable pageable, StudySearchRequestDTO request, StudySortBy sortBy); // 내 추천 스터디 조회 StudyPreviewDTO findRecommendStudies(Long memberId); @@ -36,22 +36,22 @@ public interface StudyQueryService { // 내 관심사 스터디 페이징 조회 StudyPreviewDTO findInterestStudiesByConditionsAll(Pageable pageable, Long memberId, - SearchRequestStudyDTO request, StudySortBy sortBy); + StudySearchRequestDTO request, StudySortBy sortBy); // 내 특정 관심사 스터디 페이징 조회 - StudyPreviewDTO findInterestStudiesByConditionsSpecific(Pageable pageable, Long memberId, SearchRequestStudyDTO request, ThemeType theme, StudySortBy sortBy); + StudyPreviewDTO findInterestStudiesByConditionsSpecific(Pageable pageable, Long memberId, StudySearchRequestDTO request, ThemeType theme, StudySortBy sortBy); // 내 관심 지역 스터디 페이징 조회 StudyPreviewDTO findInterestRegionStudiesByConditionsAll( - Pageable pageable, Long memberId, SearchRequestStudyWithThemeDTO request, StudySortBy sortBy); + Pageable pageable, Long memberId, StudySearchRequestWithThemeDTO request, StudySortBy sortBy); // 내 특정 관심 지역 스터디 페이징 조회 StudyPreviewDTO findInterestRegionStudiesByConditionsSpecific( - Pageable pageable, Long memberId, SearchRequestStudyWithThemeDTO request, String regionCode, StudySortBy sortBy); + Pageable pageable, Long memberId, StudySearchRequestWithThemeDTO request, String regionCode, StudySortBy sortBy); // 모집 중 스터디 조회 StudyPreviewDTO findRecruitingStudiesByConditions( - Pageable pageable, SearchRequestStudyWithThemeDTO request, StudySortBy sortBy); + Pageable pageable, StudySearchRequestWithThemeDTO request, StudySortBy sortBy); // 찜한 스터디 조회 StudyPreviewDTO findLikedStudies(Long memberId, Pageable pageable); diff --git a/src/main/java/com/example/spot/study/application/StudyQueryServiceImpl.java b/src/main/java/com/example/spot/study/application/StudyQueryServiceImpl.java index 072dbd73..1c9b4415 100644 --- a/src/main/java/com/example/spot/study/application/StudyQueryServiceImpl.java +++ b/src/main/java/com/example/spot/study/application/StudyQueryServiceImpl.java @@ -31,14 +31,14 @@ import com.example.spot.study.domain.repository.StudyThemeRepository; import com.example.spot.study.domain.repository.ThemeRepository; import com.example.spot.common.security.utils.SecurityUtils; -import com.example.spot.study.presentation.dto.request.SearchRequestStudyDTO; -import com.example.spot.study.presentation.dto.request.SearchRequestStudyWithThemeDTO; +import com.example.spot.study.presentation.dto.request.StudySearchRequestDTO; +import com.example.spot.study.presentation.dto.request.StudySearchRequestWithThemeDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.HotKeywordDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.MyPageDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.SearchStudyDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.StudyPreviewDTO; -import com.example.spot.study.presentation.dto.response.StudyInfoResponseDTO; + import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -48,6 +48,8 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; + +import com.example.spot.study.presentation.dto.response.StudyResponseDTO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -135,7 +137,7 @@ public HotKeywordDTO getHotKeyword() { * @throws StudyHandler 스터디가 존재하지 않을 경우 Exception을 발생시킵니다. */ @Transactional - public StudyInfoResponseDTO.StudyInfoDTO getStudyInfo(Long studyId) { + public StudyResponseDTO.StudyInfoDTO getStudyInfo(Long studyId) { Study study = studyRepository.findById(studyId) .orElseThrow(() -> new StudyHandler(ErrorStatus._STUDY_NOT_FOUND)); @@ -150,7 +152,7 @@ public StudyInfoResponseDTO.StudyInfoDTO getStudyInfo(Long studyId) { Member owner = studyMemberList.get(0).getMember(); study.increaseHit(); - return StudyInfoResponseDTO.StudyInfoDTO.toDTO(study, owner); + return StudyResponseDTO.StudyInfoDTO.toDTO(study, owner); } /** @@ -214,7 +216,7 @@ public StudyPreviewDTO findStudies(Pageable pageable, StudySortBy sortBy) { * @throws StudyHandler 조회된 스터디가 없을 경우 Exception을 발생시킵니다. */ @Override - public StudyPreviewDTO findStudiesByConditions(Pageable pageable, SearchRequestStudyDTO request, + public StudyPreviewDTO findStudiesByConditions(Pageable pageable, StudySearchRequestDTO request, StudySortBy sortBy) { // 검색 조건 맵 생성 Map conditions = getSearchConditions(request); @@ -349,7 +351,7 @@ public StudyPreviewDTO findInterestedStudies(Long memberId) { */ @Override public StudyPreviewDTO findInterestStudiesByConditionsAll(Pageable pageable, Long memberId, - SearchRequestStudyDTO request, StudySortBy sortBy) { + StudySearchRequestDTO request, StudySortBy sortBy) { // 회원이 참가하고 있는 스터디 ID 가져오기 List memberOngoingStudyIds = getOngoingStudyIds(memberId); @@ -409,7 +411,7 @@ public StudyPreviewDTO findInterestStudiesByConditionsAll(Pageable pageable, Lon */ @Override public StudyPreviewDTO findInterestStudiesByConditionsSpecific(Pageable pageable, - Long memberId, SearchRequestStudyDTO request, ThemeType themeType, StudySortBy sortBy) { + Long memberId, StudySearchRequestDTO request, ThemeType themeType, StudySortBy sortBy) { // 회원이 참가하고 있는 스터디 ID 가져오기 List memberOngoingStudyIds = getOngoingStudyIds(memberId); @@ -477,7 +479,7 @@ public StudyPreviewDTO findInterestStudiesByConditionsSpecific(Pageable pageable */ @Override public StudyPreviewDTO findInterestRegionStudiesByConditionsAll( - Pageable pageable, Long memberId, SearchRequestStudyWithThemeDTO request, StudySortBy sortBy) { + Pageable pageable, Long memberId, StudySearchRequestWithThemeDTO request, StudySortBy sortBy) { // 회원이 참가하고 있는 스터디 ID 가져오기 List memberOngoingStudyIds = getOngoingStudyIds(memberId); @@ -540,7 +542,7 @@ public StudyPreviewDTO findInterestRegionStudiesByConditionsAll( */ @Override public StudyPreviewDTO findInterestRegionStudiesByConditionsSpecific( - Pageable pageable, Long memberId, SearchRequestStudyWithThemeDTO request, String regionCode, StudySortBy sortBy) { + Pageable pageable, Long memberId, StudySearchRequestWithThemeDTO request, String regionCode, StudySortBy sortBy) { // 회원이 참가하고 있는 스터디 ID 가져오기 List memberOngoingStudyIds = getOngoingStudyIds(memberId); @@ -603,7 +605,7 @@ public StudyPreviewDTO findInterestRegionStudiesByConditionsSpecific( */ @Override public StudyPreviewDTO findRecruitingStudiesByConditions( - Pageable pageable, SearchRequestStudyWithThemeDTO request, StudySortBy sortBy) { + Pageable pageable, StudySearchRequestWithThemeDTO request, StudySortBy sortBy) { // 검색 조건 맵 생성 Map conditions = getSearchConditionsWithTheme(request); @@ -869,7 +871,7 @@ private List getOngoingStudyIds(Long memberId) { * @return 검색 조건 맵을 반환합니다. * */ - private Map getSearchConditions(SearchRequestStudyDTO request) { + private Map getSearchConditions(StudySearchRequestDTO request) { // 검색 조건 맵 생성 return getBasicStudyFilteringConditions(request.getGender(), request.getMinAge(), request.getMaxAge(), request.getIsOnline(), request.getHasFee(), request.getMaxFee(), request.getMinFee(), request.getRegionCodes()); @@ -883,7 +885,7 @@ private Map getSearchConditions(SearchRequestStudyDTO request) { * @return 검색 조건 맵을 반환합니다. * */ - private Map getSearchConditionsWithTheme(SearchRequestStudyWithThemeDTO request) { + private Map getSearchConditionsWithTheme(StudySearchRequestWithThemeDTO request) { Map search = getBasicStudyFilteringConditions(request.getGender(), request.getMinAge(), request.getMaxAge(), request.getIsOnline(), request.getHasFee(), request.getMaxFee(), request.getMinFee(), request.getRegionCodes()); diff --git a/src/main/java/com/example/spot/study/presentation/controller/SearchController.java b/src/main/java/com/example/spot/study/presentation/controller/SearchController.java index 32474ba4..60dc9a81 100644 --- a/src/main/java/com/example/spot/study/presentation/controller/SearchController.java +++ b/src/main/java/com/example/spot/study/presentation/controller/SearchController.java @@ -7,8 +7,8 @@ import com.example.spot.common.security.utils.SecurityUtils; import com.example.spot.study.application.StudyCommandService; import com.example.spot.study.application.StudyQueryService; -import com.example.spot.study.presentation.dto.request.SearchRequestStudyDTO; -import com.example.spot.study.presentation.dto.request.SearchRequestStudyWithThemeDTO; +import com.example.spot.study.presentation.dto.request.StudySearchRequestDTO; +import com.example.spot.study.presentation.dto.request.StudySearchRequestWithThemeDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.HotKeywordDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.MyPageDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.StudyPreviewDTO; @@ -82,7 +82,7 @@ public ApiResponse myPage() { 조건에 맞게 검색된 스터디 목록이 반환 됩니다.""" ) public ApiResponse allStudiesByConditions( - @ModelAttribute @Valid SearchRequestStudyDTO searchRequestStudyDTO, + @ModelAttribute @Valid StudySearchRequestDTO searchRequestStudyDTO, @RequestParam @Min(0) Integer page, @RequestParam @Min(1) Integer size, @RequestParam StudySortBy sortBy) { @@ -118,7 +118,7 @@ public ApiResponse allStudiesByConditions( @Operation( summary = "[내 관심사 스터디 조회] 내 '전체' 관심사 스터디 조회", description = """ - ## [내 관심사 스터디 조회] 입력한 조건에 맞는 회원의 전체 관심 분야의 스터디를 조회 합니다. + ## [내 관심사 스터디 조회] 입력한 조건에 맞는 회원의 전체 관심 분야의 스터디를 조회 합니다. 메인 화면에서 사용 하실 경우, 페이지 번호는 0, 페이지 크기는 3으로 설정하여 사용하시면 됩니다. 조건에 맞게 검색된 스터디 목록이 반환 됩니다.""", security = @SecurityRequirement(name = "accessToken") @@ -126,7 +126,7 @@ public ApiResponse allStudiesByConditions( @Parameter(name = "searchRequestStudyDTO", description = """ 조회할 스터디의 검색 조건을 입력 받습니다. - gender: 성별 (MALE, FEMALE, UNKNOWN) - - minAge: 18 이상의 정수 + - minAge: 18 이상의 정수 - maxAge: 60 이하의 정수 - isOnline: 스터디 온라인 진행 여부 (true, false) - hasFee: 스터디 활동비 유무 (true, false) @@ -137,7 +137,7 @@ public ApiResponse allStudiesByConditions( @Parameter(name = "size", description = "조회할 페이지 크기를 입력 받습니다. 페이지 크기는 1 이상의 정수 입니다. ", required = true) @Parameter(name = "sortBy", description = "정렬 기준을 입력 받습니다.", required = true) public ApiResponse interestStudiesByConditionsAll( - @ModelAttribute @Valid SearchRequestStudyDTO searchRequestStudyDTO, + @ModelAttribute @Valid StudySearchRequestDTO searchRequestStudyDTO, @RequestParam @Min(0) Integer page, @RequestParam @Min(1) Integer size, @RequestParam StudySortBy sortBy @@ -171,7 +171,7 @@ public ApiResponse interestStudiesByConditionsAll( @Parameter(name = "sortBy", description = "정렬 기준을 입력 받습니다.", required = true) public ApiResponse interestStudiesByConditionsSpecific( @RequestParam ThemeType theme, - @ModelAttribute @Valid SearchRequestStudyDTO searchRequestStudyDTO, + @ModelAttribute @Valid StudySearchRequestDTO searchRequestStudyDTO, @RequestParam @Min(0) Integer page, @RequestParam @Min(1) Integer size, @RequestParam StudySortBy sortBy @@ -209,7 +209,7 @@ public ApiResponse interestStudiesByConditionsSpecific( @Parameter(name = "size", description = "조회할 페이지 크기를 입력 받습니다. 페이지 크기는 1 이상의 정수 입니다. ", required = true) @Parameter(name = "sortBy", description = "정렬 기준을 입력 받습니다.", required = true) public ApiResponse interestRegionStudiesByConditionsAll( - @ModelAttribute @Valid SearchRequestStudyWithThemeDTO searchRequestStudyDTO, + @ModelAttribute @Valid StudySearchRequestWithThemeDTO searchRequestStudyDTO, @RequestParam @Min(0) Integer page, @RequestParam @Min(1) Integer size, @RequestParam StudySortBy sortBy @@ -244,7 +244,7 @@ public ApiResponse interestRegionStudiesByConditionsAll( @Parameter(name = "sortBy", description = "정렬 기준을 입력 받습니다.", required = true) public ApiResponse interestRegionStudiesByConditionsSpecific( @RequestParam String regionCode, - @ModelAttribute @Valid SearchRequestStudyWithThemeDTO searchRequestStudyDTO, + @ModelAttribute @Valid StudySearchRequestWithThemeDTO searchRequestStudyDTO, @RequestParam @Min(0) Integer page, @RequestParam @Min(1) Integer size, @RequestParam StudySortBy sortBy @@ -279,7 +279,7 @@ public ApiResponse interestRegionStudiesByConditionsSpecific( @Parameter(name = "size", description = "조회할 페이지 크기를 입력 받습니다. 페이지 크기는 1 이상의 정수 입니다. ", required = true) @Parameter(name = "sortBy", description = "정렬 기준을 입력 받습니다.", required = true) public ApiResponse recruitingStudiesByConditions( - @ModelAttribute @Valid SearchRequestStudyWithThemeDTO searchRequestStudyDTO, + @ModelAttribute @Valid StudySearchRequestWithThemeDTO searchRequestStudyDTO, @RequestParam @Min(0) Integer page, @RequestParam @Min(1) Integer size, @RequestParam StudySortBy sortBy) { diff --git a/src/main/java/com/example/spot/study/presentation/controller/StudyController.java b/src/main/java/com/example/spot/study/presentation/controller/StudyController.java index b9665f85..642c429b 100644 --- a/src/main/java/com/example/spot/study/presentation/controller/StudyController.java +++ b/src/main/java/com/example/spot/study/presentation/controller/StudyController.java @@ -6,12 +6,8 @@ import com.example.spot.study.application.StudyCommandService; import com.example.spot.study.application.StudyQueryService; import com.example.spot.study.domain.validation.annotation.ExistStudy; -import com.example.spot.study.presentation.dto.request.StudyJoinRequestDTO; -import com.example.spot.study.presentation.dto.request.StudyRegisterRequestDTO; -import com.example.spot.study.presentation.dto.response.StudyInfoResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyJoinResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyLikeResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyRegisterResponseDTO; +import com.example.spot.study.presentation.dto.request.StudyMemberRequestDTO; +import com.example.spot.study.presentation.dto.response.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -38,9 +34,9 @@ public class StudyController { """) @Parameter(name = "studyId", description = "정보를 가져올 스터디의 id를 입력 받습니다.", required = true) @GetMapping("/studies/{studyId}") - public ApiResponse getStudyInfo( + public ApiResponse getStudyInfo( @PathVariable @ExistStudy Long studyId) { - StudyInfoResponseDTO.StudyInfoDTO studyInfoDTO = studyQueryService.getStudyInfo(studyId); + StudyResponseDTO.StudyInfoDTO studyInfoDTO = studyQueryService.getStudyInfo(studyId); return ApiResponse.onSuccess(SuccessStatus._STUDY_FOUND, studyInfoDTO); } @@ -50,10 +46,10 @@ public ApiResponse getStudyInfo( """) @Parameter(name = "studyId", description = "참여할 스터디의 id를 입력 받습니다.", required = true) @PostMapping("/studies/{studyId}") - public ApiResponse applyToStudy( + public ApiResponse applyToStudy( @PathVariable @ExistStudy Long studyId, - @RequestBody @Valid StudyJoinRequestDTO.StudyJoinDTO studyJoinRequestDTO) { - StudyJoinResponseDTO.JoinDTO studyJoinResponseDTO = studyCommandService.applyToStudy(studyId, studyJoinRequestDTO); + @RequestBody @Valid StudyMemberRequestDTO.JoinDTO joinDTO) { + StudyMemberResponseDTO.JoinDTO studyJoinResponseDTO = studyCommandService.applyToStudy(studyId, joinDTO); return ApiResponse.onSuccess(SuccessStatus._STUDY_APPLY_COMPLETED, studyJoinResponseDTO); } @@ -66,9 +62,9 @@ public ApiResponse applyToStudy( regions에는 지역 코드를 입력해야 합니다. """) @PostMapping("/studies") - public ApiResponse registerStudy( - @RequestBody @Valid StudyRegisterRequestDTO.RegisterDTO studyRegisterRequestDTO) { - StudyRegisterResponseDTO.RegisterDTO studyRegisterResponseDTO = studyCommandService.registerStudy(studyRegisterRequestDTO); + public ApiResponse registerStudy( + @RequestBody @Valid StudyMemberRequestDTO.RegisterDTO studyRegisterRequestDTO) { + StudyResponseDTO.RegisterDTO studyRegisterResponseDTO = studyCommandService.registerStudy(studyRegisterRequestDTO); return ApiResponse.onSuccess(SuccessStatus._STUDY_CREATED, studyRegisterResponseDTO); } @@ -77,8 +73,8 @@ public ApiResponse registerStudy( 로그인한 회원이 운영하는 특정 스터디에 대해 study 정보를 수정합니다. """) @PatchMapping("/studies/{studyId}") - public ApiResponse updateStudy(@PathVariable @ExistStudy Long studyId, - @RequestBody @Valid StudyRegisterRequestDTO.RegisterDTO studyRegisterRequestDTO) { + public ApiResponse updateStudy(@PathVariable @ExistStudy Long studyId, + @RequestBody @Valid StudyMemberRequestDTO.RegisterDTO studyRegisterRequestDTO) { return ApiResponse.onSuccess(SuccessStatus._OK, studyCommandService.updateStudyInfo(studyId, studyRegisterRequestDTO)); } @@ -93,7 +89,7 @@ public ApiResponse updateStudy(@PathVaria 찜한 스터디 제목과 찜 생성 시간, 찜 상태가 반환 됩니다. """) @Parameter(name = "studyId", description = "찜할 스터디의 ID를 입력 받습니다.", required = true) - public ApiResponse likeStudy( + public ApiResponse likeStudy( @PathVariable("studyId") @ExistStudy Long studyId) { return ApiResponse.onSuccess(SuccessStatus._STUDY_LIKED, studyCommandService.likeStudy(SecurityUtils.getCurrentUserId(), studyId)); } diff --git a/src/main/java/com/example/spot/study/presentation/controller/MemberStudyController.java b/src/main/java/com/example/spot/study/presentation/controller/StudyMemberController.java similarity index 77% rename from src/main/java/com/example/spot/study/presentation/controller/MemberStudyController.java rename to src/main/java/com/example/spot/study/presentation/controller/StudyMemberController.java index 22efb976..cd28be8d 100644 --- a/src/main/java/com/example/spot/study/presentation/controller/MemberStudyController.java +++ b/src/main/java/com/example/spot/study/presentation/controller/StudyMemberController.java @@ -6,32 +6,16 @@ import com.example.spot.study.application.StudyMemberQueryService; import com.example.spot.member.domain.validation.annotation.ExistMember; import com.example.spot.study.domain.validation.annotation.ExistStudy; -import com.example.spot.story.domain.validation.annotation.ExistStory; -import com.example.spot.vote.domain.validation.annotation.ExistVote; import com.example.spot.common.presentation.validator.TextLength; -import com.example.spot.study.presentation.dto.request.StudyHostWithdrawRequestDTO; -import com.example.spot.study.presentation.dto.request.StudyMemberReportDTO; -import com.example.spot.vote.presentation.dto.request.StudyVoteRequestDTO; -import com.example.spot.study.presentation.dto.response.StudyImageResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyMemberResDTO; -import com.example.spot.story.web.dto.response.StoryResDTO; -import com.example.spot.study.presentation.dto.response.StudyTerminationResponseDTO; -import com.example.spot.vote.presentation.dto.response.StudyVoteResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyWithdrawalResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyApplyResponseDTO; -import com.example.spot.story.web.dto.response.StoryResponseDTO; -import com.example.spot.member.presentation.dto.MemberResponseDTO; +import com.example.spot.study.presentation.dto.request.StudyMemberRequestDTO; import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO.StudyApplicantDTO; +import com.example.spot.study.presentation.dto.response.StudyResponseDTO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import jakarta.validation.constraints.Min; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.PageRequest; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -39,12 +23,12 @@ @RequiredArgsConstructor @RequestMapping("/spot") @Validated -public class MemberStudyController { +public class StudyMemberController { private final StudyMemberQueryService studyMemberQueryService; private final StudyMemberCommandService studyMemberCommandService; - /* ----------------------------- 진행중인 스터디 관련 API ------------------------------------- */ +/* ----------------------------- 진행중인 스터디 관련 API ------------------------------------- */ @Tag(name = "진행중인 스터디") @@ -53,8 +37,8 @@ public class MemberStudyController { 로그인한 회원이 참여하는 특정 스터디에 대해 member_study 튜플을 삭제합니다. """) @DeleteMapping("/studies/{studyId}/withdrawal") - public ApiResponse withdrawFromStudy(@PathVariable Long studyId) { - StudyWithdrawalResponseDTO.WithdrawalDTO withdrawalDTO = studyMemberCommandService.withdrawFromStudy(studyId); + public ApiResponse withdrawFromStudy(@PathVariable Long studyId) { + StudyMemberResponseDTO.WithdrawalDTO withdrawalDTO = studyMemberCommandService.withdrawFromStudy(studyId); return ApiResponse.onSuccess(SuccessStatus._STUDY_MEMBER_DELETED, withdrawalDTO); } @@ -62,15 +46,15 @@ public ApiResponse withdrawFromStudy(@ @Operation(summary = "[진행중인 스터디] 스터디 호스트 탈퇴", description = """ ## [진행중인 스터디] 특정 스터디의 호스트가 해당 스터디에서 탈퇴합니다. - 탈퇴 시, 호스트 권한이 회수되며 스터디에서 제외됩니다. + 탈퇴 시, 호스트 권한이 회수되며 스터디에서 제외됩니다. 요청 시, 새로운 호스트의 아이디와 임명 사유를 입력해야 합니다. """) @DeleteMapping("/studies/{studyId}/hosts/withdrawal") - public ApiResponse withdrawHostFromStudy( + public ApiResponse withdrawHostFromStudy( @PathVariable Long studyId, - @RequestBody StudyHostWithdrawRequestDTO requestDTO) { - StudyWithdrawalResponseDTO.WithdrawalDTO withdrawalDTO = - studyMemberCommandService.withdrawHostFromStudy(studyId, requestDTO); + @RequestBody StudyMemberRequestDTO.HostWithdrawDTO hostWithdrawDTO) { + StudyMemberResponseDTO.WithdrawalDTO withdrawalDTO = + studyMemberCommandService.withdrawHostFromStudy(studyId, hostWithdrawDTO); return ApiResponse.onSuccess(SuccessStatus._STUDY_MEMBER_DELETED, withdrawalDTO); } @@ -82,16 +66,15 @@ public ApiResponse withdrawHostFromStu * 스터디 성과를 입력받아 DB에 저장합니다. """) @PatchMapping("/studies/{studyId}/termination") - public ApiResponse terminateStudy( + public ApiResponse terminateStudy( @PathVariable @ExistStudy Long studyId, @RequestParam @TextLength(min = 1, max = 30) String performance ) { - StudyTerminationResponseDTO.TerminationDTO terminationDTO = studyMemberCommandService.terminateStudy(studyId, performance); + StudyResponseDTO.TerminationDTO terminationDTO = studyMemberCommandService.terminateStudy(studyId, performance); return ApiResponse.onSuccess(SuccessStatus._STUDY_TERMINATED, terminationDTO); } - - /* ----------------------------- 모집중인 스터디 관련 API ------------------------------------- */ +/* ----------------------------- 모집중인 스터디 관련 API ------------------------------------- */ @Tag(name = "모집중인 스터디") @Operation(summary = "[모집중인 스터디] 스터디 별 신청 여부 조회하기", description = """ @@ -102,7 +85,7 @@ public ApiResponse terminateStudy( """) @GetMapping("/studies/{studyId}/is-applied") @Parameter(name = "studyId", description = "모집중인 스터디의 ID를 입력 받습니다.", required = true) - public ApiResponse getIsApplied(@PathVariable @ExistStudy Long studyId) { + public ApiResponse getIsApplied(@PathVariable @ExistStudy Long studyId) { return ApiResponse.onSuccess(SuccessStatus._STUDY_APPLICANT_FOUND, studyMemberQueryService.isApplied(studyId)); } @@ -114,7 +97,7 @@ public ApiResponse getIsApplied(@PathVariable @ExistStudy Lon """) @GetMapping("/studies/{studyId}/applicants") @Parameter(name = "studyId", description = "모집중인 스터디의 ID를 입력 받습니다.", required = true) - public ApiResponse getAllApplicants(@PathVariable @ExistStudy Long studyId) { + public ApiResponse getAllApplicants(@PathVariable @ExistStudy Long studyId) { return ApiResponse.onSuccess(SuccessStatus._STUDY_APPLICANT_FOUND, studyMemberQueryService.findStudyApplicants(studyId)); } @@ -127,7 +110,7 @@ public ApiResponse getAllApplicants(@PathVariable @Exist @GetMapping("/studies/{studyId}/applicants/{applicantId}") @Parameter(name = "studyId", description = "모집중인 스터디의 ID를 입력 받습니다.", required = true) @Parameter(name = "applicantId", description = "신청자의 ID를 입력 받습니다.", required = true) - public ApiResponse getApplicantInfo( + public ApiResponse getApplicantInfo( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistMember Long applicantId) { return ApiResponse.onSuccess(SuccessStatus._STUDY_APPLICANT_FOUND, @@ -139,12 +122,12 @@ public ApiResponse getApplicantInfo( ## [모집중인 스터디] 마이페이지 > 모집중 > 스터디 > 신청 회원 > 거절 클릭, 로그인한 회원이 모집중인 스터디에 신청한 회원을 처리합니다. isAccept가 true인 경우 member_study에서 application_status를 AWAITING_SELF_APPROVAL 수정합니다. -> 참가 희망하는 회원이 알림을 통해 스스로 승인 해야 스터디 참여가 완료됩니다. isAccept가 false인 경우 member_study에서 application_status를 REJECTED로 수정합니다. - 스터디 신청 처리 결과를 응답으로 반환합니다. + 스터디 신청 처리 결과를 응답으로 반환합니다. """) @PostMapping("/studies/{studyId}/applicants/{applicantId}") @Parameter(name = "studyId", description = "모집중인 스터디의 ID를 입력 받습니다.", required = true) @Parameter(name = "applicantId", description = "신청자의 ID를 입력 받습니다.", required = true) - public ApiResponse rejectApplicant( + public ApiResponse rejectApplicant( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistMember Long applicantId, @RequestParam boolean isAccept) { @@ -167,7 +150,7 @@ public ApiResponse rejectApplicant( @PostMapping("/studies/{studyId}/applicants/{applicantId}/test") @Parameter(name = "studyId", description = "모집중인 스터디의 ID를 입력 받습니다.", required = true) @Parameter(name = "applicantId", description = "신청자의 ID를 입력 받습니다.", required = true) - public ApiResponse rejectApplicantForTest( + public ApiResponse rejectApplicantForTest( @PathVariable @ExistStudy Long studyId, @PathVariable @ExistMember Long applicantId, @RequestParam boolean isAccept) { @@ -184,10 +167,10 @@ public ApiResponse rejectApplicantForTest( member_study에서 application_status=APPROVED인 회원의 목록(이름, 프로필 사진 포함)이 반환됩니다. """) @GetMapping("/studies/{studyId}/members") - public ApiResponse getStudyMembers( + public ApiResponse getStudyMembers( @PathVariable @ExistStudy Long studyId) { - StudyMemberResponseDTO studyMemberResponseDTO = studyMemberQueryService.findStudyMembers(studyId); - return ApiResponse.onSuccess(SuccessStatus._STUDY_MEMBER_FOUND, studyMemberResponseDTO); + StudyMemberResponseDTO.StudyMemberListDTO studyMemberListDTO = studyMemberQueryService.findStudyMembers(studyId); + return ApiResponse.onSuccess(SuccessStatus._STUDY_MEMBER_FOUND, studyMemberListDTO); } @Tag(name = "스터디 상세 정보") @@ -197,10 +180,10 @@ public ApiResponse getStudyMembers( * host : 호스트의 id와 nickname 반환 """) @GetMapping("/studies/{studyId}/host") - public ApiResponse getStudyHost( + public ApiResponse getStudyHost( @PathVariable @ExistStudy Long studyId) { - StudyMemberResDTO.StudyHostDTO studyHostDTO = studyMemberQueryService.getStudyHost(studyId); - return ApiResponse.onSuccess(SuccessStatus._STUDY_HOST_FOUND, studyHostDTO); + StudyMemberResponseDTO.HostDTO hostDTO = studyMemberQueryService.getStudyHost(studyId); + return ApiResponse.onSuccess(SuccessStatus._STUDY_HOST_FOUND, hostDTO); } } \ No newline at end of file diff --git a/src/main/java/com/example/spot/study/presentation/dto/request/BaseSearchRequestStudyDTO.java b/src/main/java/com/example/spot/study/presentation/dto/request/BaseStudySearchRequestDTO.java similarity index 98% rename from src/main/java/com/example/spot/study/presentation/dto/request/BaseSearchRequestStudyDTO.java rename to src/main/java/com/example/spot/study/presentation/dto/request/BaseStudySearchRequestDTO.java index fd40e967..071d5854 100644 --- a/src/main/java/com/example/spot/study/presentation/dto/request/BaseSearchRequestStudyDTO.java +++ b/src/main/java/com/example/spot/study/presentation/dto/request/BaseStudySearchRequestDTO.java @@ -18,7 +18,7 @@ @SuperBuilder @AllArgsConstructor @NoArgsConstructor -public class BaseSearchRequestStudyDTO { +public class BaseStudySearchRequestDTO { @Schema(description = "성별을 입력 받습니다.", example = "MALE") private Gender gender; diff --git a/src/main/java/com/example/spot/study/presentation/dto/request/StudyHostWithdrawRequestDTO.java b/src/main/java/com/example/spot/study/presentation/dto/request/StudyHostWithdrawRequestDTO.java deleted file mode 100644 index d5d4d3d0..00000000 --- a/src/main/java/com/example/spot/study/presentation/dto/request/StudyHostWithdrawRequestDTO.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.example.spot.study.presentation.dto.request; - - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class StudyHostWithdrawRequestDTO { - - private Long newHostId; - private String reason; - -} diff --git a/src/main/java/com/example/spot/study/presentation/dto/request/StudyJoinRequestDTO.java b/src/main/java/com/example/spot/study/presentation/dto/request/StudyJoinRequestDTO.java deleted file mode 100644 index 06be5d70..00000000 --- a/src/main/java/com/example/spot/study/presentation/dto/request/StudyJoinRequestDTO.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.example.spot.study.presentation.dto.request; - -import com.example.spot.common.presentation.validator.TextLength; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -public class StudyJoinRequestDTO { - - @Getter - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class StudyJoinDTO { - - @TextLength(min = 1, max = 255) - private String introduction; - } -} diff --git a/src/main/java/com/example/spot/study/presentation/dto/request/StudyRegisterRequestDTO.java b/src/main/java/com/example/spot/study/presentation/dto/request/StudyMemberRequestDTO.java similarity index 76% rename from src/main/java/com/example/spot/study/presentation/dto/request/StudyRegisterRequestDTO.java rename to src/main/java/com/example/spot/study/presentation/dto/request/StudyMemberRequestDTO.java index 9327f4bf..13b59451 100644 --- a/src/main/java/com/example/spot/study/presentation/dto/request/StudyRegisterRequestDTO.java +++ b/src/main/java/com/example/spot/study/presentation/dto/request/StudyMemberRequestDTO.java @@ -13,7 +13,7 @@ import java.util.List; @Getter -public class StudyRegisterRequestDTO { +public class StudyMemberRequestDTO { @Getter @Builder @@ -55,4 +55,21 @@ public static class RegisterDTO { private boolean hasFee; } + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class JoinDTO { + @TextLength(min = 1, max = 255) + private String introduction; + } + + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class HostWithdrawDTO { + private Long newHostId; + private String reason; + } + } diff --git a/src/main/java/com/example/spot/study/presentation/dto/request/SearchRequestStudyDTO.java b/src/main/java/com/example/spot/study/presentation/dto/request/StudySearchRequestDTO.java similarity index 76% rename from src/main/java/com/example/spot/study/presentation/dto/request/SearchRequestStudyDTO.java rename to src/main/java/com/example/spot/study/presentation/dto/request/StudySearchRequestDTO.java index d74068ef..323f5f70 100644 --- a/src/main/java/com/example/spot/study/presentation/dto/request/SearchRequestStudyDTO.java +++ b/src/main/java/com/example/spot/study/presentation/dto/request/StudySearchRequestDTO.java @@ -9,7 +9,7 @@ @Setter @SuperBuilder @NoArgsConstructor -public class SearchRequestStudyDTO extends BaseSearchRequestStudyDTO { +public class StudySearchRequestDTO extends BaseStudySearchRequestDTO { } diff --git a/src/main/java/com/example/spot/study/presentation/dto/request/SearchRequestStudyWithThemeDTO.java b/src/main/java/com/example/spot/study/presentation/dto/request/StudySearchRequestWithThemeDTO.java similarity index 86% rename from src/main/java/com/example/spot/study/presentation/dto/request/SearchRequestStudyWithThemeDTO.java rename to src/main/java/com/example/spot/study/presentation/dto/request/StudySearchRequestWithThemeDTO.java index 1bd6e701..736237e1 100644 --- a/src/main/java/com/example/spot/study/presentation/dto/request/SearchRequestStudyWithThemeDTO.java +++ b/src/main/java/com/example/spot/study/presentation/dto/request/StudySearchRequestWithThemeDTO.java @@ -13,7 +13,7 @@ @Setter @SuperBuilder @NoArgsConstructor -public class SearchRequestStudyWithThemeDTO extends BaseSearchRequestStudyDTO { +public class StudySearchRequestWithThemeDTO extends BaseStudySearchRequestDTO { @Schema(description = "스터디 테마 리스트입니다. (예: HOBBY, PROJECT, EXAM)", example = "[\"HOBBY\", \"PROJECT\"]") private List themeTypes; diff --git a/src/main/java/com/example/spot/study/presentation/dto/response/StudyApplyResponseDTO.java b/src/main/java/com/example/spot/study/presentation/dto/response/StudyApplyResponseDTO.java deleted file mode 100644 index 2cfd8ad9..00000000 --- a/src/main/java/com/example/spot/study/presentation/dto/response/StudyApplyResponseDTO.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.spot.study.presentation.dto.response; - -import com.example.spot.study.domain.enums.StudyApplicationStatus; -import java.time.LocalDateTime; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Builder -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class StudyApplyResponseDTO { - private StudyApplicationStatus status; - private LocalDateTime updatedAt; - -} diff --git a/src/main/java/com/example/spot/study/presentation/dto/response/StudyInfoResponseDTO.java b/src/main/java/com/example/spot/study/presentation/dto/response/StudyInfoResponseDTO.java deleted file mode 100644 index 7d21e80e..00000000 --- a/src/main/java/com/example/spot/study/presentation/dto/response/StudyInfoResponseDTO.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.example.spot.study.presentation.dto.response; - -import com.example.spot.member.domain.Member; -import com.example.spot.study.domain.enums.StudyApplicationStatus; -import com.example.spot.member.domain.enums.Gender; -import com.example.spot.study.domain.enums.ThemeType; -import com.example.spot.study.domain.Study; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; - -import java.util.List; - -@Getter -public class StudyInfoResponseDTO { - - @Getter - public static class StudyInfoDTO { - - private final Long studyId; - private final String studyName; - private final StudyOwnerDTO studyOwner; - private final Long hitNum; - private final Integer heartCount; - private final Integer memberCount; - private final Long maxPeople; - private final Gender gender; - private final Integer minAge; - private final Integer maxAge; - private final Integer fee; - private final Boolean isOnline; - private final String profileImage; - private final List themes; - private final List regions; - private final String goal; - private final String introduction; - - @Builder(access = AccessLevel.PRIVATE) - private StudyInfoDTO(Long studyId, String studyName, StudyOwnerDTO studyOwner, - Long hitNum, Integer heartCount, Integer memberCount, Boolean isLiked, Long maxPeople, Gender gender, - Integer minAge, Integer maxAge, Integer fee, Boolean isOnline, String profileImage, - List themes, List regions, String goal, String introduction) { - this.studyId = studyId; - this.studyName = studyName; - this.studyOwner = studyOwner; - this.hitNum = hitNum; - this.heartCount = heartCount; - this.memberCount = memberCount; - this.maxPeople = maxPeople; - this.gender = gender; - this.minAge = minAge; - this.maxAge = maxAge; - this.fee = fee; - this.isOnline = isOnline; - this.profileImage = profileImage; - this.themes = themes; - this.regions = regions; - this.goal = goal; - this.introduction = introduction; - } - - public static StudyInfoDTO toDTO(Study study, Member owner) { - return StudyInfoDTO.builder() - .studyId(study.getId()) - .studyName(study.getTitle()) - .studyOwner(StudyOwnerDTO.toDTO(owner)) - .hitNum(study.getHitNum()) - .heartCount(study.getHeartCount()) - .memberCount( - study.getMemberStudies().stream() - .filter(memberStudy -> memberStudy.getStatus().equals(StudyApplicationStatus.APPROVED)) - .toList() - .size()) - .maxPeople(study.getMaxPeople()) - .gender(study.getGender()) - .minAge(study.getMinAge()) - .maxAge(study.getMaxAge()) - .fee(study.getFee()) - .isOnline(study.getIsOnline()) - .profileImage(study.getProfileImage()) - .themes(study.getStudyThemes().stream() - .map(memberStudy -> { return memberStudy.getTheme().getThemeType();}) - .toList()) - .regions(study.getRegionStudies().stream() - .map(memberStudy -> { return memberStudy.getRegion().getCode();}) - .toList()) - .goal(study.getGoal()) - .introduction(study.getIntroduction()) - .build(); - } - } - - @Getter - private static class StudyOwnerDTO { - - private final Long ownerId; - private final String ownerName; - - @Builder - private StudyOwnerDTO(Long ownerId, String ownerName) { - this.ownerId = ownerId; - this.ownerName = ownerName; - } - - public static StudyOwnerDTO toDTO(Member member) { - return StudyOwnerDTO.builder() - .ownerId(member.getId()) - .ownerName(member.getName()) - .build(); - } - } - -} diff --git a/src/main/java/com/example/spot/study/presentation/dto/response/StudyJoinResponseDTO.java b/src/main/java/com/example/spot/study/presentation/dto/response/StudyJoinResponseDTO.java deleted file mode 100644 index a8a42c39..00000000 --- a/src/main/java/com/example/spot/study/presentation/dto/response/StudyJoinResponseDTO.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.example.spot.study.presentation.dto.response; - -import com.example.spot.member.domain.Member; -import com.example.spot.study.domain.Study; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; - -@Getter -public class StudyJoinResponseDTO { - - @Getter - public static class JoinDTO { - - private final Long memberId; - private final TitleDTO study; - - @Builder(access = AccessLevel.PRIVATE) - private JoinDTO(Long memberId, TitleDTO study) { - this.memberId = memberId; - this.study = study; - } - - public static JoinDTO toDTO(Member member, Study study) { - return JoinDTO.builder() - .memberId(member.getId()) - .study(TitleDTO.toDTO(study)) - .build(); - } - } - - @Getter - public static class TitleDTO { - - private final Long studyId; - private final String title; - - @Builder(access = AccessLevel.PRIVATE) - private TitleDTO(Long studyId, String title) { - this.studyId = studyId; - this.title = title; - } - - public static TitleDTO toDTO(Study study) { - return TitleDTO.builder() - .studyId(study.getId()) - .title(study.getTitle()) - .build(); - } - } -} diff --git a/src/main/java/com/example/spot/study/presentation/dto/response/StudyLikeResponseDTO.java b/src/main/java/com/example/spot/study/presentation/dto/response/StudyLikeResponseDTO.java deleted file mode 100644 index 7d5c0310..00000000 --- a/src/main/java/com/example/spot/study/presentation/dto/response/StudyLikeResponseDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.example.spot.study.presentation.dto.response; - -import com.example.spot.study.domain.enums.StudyLikeStatus; -import com.example.spot.member.domain.association.PreferredStudy; -import java.time.LocalDateTime; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Builder -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class StudyLikeResponseDTO { - private String studyTitle; - private LocalDateTime createdAt; - private StudyLikeStatus status; - - public StudyLikeResponseDTO(PreferredStudy preferredStudy){ - this.studyTitle = preferredStudy.getStudy().getTitle(); - this.createdAt = preferredStudy.getCreatedAt(); - this.status = preferredStudy.getStudyLikeStatus(); - } -} diff --git a/src/main/java/com/example/spot/study/presentation/dto/response/StudyMemberResDTO.java b/src/main/java/com/example/spot/study/presentation/dto/response/StudyMemberResDTO.java deleted file mode 100644 index 99b3ba35..00000000 --- a/src/main/java/com/example/spot/study/presentation/dto/response/StudyMemberResDTO.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.example.spot.study.presentation.dto.response; - -import com.example.spot.member.domain.Member; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -public class StudyMemberResDTO { - - @Getter - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - @Builder(access = AccessLevel.PRIVATE) - public static class StudyHostDTO { - private final Boolean isOwned; - private final HostInfoDTO host; - public static StudyHostDTO toDTO(Boolean isOwned, Member host) { - return StudyHostDTO.builder() - .isOwned(isOwned) - .host(HostInfoDTO.toDTO(host)) - .build(); - } - } - - @Getter - @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - @Builder(access = AccessLevel.PRIVATE) - private static class HostInfoDTO { - private final Long memberId; - private final String nickname; - public static HostInfoDTO toDTO(Member host) { - return HostInfoDTO.builder() - .memberId(host.getId()) - .nickname(host.getNickname()) - .build(); - } - } -} diff --git a/src/main/java/com/example/spot/study/presentation/dto/response/StudyMemberResponseDTO.java b/src/main/java/com/example/spot/study/presentation/dto/response/StudyMemberResponseDTO.java index 19bc2e3f..39f668f4 100644 --- a/src/main/java/com/example/spot/study/presentation/dto/response/StudyMemberResponseDTO.java +++ b/src/main/java/com/example/spot/study/presentation/dto/response/StudyMemberResponseDTO.java @@ -1,53 +1,126 @@ package com.example.spot.study.presentation.dto.response; -import java.util.List; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import com.example.spot.member.domain.Member; +import com.example.spot.study.domain.Study; +import com.example.spot.study.domain.enums.StudyApplicationStatus; +import lombok.*; +import java.time.LocalDateTime; +import java.util.List; -@Builder @Getter -@NoArgsConstructor -@AllArgsConstructor public class StudyMemberResponseDTO { - private long totalElements; - private List members; - public StudyMemberResponseDTO(List members){ - this.totalElements = members.size(); - this.members = members; + @Getter + @Builder(access = AccessLevel.PRIVATE) + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + public static class JoinDTO { + + private final Long memberId; + private final StudyResponseDTO.TitleDTO study; + + public static JoinDTO toDTO(Member member, Study study) { + return JoinDTO.builder() + .memberId(member.getId()) + .study(StudyResponseDTO.TitleDTO.toDTO(study)) + .build(); + } + } + + @Getter + @RequiredArgsConstructor + @Builder(access = AccessLevel.PRIVATE) + public static class WithdrawalDTO { + + private final Long studyId; + private final String studyName; + private final Long memberId; + private final String memberName; + + public static WithdrawalDTO toDTO(Member member, Study study) { + return WithdrawalDTO.builder() + .studyId(study.getId()) + .studyName(study.getTitle()) + .memberId(member.getId()) + .memberName(member.getName()) + .build(); + } } + @Getter + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + @Builder(access = AccessLevel.PRIVATE) + public static class HostDTO { + private final Boolean isOwned; + private final HostNameDTO host; + public static HostDTO toDTO(Boolean isOwned, Member host) { + return HostDTO.builder() + .isOwned(isOwned) + .host(HostNameDTO.toDTO(host)) + .build(); + } + } + + @Getter + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + @Builder(access = AccessLevel.PRIVATE) + public static class HostNameDTO { + private final Long memberId; + private final String nickname; + public static HostNameDTO toDTO(Member host) { + return HostNameDTO.builder() + .memberId(host.getId()) + .nickname(host.getNickname()) + .build(); + } + } + + @Getter @Builder + @RequiredArgsConstructor + public static class StudyMemberListDTO { + private final long totalElements; + private final List members; + + public StudyMemberListDTO(List members){ + this.totalElements = members.size(); + this.members = members; + } + } + @Getter - @NoArgsConstructor - @AllArgsConstructor + @Builder + @RequiredArgsConstructor public static class StudyMemberDTO{ - private Long memberId; - private String nickname; - private String profileImage; + private final Long memberId; + private final String nickname; + private final String profileImage; } - @Builder @Getter - @NoArgsConstructor - @AllArgsConstructor - public static class StudyApplyMemberDTO{ - private Long memberId; - private Long studyId; - private String nickname; - private String profileImage; - private String introduction; + @Builder + @RequiredArgsConstructor + public static class ApplyingMemberDTO { + private final Long memberId; + private final Long studyId; + private final String nickname; + private final String profileImage; + private final String introduction; } + @Getter @Builder + @RequiredArgsConstructor + public static class AppliedStudyDTO { + private final boolean isApplied; + private final Long studyId; + } + @Getter - @NoArgsConstructor - @AllArgsConstructor - public static class StudyApplicantDTO{ - private boolean isApplied; - private Long studyId; + @Builder + @RequiredArgsConstructor + public static class ApplicationStatusDTO { + private final StudyApplicationStatus status; + private final LocalDateTime updatedAt; } } diff --git a/src/main/java/com/example/spot/study/presentation/dto/response/StudyRegisterResponseDTO.java b/src/main/java/com/example/spot/study/presentation/dto/response/StudyRegisterResponseDTO.java deleted file mode 100644 index 0845b32d..00000000 --- a/src/main/java/com/example/spot/study/presentation/dto/response/StudyRegisterResponseDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.example.spot.study.presentation.dto.response; - -import com.example.spot.study.domain.Study; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; - -@Getter -public class StudyRegisterResponseDTO { - - @Getter - public static class RegisterDTO { - - private final Long studyId; - private final String title; - - @Builder(access = AccessLevel.PRIVATE) - private RegisterDTO(Long studyId, String title) { - this.studyId = studyId; - this.title = title; - } - - public static RegisterDTO toDTO(Study study) { - return RegisterDTO.builder() - .studyId(study.getId()) - .title(study.getTitle()) - .build(); - } - } -} diff --git a/src/main/java/com/example/spot/study/presentation/dto/response/StudyResponseDTO.java b/src/main/java/com/example/spot/study/presentation/dto/response/StudyResponseDTO.java new file mode 100644 index 00000000..a6a31051 --- /dev/null +++ b/src/main/java/com/example/spot/study/presentation/dto/response/StudyResponseDTO.java @@ -0,0 +1,137 @@ +package com.example.spot.study.presentation.dto.response; + +import com.example.spot.member.domain.Member; +import com.example.spot.member.domain.association.PreferredStudy; +import com.example.spot.member.domain.enums.Gender; +import com.example.spot.member.domain.enums.Status; +import com.example.spot.study.domain.Study; +import com.example.spot.study.domain.enums.StudyApplicationStatus; +import com.example.spot.study.domain.enums.StudyLikeStatus; +import com.example.spot.study.domain.enums.ThemeType; +import lombok.*; + +import java.time.LocalDateTime; +import java.util.List; + +@Getter +public class StudyResponseDTO { + + @Getter + @Builder(access = AccessLevel.PRIVATE) + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + public static class StudyInfoDTO { + + private final Long studyId; + private final String studyName; + private final StudyMemberResponseDTO.HostNameDTO studyOwner; + private final Long hitNum; + private final Integer heartCount; + private final Integer memberCount; + private final Long maxPeople; + private final Gender gender; + private final Integer minAge; + private final Integer maxAge; + private final Integer fee; + private final Boolean isOnline; + private final String profileImage; + private final List themes; + private final List regions; + private final String goal; + private final String introduction; + + public static StudyInfoDTO toDTO(Study study, Member owner) { + return StudyInfoDTO.builder() + .studyId(study.getId()) + .studyName(study.getTitle()) + .studyOwner(StudyMemberResponseDTO.HostNameDTO.toDTO(owner)) + .hitNum(study.getHitNum()) + .heartCount(study.getHeartCount()) + .memberCount( + study.getMemberStudies().stream() + .filter(memberStudy -> memberStudy.getStatus().equals(StudyApplicationStatus.APPROVED)) + .toList() + .size()) + .maxPeople(study.getMaxPeople()) + .gender(study.getGender()) + .minAge(study.getMinAge()) + .maxAge(study.getMaxAge()) + .fee(study.getFee()) + .isOnline(study.getIsOnline()) + .profileImage(study.getProfileImage()) + .themes(study.getStudyThemes().stream() + .map(memberStudy -> { return memberStudy.getTheme().getThemeType();}) + .toList()) + .regions(study.getRegionStudies().stream() + .map(memberStudy -> { return memberStudy.getRegion().getCode();}) + .toList()) + .goal(study.getGoal()) + .introduction(study.getIntroduction()) + .build(); + } + } + + @Getter + @Builder(access = AccessLevel.PRIVATE) + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + public static class TitleDTO { + + private final Long studyId; + private final String title; + + public static TitleDTO toDTO(Study study) { + return TitleDTO.builder() + .studyId(study.getId()) + .title(study.getTitle()) + .build(); + } + } + + @Getter + @Builder(access = AccessLevel.PRIVATE) + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + public static class RegisterDTO { + + private final Long studyId; + private final String title; + + public static RegisterDTO toDTO(Study study) { + return RegisterDTO.builder() + .studyId(study.getId()) + .title(study.getTitle()) + .build(); + } + } + + @Getter + @Builder(access = AccessLevel.PRIVATE) + + public static class TerminationDTO { + + private final Long studyId; + private final String studyName; + private final Status status; + + public static TerminationDTO toDTO(Study study) { + return TerminationDTO.builder() + .studyId(study.getId()) + .studyName(study.getTitle()) + .status(study.getStatus()) + .build(); + } + } + + @Getter + @Builder + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + public static class LikeDTO { + private final String studyTitle; + private final LocalDateTime createdAt; + private final StudyLikeStatus status; + + public LikeDTO(PreferredStudy preferredStudy){ + this.studyTitle = preferredStudy.getStudy().getTitle(); + this.createdAt = preferredStudy.getCreatedAt(); + this.status = preferredStudy.getStudyLikeStatus(); + } + } +} diff --git a/src/main/java/com/example/spot/study/presentation/dto/response/StudyTerminationResponseDTO.java b/src/main/java/com/example/spot/study/presentation/dto/response/StudyTerminationResponseDTO.java deleted file mode 100644 index be58c7c1..00000000 --- a/src/main/java/com/example/spot/study/presentation/dto/response/StudyTerminationResponseDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.example.spot.study.presentation.dto.response; - -import com.example.spot.member.domain.enums.Status; -import com.example.spot.study.domain.Study; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -public class StudyTerminationResponseDTO { - - @Getter - @RequiredArgsConstructor - @Builder(access = AccessLevel.PRIVATE) - public static class TerminationDTO { - - private final Long studyId; - private final String studyName; - private final Status status; - - public static TerminationDTO toDTO(Study study) { - return TerminationDTO.builder() - .studyId(study.getId()) - .studyName(study.getTitle()) - .status(study.getStatus()) - .build(); - } - } -} diff --git a/src/main/java/com/example/spot/study/presentation/dto/response/StudyWithdrawalResponseDTO.java b/src/main/java/com/example/spot/study/presentation/dto/response/StudyWithdrawalResponseDTO.java deleted file mode 100644 index 7c221b1a..00000000 --- a/src/main/java/com/example/spot/study/presentation/dto/response/StudyWithdrawalResponseDTO.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.example.spot.study.presentation.dto.response; - -import com.example.spot.member.domain.Member; -import com.example.spot.study.domain.Study; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -public class StudyWithdrawalResponseDTO { - - @Getter - @RequiredArgsConstructor - @Builder(access = AccessLevel.PRIVATE) - public static class WithdrawalDTO { - - private final Long studyId; - private final String studyName; - private final Long memberId; - private final String memberName; - - public static WithdrawalDTO toDTO(Member member, Study study) { - return WithdrawalDTO.builder() - .studyId(study.getId()) - .studyName(study.getTitle()) - .memberId(member.getId()) - .memberName(member.getName()) - .build(); - } - } -} diff --git a/src/main/java/com/example/spot/vote/application/VoteCommandService.java b/src/main/java/com/example/spot/vote/application/VoteCommandService.java index 5435b3dc..f8628e8f 100644 --- a/src/main/java/com/example/spot/vote/application/VoteCommandService.java +++ b/src/main/java/com/example/spot/vote/application/VoteCommandService.java @@ -1,18 +1,7 @@ package com.example.spot.vote.application; -import com.example.spot.member.presentation.dto.MemberResponseDTO; -import com.example.spot.story.web.dto.response.StoryResDTO; -import com.example.spot.study.presentation.dto.request.StudyHostWithdrawRequestDTO; -import com.example.spot.study.presentation.dto.request.StudyMemberReportDTO; -import com.example.spot.study.presentation.dto.response.StudyApplyResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyTerminationResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyWithdrawalResponseDTO; -import com.example.spot.todo.presentation.dto.request.ToDoListRequestDTO; -import com.example.spot.todo.presentation.dto.response.ToDoListResponseDTO; -import com.example.spot.todo.presentation.dto.response.ToDoListResponseDTO.ToDoListCreateResponseDTO; import com.example.spot.vote.presentation.dto.request.StudyVoteRequestDTO; import com.example.spot.vote.presentation.dto.response.StudyVoteResponseDTO; -import jakarta.validation.Valid; public interface VoteCommandService { diff --git a/src/main/java/com/example/spot/vote/application/VoteQueryService.java b/src/main/java/com/example/spot/vote/application/VoteQueryService.java index 9c828dee..3800de8e 100644 --- a/src/main/java/com/example/spot/vote/application/VoteQueryService.java +++ b/src/main/java/com/example/spot/vote/application/VoteQueryService.java @@ -1,19 +1,6 @@ package com.example.spot.vote.application; -import com.example.spot.schedule.presentation.dto.response.ScheduleResponseDTO; -import com.example.spot.schedule.presentation.dto.response.StudyQuizResponseDTO; -import com.example.spot.schedule.presentation.dto.response.StudyScheduleResponseDTO; -import com.example.spot.story.web.dto.response.StoryResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyImageResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyMemberResDTO; -import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO.StudyApplicantDTO; -import com.example.spot.todo.presentation.dto.response.ToDoListResponseDTO; import com.example.spot.vote.presentation.dto.response.StudyVoteResponseDTO; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; - -import java.time.LocalDate; public interface VoteQueryService { diff --git a/src/test/java/com/example/spot/service/post/PostCommandServiceTest.java b/src/test/java/com/example/spot/service/post/PostCommandServiceTest.java index 09d81785..b72ba43d 100644 --- a/src/test/java/com/example/spot/service/post/PostCommandServiceTest.java +++ b/src/test/java/com/example/spot/service/post/PostCommandServiceTest.java @@ -26,7 +26,7 @@ import com.example.spot.post.presentation.dto.PostCreateRequest; import com.example.spot.post.presentation.dto.PostCreateResponse; import com.example.spot.post.presentation.dto.PostLikeResponse; -import com.example.spot.report.presentation.dto.PostReportResponse; +import com.example.spot.report.presentation.dto.PostReportDTO; import com.example.spot.post.presentation.dto.PostUpdateRequest; import com.example.spot.post.presentation.dto.ScrapAllDeleteRequest; import com.example.spot.post.presentation.dto.ScrapPostResponse; @@ -1020,7 +1020,7 @@ void reportPost_Success() { when(postReportRepository.save(any(PostReport.class))).thenReturn(postReport); // when - PostReportResponse result = reportCommandService.reportPost(postId, memberId); + PostReportDTO result = reportCommandService.reportPost(postId, memberId); // then assertNotNull(result); diff --git a/src/test/java/com/example/spot/service/schedule/AttendanceCommandServiceTest.java b/src/test/java/com/example/spot/service/schedule/AttendanceCommandServiceTest.java index 0d231df4..1f339646 100644 --- a/src/test/java/com/example/spot/service/schedule/AttendanceCommandServiceTest.java +++ b/src/test/java/com/example/spot/service/schedule/AttendanceCommandServiceTest.java @@ -16,8 +16,8 @@ import com.example.spot.member.domain.MemberRepository; import com.example.spot.study.domain.repository.StudyMemberRepository; import com.example.spot.study.domain.StudyRepository; -import com.example.spot.schedule.presentation.dto.request.StudyQuizRequestDTO; -import com.example.spot.schedule.presentation.dto.response.StudyQuizResponseDTO; +import com.example.spot.schedule.presentation.dto.request.QuizRequestDTO; +import com.example.spot.schedule.presentation.dto.response.QuizResponseDTO; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -120,7 +120,7 @@ void createAttendanceQuiz_Success() { Long studyId = 1L; // 사용자 인증 정보 생성 - StudyQuizRequestDTO.QuizDTO quizRequestDTO = getQuizDTO(owner); + QuizRequestDTO.QuizDTO quizRequestDTO = getQuizDTO(owner); LocalDateTime startOfDay = quizRequestDTO.getCreatedAt().withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime endOfDay = quizRequestDTO.getCreatedAt().withHour(23).withMinute(59).withSecond(59).withNano(999_999_000); @@ -130,7 +130,7 @@ void createAttendanceQuiz_Success() { when(quizRepository.save(any(Quiz.class))).thenReturn(quiz2); // when - StudyQuizResponseDTO.QuizDTO result = scheduleCommandService.createAttendanceQuiz(studyId, schedule.getId(), quizRequestDTO); + QuizResponseDTO.QuestionDTO result = scheduleCommandService.createAttendanceQuiz(studyId, schedule.getId(), quizRequestDTO); // then assertThat(result).isNotNull(); @@ -144,7 +144,7 @@ void createAttendanceQuiz_StudyNotFound_Fail() { // given Long studyId = 2L; - StudyQuizRequestDTO.QuizDTO quizRequestDTO = getQuizDTO(owner); + QuizRequestDTO.QuizDTO quizRequestDTO = getQuizDTO(owner); LocalDateTime startOfDay = quizRequestDTO.getCreatedAt().withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime endOfDay = quizRequestDTO.getCreatedAt().withHour(23).withMinute(59).withSecond(59).withNano(999_999_000); @@ -163,7 +163,7 @@ void createAttendanceQuiz_NotStudyMember_Fail() { // given Long studyId = 1L; - StudyQuizRequestDTO.QuizDTO quizRequestDTO = getQuizDTO(member2); + QuizRequestDTO.QuizDTO quizRequestDTO = getQuizDTO(member2); LocalDateTime startOfDay = quizRequestDTO.getCreatedAt().withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime endOfDay = quizRequestDTO.getCreatedAt().withHour(23).withMinute(59).withSecond(59).withNano(999_999_000); @@ -182,7 +182,7 @@ void createAttendanceQuiz_NotOwner_Fail() { // given Long studyId = 1L; - StudyQuizRequestDTO.QuizDTO quizRequestDTO = getQuizDTO(member1); + QuizRequestDTO.QuizDTO quizRequestDTO = getQuizDTO(member1); LocalDateTime startOfDay = quizRequestDTO.getCreatedAt().withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime endOfDay = quizRequestDTO.getCreatedAt().withHour(23).withMinute(59).withSecond(59).withNano(999_999_000); @@ -204,7 +204,7 @@ void createAttendanceQuiz_ScheduleNotFound_Fail() { initQuiz(); Long studyId = 1L; - StudyQuizRequestDTO.QuizDTO quizRequestDTO = getQuizDTO(member1); + QuizRequestDTO.QuizDTO quizRequestDTO = getQuizDTO(member1); LocalDateTime startOfDay = quizRequestDTO.getCreatedAt().withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime endOfDay = quizRequestDTO.getCreatedAt().withHour(23).withMinute(59).withSecond(59).withNano(999_999_000); @@ -228,7 +228,7 @@ void attendantStudy_Success() { Long studyId = 1L; Long scheduleId = schedule.getId(); - StudyQuizRequestDTO.AttendanceDTO attendanceRequestDTO = getAttendanceDTO(member1, now); + QuizRequestDTO.AttendanceDTO attendanceRequestDTO = getAttendanceDTO(member1, now); LocalDateTime startOfDay = attendanceRequestDTO.getDateTime().withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime endOfDay = attendanceRequestDTO.getDateTime().withHour(23).withMinute(59).withSecond(59).withNano(999_999_000); @@ -242,7 +242,7 @@ void attendantStudy_Success() { .thenReturn(List.of(member1Attendance)); // when - StudyQuizResponseDTO.AttendanceDTO result = scheduleCommandService.attendantStudy(studyId, scheduleId, attendanceRequestDTO); + QuizResponseDTO.AttendanceDTO result = scheduleCommandService.attendantStudy(studyId, scheduleId, attendanceRequestDTO); // then assertThat(result).isNotNull(); @@ -264,7 +264,7 @@ void attendantStudy_NotStudyMember_Fail() { Long studyId = 1L; Long scheduleId = schedule.getId(); - StudyQuizRequestDTO.AttendanceDTO attendanceRequestDTO = getAttendanceDTO(); + QuizRequestDTO.AttendanceDTO attendanceRequestDTO = getAttendanceDTO(); LocalDateTime startOfDay = attendanceRequestDTO.getDateTime().withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime endOfDay = attendanceRequestDTO.getDateTime().withHour(23).withMinute(59).withSecond(59).withNano(999_999_000); @@ -293,7 +293,7 @@ void attendantStudy_QuizNotFound_Fail() { // 사용자 인증 정보 생성 getAuthentication(member1.getId()); - StudyQuizRequestDTO.AttendanceDTO attendanceRequestDTO = getAttendanceDTO(); + QuizRequestDTO.AttendanceDTO attendanceRequestDTO = getAttendanceDTO(); LocalDateTime startOfDay = attendanceRequestDTO.getDateTime().withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime endOfDay = attendanceRequestDTO.getDateTime().withHour(23).withMinute(59).withSecond(59).withNano(999_999_000); @@ -324,7 +324,7 @@ void attendantStudy_QuizTimeOver_Fail() { // 사용자 인증 정보 생성 getAuthentication(member1.getId()); - StudyQuizRequestDTO.AttendanceDTO attendanceRequestDTO = StudyQuizRequestDTO.AttendanceDTO.builder() + QuizRequestDTO.AttendanceDTO attendanceRequestDTO = QuizRequestDTO.AttendanceDTO.builder() .dateTime(now.plusMinutes(5).plusNanos(1)) .answer("SPOT") .build(); @@ -356,7 +356,7 @@ void attendantStudy_QuizTryOver_Fail() { Long scheduleId = schedule.getId(); // 사용자 인증 정보 생성 - StudyQuizRequestDTO.AttendanceDTO attendanceRequestDTO = getAttendanceDTO(member1, now.plusMinutes(5).plusNanos(1)); + QuizRequestDTO.AttendanceDTO attendanceRequestDTO = getAttendanceDTO(member1, now.plusMinutes(5).plusNanos(1)); LocalDateTime startOfDay = attendanceRequestDTO.getDateTime().withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime endOfDay = attendanceRequestDTO.getDateTime().withHour(23).withMinute(59).withSecond(59).withNano(999_999_000); @@ -384,7 +384,7 @@ void attendantStudy_QuizAlreadyCorrect_Fail() { Long studyId = 1L; Long scheduleId = schedule.getId(); - StudyQuizRequestDTO.AttendanceDTO attendanceRequestDTO = getAttendanceDTO(owner, now.plusMinutes(5).plusNanos(1)); + QuizRequestDTO.AttendanceDTO attendanceRequestDTO = getAttendanceDTO(owner, now.plusMinutes(5).plusNanos(1)); LocalDateTime startOfDay = attendanceRequestDTO.getDateTime().withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime endOfDay = attendanceRequestDTO.getDateTime().withHour(23).withMinute(59).withSecond(59).withNano(999_999_000); @@ -426,7 +426,7 @@ void deleteAttendanceQuiz_Success() { .thenReturn(List.of(member1Attendance, member1Attendance2, member1Attendance3, ownerAttendance)); // when - StudyQuizResponseDTO.QuizDTO result = scheduleCommandService.deleteAttendanceQuiz(studyId, scheduleId, date); + QuizResponseDTO.QuestionDTO result = scheduleCommandService.deleteAttendanceQuiz(studyId, scheduleId, date); // then assertThat(result).isNotNull(); @@ -625,12 +625,12 @@ private static void getAuthentication(Long memberId) { SecurityContextHolder.setContext(securityContext); } - private StudyQuizRequestDTO.QuizDTO getQuizDTO(Member member1) { + private QuizRequestDTO.QuizDTO getQuizDTO(Member member1) { // 사용자 인증 정보 생성 getAuthentication(member1.getId()); - StudyQuizRequestDTO.QuizDTO quizRequestDTO = StudyQuizRequestDTO.QuizDTO + QuizRequestDTO.QuizDTO quizRequestDTO = QuizRequestDTO.QuizDTO .builder() .createdAt(now) .question("question") @@ -647,20 +647,20 @@ private StudyQuizRequestDTO.QuizDTO getQuizDTO(Member member1) { return quizRequestDTO; } - private static StudyQuizRequestDTO.AttendanceDTO getAttendanceDTO() { + private static QuizRequestDTO.AttendanceDTO getAttendanceDTO() { // 사용자 인증 정보 생성 getAuthentication(member2.getId()); - return StudyQuizRequestDTO.AttendanceDTO.builder() + return QuizRequestDTO.AttendanceDTO.builder() .dateTime(now) .answer("SPOT") .build(); } - private static StudyQuizRequestDTO.AttendanceDTO getAttendanceDTO(Member owner, LocalDateTime now) { + private static QuizRequestDTO.AttendanceDTO getAttendanceDTO(Member owner, LocalDateTime now) { // 사용자 인증 정보 생성 getAuthentication(owner.getId()); - StudyQuizRequestDTO.AttendanceDTO attendanceRequestDTO = StudyQuizRequestDTO.AttendanceDTO.builder() + QuizRequestDTO.AttendanceDTO attendanceRequestDTO = QuizRequestDTO.AttendanceDTO.builder() .dateTime(now) .answer("SPOT") .build(); diff --git a/src/test/java/com/example/spot/service/schedule/AttendanceQueryServiceTest.java b/src/test/java/com/example/spot/service/schedule/AttendanceQueryServiceTest.java index fbbeba70..9983656c 100644 --- a/src/test/java/com/example/spot/service/schedule/AttendanceQueryServiceTest.java +++ b/src/test/java/com/example/spot/service/schedule/AttendanceQueryServiceTest.java @@ -16,7 +16,7 @@ import com.example.spot.member.domain.MemberRepository; import com.example.spot.study.domain.repository.StudyMemberRepository; import com.example.spot.study.domain.StudyRepository; -import com.example.spot.schedule.presentation.dto.response.StudyQuizResponseDTO; +import com.example.spot.schedule.presentation.dto.response.QuizResponseDTO; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -118,7 +118,7 @@ void getAllAttendances_Success() { getAuthentication(member1.getId()); // when - StudyQuizResponseDTO.AttendanceListDTO result = scheduleQueryService.getAllAttendances(studyId, schedule.getId(), date); + QuizResponseDTO.AttendanceListDTO result = scheduleQueryService.getAllAttendances(studyId, schedule.getId(), date); // then assertThat(result).isNotNull(); @@ -126,7 +126,7 @@ void getAllAttendances_Success() { assertThat(result.getQuizId()).isEqualTo(quiz.getId()); assertThat(result.getStudyMembers()).size().isEqualTo(2); // 전체 인원 2명 assertThat(result.getStudyMembers().stream() - .filter(StudyQuizResponseDTO.StudyMemberDTO::getIsAttending) + .filter(QuizResponseDTO.AttendingMemberDTO::getIsAttending) .toList()).size().isEqualTo(1); // 출석 인원 1명 } @@ -183,7 +183,7 @@ void getAttendanceQuiz_Success() { getAuthentication(member1.getId()); // when - StudyQuizResponseDTO.QuizDTO result = scheduleQueryService.getAttendanceQuiz(studyId, schedule.getId(), date); + QuizResponseDTO.QuestionDTO result = scheduleQueryService.getAttendanceQuiz(studyId, schedule.getId(), date); // then assertThat(result).isNotNull(); diff --git a/src/test/java/com/example/spot/service/schedule/ScheduleQueryServiceTest.java b/src/test/java/com/example/spot/service/schedule/ScheduleQueryServiceTest.java index da73c3fe..e1a2e319 100644 --- a/src/test/java/com/example/spot/service/schedule/ScheduleQueryServiceTest.java +++ b/src/test/java/com/example/spot/service/schedule/ScheduleQueryServiceTest.java @@ -2,12 +2,10 @@ import com.example.spot.common.api.exception.GeneralException; import com.example.spot.common.api.exception.handler.StudyHandler; -import com.example.spot.common.security.utils.SecurityUtils; import com.example.spot.member.domain.Member; import com.example.spot.schedule.application.ScheduleQueryServiceImpl; import com.example.spot.schedule.domain.Schedule; import com.example.spot.schedule.domain.enums.SchedulePeriod; -import com.example.spot.schedule.presentation.dto.response.StudyScheduleResponseDTO; import com.example.spot.study.domain.enums.StudyApplicationStatus; import com.example.spot.member.domain.enums.Gender; import com.example.spot.study.domain.association.StudyMember; @@ -37,7 +35,6 @@ import java.time.LocalTime; import java.util.ArrayList; import java.util.Collections; -import java.util.List; import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; diff --git a/src/test/java/com/example/spot/service/story/StoryCommandServiceTest.java b/src/test/java/com/example/spot/service/story/StoryCommandServiceTest.java index bbb68a6e..74851440 100644 --- a/src/test/java/com/example/spot/service/story/StoryCommandServiceTest.java +++ b/src/test/java/com/example/spot/service/story/StoryCommandServiceTest.java @@ -3,6 +3,7 @@ import com.example.spot.common.api.exception.handler.StudyHandler; import com.example.spot.member.domain.Member; import com.example.spot.notification.domain.Notification; +import com.example.spot.report.domain.StoryReportRepository; import com.example.spot.story.domain.Story; import com.example.spot.story.domain.StoryRepository; import com.example.spot.story.domain.association.LikedStory; @@ -12,7 +13,6 @@ import com.example.spot.story.domain.repository.LikedStoryRepository; import com.example.spot.story.domain.repository.StoryCommentRepository; import com.example.spot.story.domain.repository.StoryImageRepository; -import com.example.spot.report.domain.StoryReportRepository; import com.example.spot.study.domain.association.StudyMember; import com.example.spot.study.domain.enums.StudyApplicationStatus; import com.example.spot.member.domain.enums.Gender; @@ -27,7 +27,7 @@ import com.example.spot.story.web.dto.request.StoryCommentRequestDTO; import com.example.spot.story.web.dto.request.StoryRequestDTO; import com.example.spot.story.web.dto.response.StoryCommentResponseDTO; -import com.example.spot.story.web.dto.response.StoryResDTO; +import com.example.spot.story.web.dto.response.StoryResponseDTO; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -68,14 +68,14 @@ class StoryCommandServiceTest { @Mock private StoryRepository storyRepository; @Mock - private LikedStoryRepository likedStoryRepository; - @Mock private StoryImageRepository storyImageRepository; @Mock + private StoryCommentRepository storyCommentRepository; + @Mock private StoryReportRepository storyReportRepository; @Mock - private StoryCommentRepository storyCommentRepository; + private LikedStoryRepository likedStoryRepository; @Mock private LikedStoryCommentRepository likedStoryCommentRepository; @@ -161,7 +161,7 @@ void createPost_Announcement_Success() { Long memberId = 3L; Long studyId = 1L; - StoryRequestDTO.PostDTO postPreviewDTO = StoryRequestDTO.PostDTO.builder() + StoryRequestDTO.StoryDTO postPreviewDTO = StoryRequestDTO.StoryDTO.builder() .isAnnouncement(true) .storyCategory(StoryCategory.INFO_SHARING) .title("공지") @@ -178,7 +178,7 @@ void createPost_Announcement_Success() { .thenReturn(List.of(member1Study, ownerStudy)); // when - StoryResDTO.PostPreviewDTO result = studyPostCommandService.createPost(studyId, postPreviewDTO); + StoryResponseDTO.StoryPreviewDTO result = studyPostCommandService.createPost(studyId, postPreviewDTO); // then assertNotNull(result); @@ -194,7 +194,7 @@ void createPost_Common_Success() { Long memberId = 1L; Long studyId = 1L; - StoryRequestDTO.PostDTO postPreviewDTO = StoryRequestDTO.PostDTO.builder() + StoryRequestDTO.StoryDTO postPreviewDTO = StoryRequestDTO.StoryDTO.builder() .isAnnouncement(false) .storyCategory(StoryCategory.FREE_TALK) .title("잡담") @@ -211,7 +211,7 @@ void createPost_Common_Success() { .thenReturn(List.of(member1Study, ownerStudy)); // when - StoryResDTO.PostPreviewDTO result = studyPostCommandService.createPost(studyId, postPreviewDTO); + StoryResponseDTO.StoryPreviewDTO result = studyPostCommandService.createPost(studyId, postPreviewDTO); // then assertNotNull(result); @@ -227,7 +227,7 @@ void createPost_NotStudyMember_Fail() { Long memberId = 2L; Long studyId = 1L; - StoryRequestDTO.PostDTO postPreviewDTO = StoryRequestDTO.PostDTO.builder() + StoryRequestDTO.StoryDTO postPreviewDTO = StoryRequestDTO.StoryDTO.builder() .isAnnouncement(true) .storyCategory(StoryCategory.INFO_SHARING) .title("공지") @@ -255,7 +255,7 @@ void createPost_MemberAnnounced_Fail() { Long memberId = 2L; Long studyId = 1L; - StoryRequestDTO.PostDTO postPreviewDTO = StoryRequestDTO.PostDTO.builder() + StoryRequestDTO.StoryDTO postPreviewDTO = StoryRequestDTO.StoryDTO.builder() .isAnnouncement(true) .storyCategory(StoryCategory.INFO_SHARING) .title("공지") @@ -283,7 +283,7 @@ void createPost_TitleOverflow_Fail() { Long memberId = 1L; Long studyId = 1L; - StoryRequestDTO.PostDTO postPreviewDTO = StoryRequestDTO.PostDTO.builder() + StoryRequestDTO.StoryDTO postPreviewDTO = StoryRequestDTO.StoryDTO.builder() .isAnnouncement(true) .storyCategory(StoryCategory.INFO_SHARING) .title("50자가 넘어가는 제목 " @@ -327,7 +327,7 @@ void deletePost_Success() { .thenReturn(Optional.of(story1)); // when - StoryResDTO.PostPreviewDTO result = studyPostCommandService.deletePost(studyId, postId); + StoryResponseDTO.StoryPreviewDTO result = studyPostCommandService.deletePost(studyId, postId); // then assertNotNull(result); @@ -398,7 +398,7 @@ void likePost_Success() { when(storyRepository.save(any(Story.class))).thenReturn(story1); // when - StoryResDTO.PostLikeNumDTO result = studyPostCommandService.likePost(studyId, postId); + StoryResponseDTO.StoryLikeNumDTO result = studyPostCommandService.likePost(studyId, postId); // then assertNotNull(result); @@ -472,7 +472,7 @@ void cancelPostLike_Success() { when(storyRepository.save(any(Story.class))).thenReturn(story1); // when - StoryResDTO.PostLikeNumDTO result = studyPostCommandService.cancelPostLike(studyId, postId); + StoryResponseDTO.StoryLikeNumDTO result = studyPostCommandService.cancelPostLike(studyId, postId); // then assertNotNull(result); diff --git a/src/test/java/com/example/spot/service/story/StoryQueryServiceTest.java b/src/test/java/com/example/spot/service/story/StoryQueryServiceTest.java index 35bca252..568a5228 100644 --- a/src/test/java/com/example/spot/service/story/StoryQueryServiceTest.java +++ b/src/test/java/com/example/spot/service/story/StoryQueryServiceTest.java @@ -11,7 +11,6 @@ import com.example.spot.story.domain.repository.LikedStoryRepository; import com.example.spot.story.domain.repository.StoryCommentRepository; import com.example.spot.story.domain.StoryRepository; -import com.example.spot.story.web.dto.response.StoryResponseDTO; import com.example.spot.study.domain.association.StudyMember; import com.example.spot.study.domain.enums.StudyApplicationStatus; import com.example.spot.member.domain.enums.Gender; @@ -22,7 +21,7 @@ import com.example.spot.study.domain.StudyRepository; import com.example.spot.story.application.StoryQueryServiceImpl; import com.example.spot.story.web.dto.response.StoryCommentResponseDTO; -import com.example.spot.story.web.dto.response.StoryResDTO; +import com.example.spot.story.web.dto.response.StoryResponseDTO; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -151,7 +150,7 @@ void getAllPosts_All_Success() { .thenReturn(List.of(story1, story3)); // when - StoryResDTO.PostListDTO result = studyPostQueryService.getAllPosts(pageRequest, studyId, null); + StoryResponseDTO.StoryListDTO result = studyPostQueryService.getAllPosts(pageRequest, studyId, null); // then assertNotNull(result); @@ -180,7 +179,7 @@ void getAllPosts_Theme_Success() { .thenReturn(List.of(story1, story3)); // when - StoryResDTO.PostListDTO result = studyPostQueryService.getAllPosts(pageRequest, studyId, StoryCategoryQuery.FREE_TALK); + StoryResponseDTO.StoryListDTO result = studyPostQueryService.getAllPosts(pageRequest, studyId, StoryCategoryQuery.FREE_TALK); // then assertNotNull(result); @@ -209,7 +208,7 @@ void getAllPosts_Announcements_Success() { .thenReturn(List.of(story1, story3)); // when - StoryResDTO.PostListDTO result = studyPostQueryService.getAllPosts(pageRequest, studyId, StoryCategoryQuery.ANNOUNCEMENT); + StoryResponseDTO.StoryListDTO result = studyPostQueryService.getAllPosts(pageRequest, studyId, StoryCategoryQuery.ANNOUNCEMENT); // then assertNotNull(result); @@ -288,7 +287,7 @@ void getPost_Common_Success() { .thenReturn(false); // when - StoryResDTO.PostDetailDTO result = studyPostQueryService.getPost(studyId, postId, false); + StoryResponseDTO.StoryDetailDTO result = studyPostQueryService.getPost(studyId, postId, false); // then assertNotNull(result); @@ -321,7 +320,7 @@ void getPost_LikeOrScrap_Success() { .thenReturn(false); // when - StoryResDTO.PostDetailDTO result = studyPostQueryService.getPost(studyId, postId, true); + StoryResponseDTO.StoryDetailDTO result = studyPostQueryService.getPost(studyId, postId, true); // then assertNotNull(result); @@ -402,11 +401,11 @@ void getPost_NotStudyPost_Fail() { Optional.ofNullable(studyMember)); // when - StoryResponseDTO responseDTO = studyPostQueryService.findStudyAnnouncementPost(studyId); + StoryResponseDTO.StoryContentDTO result = studyPostQueryService.findStudyAnnouncementPost(studyId); // then - assertEquals(title,responseDTO.getTitle()); - assertEquals(content, responseDTO.getContent()); + assertEquals(title,result.getTitle()); + assertEquals(content, result.getContent()); } @Test @@ -460,7 +459,7 @@ void getAllComments_Success() { .thenReturn(List.of(studyPost1Comment1, studyPost1Comment2)); // when - StoryCommentResponseDTO.CommentReplyListDTO result = studyPostQueryService.getAllComments(studyId, postId); + StoryCommentResponseDTO.ReplyListDTO result = studyPostQueryService.getAllComments(studyId, postId); // then assertNotNull(result); diff --git a/src/test/java/com/example/spot/service/study/StudyCommandServiceTest.java b/src/test/java/com/example/spot/service/study/StudyCommandServiceTest.java index 90227c7a..df242bf7 100644 --- a/src/test/java/com/example/spot/service/study/StudyCommandServiceTest.java +++ b/src/test/java/com/example/spot/service/study/StudyCommandServiceTest.java @@ -24,10 +24,9 @@ import com.example.spot.study.domain.repository.StudyThemeRepository; import com.example.spot.study.domain.repository.ThemeRepository; import com.example.spot.study.application.StudyCommandServiceImpl; -import com.example.spot.study.presentation.dto.request.StudyJoinRequestDTO; -import com.example.spot.study.presentation.dto.request.StudyRegisterRequestDTO; -import com.example.spot.study.presentation.dto.response.StudyJoinResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyRegisterResponseDTO; +import com.example.spot.study.presentation.dto.request.StudyMemberRequestDTO; +import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO; +import com.example.spot.study.presentation.dto.response.StudyResponseDTO; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -115,7 +114,7 @@ void applyToStudy_Success() { getAuthentication(memberId); - StudyJoinRequestDTO.StudyJoinDTO studyJoinRequestDTO = StudyJoinRequestDTO.StudyJoinDTO.builder() + StudyMemberRequestDTO.JoinDTO joinDTO = StudyMemberRequestDTO.JoinDTO.builder() .introduction("Hi") .build(); @@ -125,7 +124,7 @@ void applyToStudy_Success() { .study(study) .status(StudyApplicationStatus.APPLIED) .isOwned(false) - .introduction(studyJoinRequestDTO.getIntroduction()) + .introduction(joinDTO.getIntroduction()) .build(); when(studyMemberRepository.countByStatusAndStudyId(StudyApplicationStatus.APPROVED, studyId)) @@ -136,7 +135,7 @@ void applyToStudy_Success() { .thenReturn(studyMember); // when - StudyJoinResponseDTO.JoinDTO result = studyCommandService.applyToStudy(studyId, studyJoinRequestDTO); + StudyMemberResponseDTO.JoinDTO result = studyCommandService.applyToStudy(studyId, joinDTO); // then assertThat(result).isNotNull(); @@ -154,7 +153,7 @@ void applyToStudy_StudyMember_Fail() { getAuthentication(memberId); - StudyJoinRequestDTO.StudyJoinDTO studyJoinRequestDTO = StudyJoinRequestDTO.StudyJoinDTO.builder() + StudyMemberRequestDTO.JoinDTO joinDTO = StudyMemberRequestDTO.JoinDTO.builder() .introduction("Hi") .build(); @@ -164,7 +163,7 @@ void applyToStudy_StudyMember_Fail() { .study(study) .status(StudyApplicationStatus.APPLIED) .isOwned(false) - .introduction(studyJoinRequestDTO.getIntroduction()) + .introduction(joinDTO.getIntroduction()) .build(); when(studyMemberRepository.countByStatusAndStudyId(StudyApplicationStatus.APPROVED, studyId)) @@ -175,7 +174,7 @@ void applyToStudy_StudyMember_Fail() { .thenReturn(studyMember); // when & then - assertThrows(StudyHandler.class, () -> studyCommandService.applyToStudy(studyId, studyJoinRequestDTO)); + assertThrows(StudyHandler.class, () -> studyCommandService.applyToStudy(studyId, joinDTO)); } @Test @@ -193,7 +192,7 @@ void applyToStudy_NotRecruitingStudy_Fail() { .maxPeople(1L) .build(); - StudyJoinRequestDTO.StudyJoinDTO studyJoinRequestDTO = StudyJoinRequestDTO.StudyJoinDTO.builder() + StudyMemberRequestDTO.JoinDTO joinDTO = StudyMemberRequestDTO.JoinDTO.builder() .introduction("Hi") .build(); @@ -203,7 +202,7 @@ void applyToStudy_NotRecruitingStudy_Fail() { .study(study) .status(StudyApplicationStatus.APPLIED) .isOwned(false) - .introduction(studyJoinRequestDTO.getIntroduction()) + .introduction(joinDTO.getIntroduction()) .build(); when(studyMemberRepository.countByStatusAndStudyId(StudyApplicationStatus.APPROVED, studyId)) @@ -214,7 +213,7 @@ void applyToStudy_NotRecruitingStudy_Fail() { .thenReturn(studyMember); // when & then - assertThrows(StudyHandler.class, () -> studyCommandService.applyToStudy(studyId, studyJoinRequestDTO)); + assertThrows(StudyHandler.class, () -> studyCommandService.applyToStudy(studyId, joinDTO)); } @Test @@ -226,7 +225,7 @@ void registerStudy() { getAuthentication(memberId); - StudyRegisterRequestDTO.RegisterDTO registerDTO = StudyRegisterRequestDTO.RegisterDTO.builder() + StudyMemberRequestDTO.RegisterDTO registerDTO = StudyMemberRequestDTO.RegisterDTO.builder() .themes(List.of(ThemeType.자격증)) .title("새로운 스터디") .goal("목표") @@ -268,7 +267,7 @@ void registerStudy() { when(studyThemeRepository.save(any(StudyTheme.class))).thenReturn(studyTheme); // when - StudyRegisterResponseDTO.RegisterDTO result = studyCommandService.registerStudy(registerDTO); + StudyResponseDTO.RegisterDTO result = studyCommandService.registerStudy(registerDTO); // then assertThat(result).isNotNull(); diff --git a/src/test/java/com/example/spot/service/study/StudyQueryServiceTest.java b/src/test/java/com/example/spot/service/study/StudyQueryServiceTest.java index 4eff1be3..63b6e4a3 100644 --- a/src/test/java/com/example/spot/service/study/StudyQueryServiceTest.java +++ b/src/test/java/com/example/spot/service/study/StudyQueryServiceTest.java @@ -3,7 +3,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyList; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -38,16 +37,17 @@ import com.example.spot.study.domain.repository.StudyThemeRepository; import com.example.spot.study.domain.repository.ThemeRepository; import com.example.spot.study.application.StudyQueryServiceImpl; -import com.example.spot.study.presentation.dto.request.SearchRequestStudyDTO; -import com.example.spot.study.presentation.dto.request.SearchRequestStudyWithThemeDTO; +import com.example.spot.study.presentation.dto.request.StudySearchRequestDTO; +import com.example.spot.study.presentation.dto.request.StudySearchRequestWithThemeDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.MyPageDTO; import com.example.spot.study.presentation.dto.response.SearchResponseDTO.StudyPreviewDTO; -import com.example.spot.study.presentation.dto.response.StudyInfoResponseDTO.StudyInfoDTO; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; + +import com.example.spot.study.presentation.dto.response.StudyResponseDTO; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -107,8 +107,8 @@ class StudyQueryServiceTest { private static MemberTheme memberTheme2; private static StudyTheme studyTheme1; private static StudyTheme studyTheme2; - private static SearchRequestStudyDTO request; - private static SearchRequestStudyWithThemeDTO requestWithTheme; + private static StudySearchRequestDTO request; + private static StudySearchRequestWithThemeDTO requestWithTheme; private static Region region1; private static Region region2; private static PreferredRegion preferredRegion1; @@ -153,7 +153,7 @@ void setUp() { study1.addMemberStudy(studyMember1); - request = getSearchRequestStudyDTO(); + request = getStudySearchRequestDTO(); requestWithTheme = getSearchRequestStudyWithThemeDTO(); // 사용자 인증 정보 생성 @@ -195,7 +195,7 @@ void getMyPageStudyCount() { when(studyRepository.findById(studyId)).thenReturn(Optional.ofNullable(study1)); // when - StudyInfoDTO result = studyQueryService.getStudyInfo(studyId); + StudyResponseDTO.StudyInfoDTO result = studyQueryService.getStudyInfo(studyId); // then assertNotNull(result); @@ -332,7 +332,7 @@ void getMyPageStudyCount() { @DisplayName("검색 조건 있는 스터디 검색 - 성공") void 검색_조건_있는_스터디_검색() { // given - SearchRequestStudyDTO request = getSearchRequestStudyDTO(); + StudySearchRequestDTO request = getStudySearchRequestDTO(); Map conditions = getStringObjectMap(); when(studyRepository.findAllStudyByConditions(conditions, StudySortBy.ALL, pageable)).thenReturn(List.of(study1, study2)); when(studyRepository.countStudyByConditions(conditions, StudySortBy.ALL)).thenReturn(2L); @@ -352,7 +352,7 @@ void getMyPageStudyCount() { void 검색_조건_있는_스터디_검색_페이징(){ //given List studies = List.of(study1, study2); - SearchRequestStudyDTO request = getSearchRequestStudyDTO(); + StudySearchRequestDTO request = getStudySearchRequestDTO(); Map conditions = getStringObjectMap(); when(studyRepository.findAllStudyByConditions(conditions, StudySortBy.ALL, pageable)) .thenReturn(studies); @@ -374,7 +374,7 @@ void getMyPageStudyCount() { @DisplayName("검색 조건 있는 스터디 검색 - 조회된 스터디가 없을 경우") void 검색_조건_있는_스터디_검색_시_스터디가_없는_경우() { // given - SearchRequestStudyDTO request = getSearchRequestStudyDTO(); + StudySearchRequestDTO request = getStudySearchRequestDTO(); Map conditions = getStringObjectMap(); when(studyRepository.findAllStudyByConditions(conditions, StudySortBy.ALL, pageable)).thenReturn(List.of()); when(studyRepository.countStudyByConditions(conditions, StudySortBy.ALL)).thenReturn(0L); @@ -696,7 +696,7 @@ void shouldReturnPagedStudies(){ // when StudyPreviewDTO result = studyQueryService.findInterestStudiesByConditionsAll( - PageRequest.of(0, 10), 1L, getSearchRequestStudyDTO(), StudySortBy.ALL); + PageRequest.of(0, 10), 1L, getStudySearchRequestDTO(), StudySortBy.ALL); // then assertEquals(10, result.getSize()); @@ -722,7 +722,7 @@ void shouldFilterStudiesBasedOnSearchConditions(){ // when // 검색 조건이 안맞는 경우, 검색 조건에 맞는 스터디가 조회 되면 안됨. StudyPreviewDTO result = studyQueryService.findInterestStudiesByConditionsAll( - pageable, member.getId(), getSearchRequestStudyDTO(), StudySortBy.ALL); + pageable, member.getId(), getStudySearchRequestDTO(), StudySortBy.ALL); // then assertEquals(1, result.getTotalElements()); @@ -747,7 +747,7 @@ void shouldFilterStudiesBasedOnSortConditionsByHit(){ // when StudyPreviewDTO result = studyQueryService.findInterestStudiesByConditionsAll( - pageable, member.getId(), getSearchRequestStudyDTO(), sortBy); + pageable, member.getId(), getStudySearchRequestDTO(), sortBy); // then assertEquals(2, result.getTotalElements()); @@ -772,7 +772,7 @@ void shouldFilterStudiesBasedOnSortConditionsByLiked(){ // when StudyPreviewDTO result = studyQueryService.findInterestStudiesByConditionsAll( - pageable, member.getId(), getSearchRequestStudyDTO(), sortBy); + pageable, member.getId(), getStudySearchRequestDTO(), sortBy); // then assertEquals(2, result.getTotalElements()); @@ -920,7 +920,7 @@ void shouldReturnPagedStudiesInSpecificTheme(){ // when StudyPreviewDTO result = studyQueryService.findInterestStudiesByConditionsSpecific( - PageRequest.of(0, 10), 1L, getSearchRequestStudyDTO(), ThemeType.어학, StudySortBy.ALL); + PageRequest.of(0, 10), 1L, getStudySearchRequestDTO(), ThemeType.어학, StudySortBy.ALL); // then assertEquals(10, result.getSize()); @@ -945,7 +945,7 @@ void shouldFilterStudiesBasedOnSearchConditionsInSpecificTheme(){ // when // 검색 조건이 안맞는 경우, 검색 조건에 맞는 스터디가 조회 되면 안됨. StudyPreviewDTO result = studyQueryService.findInterestStudiesByConditionsSpecific( - pageable, member.getId(), getSearchRequestStudyDTO(), ThemeType.어학, StudySortBy.ALL); + pageable, member.getId(), getStudySearchRequestDTO(), ThemeType.어학, StudySortBy.ALL); // then assertEquals(2, result.getTotalElements()); @@ -971,7 +971,7 @@ void shouldFilterStudiesInSpecificThemeBasedOnSortConditionsByHit(){ // when StudyPreviewDTO result = studyQueryService.findInterestStudiesByConditionsSpecific( - pageable, member.getId(), getSearchRequestStudyDTO(), ThemeType.어학, sortBy); + pageable, member.getId(), getStudySearchRequestDTO(), ThemeType.어학, sortBy); // then assertEquals(3, result.getTotalElements()); @@ -998,7 +998,7 @@ void shouldFilterStudiesInSpecificThemeBasedOnSortConditionsByLiked(){ // when StudyPreviewDTO result = studyQueryService.findInterestStudiesByConditionsAll( - pageable, member.getId(), getSearchRequestStudyDTO(), sortBy); + pageable, member.getId(), getStudySearchRequestDTO(), sortBy); // then assertEquals(3, result.getTotalElements()); @@ -1016,7 +1016,7 @@ void noThemeInMemberInterest() { ThemeType themeType = ThemeType.어학; StudySortBy sortBy = StudySortBy.ALL; - SearchRequestStudyDTO request = getSearchRequestStudyDTO(); + StudySearchRequestDTO request = getStudySearchRequestDTO(); when(memberRepository.existsById(member.getId())).thenReturn(true); when(memberThemeRepository.findAllByMemberId(member.getId())).thenReturn(List.of()); @@ -1461,7 +1461,7 @@ void noThemeInMemberInterestRegion() { // given StudySortBy sortBy = StudySortBy.ALL; - SearchRequestStudyDTO request = getSearchRequestStudyDTO(); + StudySearchRequestDTO request = getStudySearchRequestDTO(); when(memberRepository.existsById(member.getId())).thenReturn(true); when(preferredRegionRepository.findAllByMemberId(member.getId())).thenReturn(List.of()); @@ -1979,8 +1979,8 @@ private static Map getStringObjectMapWithThemeType() { return searchConditions; } - private static SearchRequestStudyDTO getSearchRequestStudyDTO() { - return SearchRequestStudyDTO.builder() + private static StudySearchRequestDTO getStudySearchRequestDTO() { + return StudySearchRequestDTO.builder() .gender(Gender.MALE) .minAge(20) .maxAge(40) @@ -1991,8 +1991,8 @@ private static SearchRequestStudyDTO getSearchRequestStudyDTO() { .build(); } - private static SearchRequestStudyWithThemeDTO getSearchRequestStudyWithThemeDTO() { - return SearchRequestStudyWithThemeDTO.builder() + private static StudySearchRequestWithThemeDTO getSearchRequestStudyWithThemeDTO() { + return StudySearchRequestWithThemeDTO.builder() .gender(Gender.MALE) .minAge(20) .maxAge(40) diff --git a/src/test/java/com/example/spot/service/study/studymember/StudyMemberCommandServiceTest.java b/src/test/java/com/example/spot/service/study/studymember/StudyMemberCommandServiceTest.java index 388c2bd1..f3746fbf 100644 --- a/src/test/java/com/example/spot/service/study/studymember/StudyMemberCommandServiceTest.java +++ b/src/test/java/com/example/spot/service/study/studymember/StudyMemberCommandServiceTest.java @@ -10,7 +10,7 @@ import com.example.spot.study.domain.association.StudyMember; import com.example.spot.study.domain.enums.StudyApplicationStatus; import com.example.spot.study.domain.repository.StudyMemberRepository; -import com.example.spot.study.presentation.dto.response.StudyTerminationResponseDTO; +import com.example.spot.study.presentation.dto.response.StudyResponseDTO; import com.example.spot.todo.presentation.dto.request.ToDoListRequestDTO; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -102,7 +102,7 @@ void terminateStudy_Success() { .thenReturn(Optional.of(studyMember)); // when - StudyTerminationResponseDTO.TerminationDTO result = studyMemberCommandService.terminateStudy(1L, "스터디 성과"); + StudyResponseDTO.TerminationDTO result = studyMemberCommandService.terminateStudy(1L, "스터디 성과"); // then assertNotNull(result); diff --git a/src/test/java/com/example/spot/service/study/studymember/StudyMemberQueryServiceTest.java b/src/test/java/com/example/spot/service/study/studymember/StudyMemberQueryServiceTest.java index 9b291732..5ac1244e 100644 --- a/src/test/java/com/example/spot/service/study/studymember/StudyMemberQueryServiceTest.java +++ b/src/test/java/com/example/spot/service/study/studymember/StudyMemberQueryServiceTest.java @@ -10,8 +10,6 @@ import com.example.spot.study.domain.enums.StudyApplicationStatus; import com.example.spot.study.domain.repository.StudyMemberRepository; import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO.StudyApplicantDTO; -import com.example.spot.study.presentation.dto.response.StudyMemberResponseDTO.StudyApplyMemberDTO; import com.example.spot.todo.domain.ToDo; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -100,7 +98,7 @@ void setup(){ when(studyMemberRepository.findAllByStudyIdAndStatus(studyId, StudyApplicationStatus.APPROVED)).thenReturn(List.of(studyMember)); // when - StudyMemberResponseDTO responseDTO = studyMemberQueryService.findStudyMembers(studyId); + StudyMemberResponseDTO.StudyMemberListDTO responseDTO = studyMemberQueryService.findStudyMembers(studyId); // then assertEquals(1, responseDTO.getTotalElements()); @@ -134,7 +132,7 @@ void setup(){ .thenReturn(List.of(apply)); // when - StudyMemberResponseDTO responseDTO = studyMemberQueryService.findStudyApplicants(1L); + StudyMemberResponseDTO.StudyMemberListDTO responseDTO = studyMemberQueryService.findStudyApplicants(1L); // then assertEquals(1, responseDTO.getTotalElements()); @@ -180,7 +178,7 @@ void setup(){ .thenReturn(Optional.ofNullable(apply)); // when - StudyApplyMemberDTO responseDTO = studyMemberQueryService.findStudyApplication(100L, 1L); + StudyMemberResponseDTO.ApplyingMemberDTO responseDTO = studyMemberQueryService.findStudyApplication(100L, 1L); // then assertEquals(1L, responseDTO.getMemberId()); @@ -238,7 +236,7 @@ void setup(){ .thenReturn(true); // when - StudyApplicantDTO responseDTO = studyMemberQueryService.isApplied(100L); + StudyMemberResponseDTO.AppliedStudyDTO responseDTO = studyMemberQueryService.isApplied(100L); // then assertEquals(100L, responseDTO.getStudyId()); diff --git a/src/test/java/com/example/spot/service/todo/ToDoCommandServiceTest.java b/src/test/java/com/example/spot/service/todo/ToDoCommandServiceTest.java index ea7d9f99..13e04b07 100644 --- a/src/test/java/com/example/spot/service/todo/ToDoCommandServiceTest.java +++ b/src/test/java/com/example/spot/service/todo/ToDoCommandServiceTest.java @@ -12,8 +12,6 @@ import com.example.spot.study.domain.association.StudyMember; import com.example.spot.todo.application.ToDoCommandServiceImpl; import com.example.spot.todo.domain.ToDo; -import com.example.spot.study.domain.enums.StudyApplicationStatus; -import com.example.spot.member.domain.enums.Status; import com.example.spot.study.domain.Study; import com.example.spot.member.domain.MemberRepository; import com.example.spot.study.domain.repository.StudyMemberRepository; @@ -26,8 +24,6 @@ import java.util.Collections; import java.util.Optional; -import com.example.spot.study.presentation.dto.response.StudyTerminationResponseDTO; -import com.example.spot.study.presentation.dto.response.StudyWithdrawalResponseDTO; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test;