diff --git a/src/main/java/com/teaming/TeamingServer/Controller/ProjectController.java b/src/main/java/com/teaming/TeamingServer/Controller/ProjectController.java index 72c9bb4..25170c3 100644 --- a/src/main/java/com/teaming/TeamingServer/Controller/ProjectController.java +++ b/src/main/java/com/teaming/TeamingServer/Controller/ProjectController.java @@ -2,6 +2,7 @@ import com.teaming.TeamingServer.Domain.Dto.FileListResponseDto; +import com.teaming.TeamingServer.Domain.Dto.ScheduleConfirmDto; import com.teaming.TeamingServer.Exception.BaseException; import com.teaming.TeamingServer.Service.*; import com.teaming.TeamingServer.Domain.Dto.ScheduleEnrollRequestDto; @@ -90,6 +91,27 @@ public ResponseEntity deleteSchedule (@PathVariable("memberId") Lo } } + // 프로젝트의 각 스케줄 확인 + @GetMapping("/{memberId}/{projectId}/{scheduleId}") + public ResponseEntity>> readSchedule( + @PathVariable("memberId") Long memberId, @PathVariable("projectId") Long projectId, + @PathVariable("scheduleId") Long scheduleId) { + try { + List list = projectService.readSchedule(memberId, projectId, scheduleId); + + return ResponseEntity + .status(HttpStatus.OK) + .body(new BaseResponse<>(HttpStatus.OK.value(), "프로젝트의 스케줄", list)); + } + catch(BaseException e) { + BaseErrorResponse errorResponse = new BaseErrorResponse(e.getCode(), e.getMessage()); + + return ResponseEntity + .status(e.getCode()) + .body(new BaseResponse<>(e.getCode(), e.getMessage(), null)); + } + } + // 파일 업로드 @PostMapping("/{memberId}/{projectId}/files-upload") public ResponseEntity uploadFile(@PathVariable Long projectId, diff --git a/src/main/java/com/teaming/TeamingServer/Domain/Dto/ScheduleConfirmDto.java b/src/main/java/com/teaming/TeamingServer/Domain/Dto/ScheduleConfirmDto.java new file mode 100644 index 0000000..0c99cb6 --- /dev/null +++ b/src/main/java/com/teaming/TeamingServer/Domain/Dto/ScheduleConfirmDto.java @@ -0,0 +1,20 @@ +package com.teaming.TeamingServer.Domain.Dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.time.LocalTime; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ScheduleConfirmDto { + private String schedule_name; + private LocalDate schedule_start; + private LocalDate schedule_end; + private LocalTime schedule_start_time; + private LocalTime schedule_end_time; + +} diff --git a/src/main/java/com/teaming/TeamingServer/Service/MemberServiceImpl.java b/src/main/java/com/teaming/TeamingServer/Service/MemberServiceImpl.java index bd05484..0419268 100644 --- a/src/main/java/com/teaming/TeamingServer/Service/MemberServiceImpl.java +++ b/src/main/java/com/teaming/TeamingServer/Service/MemberServiceImpl.java @@ -314,12 +314,11 @@ private List searchPortPolio(List memberProject, List< public void saveMemberProject(Long member_id, Long project_id, Long schedule_id) { Member member = memberRepository.findById(member_id).get(); Project project = projectRepository.findById(project_id).get(); - Schedule schedule = scheduleRepository.findById(schedule_id).get(); MemberProject memberProject = MemberProject.builder() .member(member) .project(project) - .schedule(schedule).build(); + .build(); memberProjectRepository.save(memberProject); } diff --git a/src/main/java/com/teaming/TeamingServer/Service/ProjectService.java b/src/main/java/com/teaming/TeamingServer/Service/ProjectService.java index 16c88d3..f750626 100644 --- a/src/main/java/com/teaming/TeamingServer/Service/ProjectService.java +++ b/src/main/java/com/teaming/TeamingServer/Service/ProjectService.java @@ -1,6 +1,7 @@ package com.teaming.TeamingServer.Service; import com.teaming.TeamingServer.Domain.Dto.MainPageResponseDto; +import com.teaming.TeamingServer.Domain.Dto.ScheduleConfirmDto; import com.teaming.TeamingServer.Domain.Dto.ScheduleResponseDto; import com.teaming.TeamingServer.Domain.entity.*; import com.teaming.TeamingServer.Exception.BaseException; @@ -33,6 +34,7 @@ public class ProjectService { private final MemberRepository memberRepository; private final FileRepository fileRepository; private final MemberProjectRepository memberProjectRepository; + private final ScheduleRepository scheduleRepository; public List searchSchedule(Long memberId, Long projectId) { @@ -52,7 +54,25 @@ public List searchSchedule(Long memberId, Long projectId) { return null; } return result; + } + + public List readSchedule(Long memberId, Long projectId, Long scheduleId) { + Project project = projectRepository.findById(projectId) + .orElseThrow(() -> new BaseException(404, "유효하지 않은 프로젝트 Id")); + Member member = memberRepository.findById(memberId).orElseThrow(() + -> new BaseException(HttpStatus.NOT_FOUND.value(), "Member not found with id: " + memberId)); + Schedule schedule = scheduleRepository.findById(scheduleId).orElseThrow(() + -> new BaseException(HttpStatus.NOT_FOUND.value(), "유효하지 않은 스케줄 Id")); + + List result = project.getSchedules().stream() + .map(scheduleConfirm -> new ScheduleConfirmDto(schedule.getSchedule_name(), schedule.getSchedule_start(), + schedule.getSchedule_end(), schedule.getSchedule_start_time(), + schedule.getSchedule_end_time())).collect(Collectors.toList()); + if(result.isEmpty()) { + return null; + } + return result; } // memberID 로 MemberProject 들 받아오기 diff --git a/src/main/java/com/teaming/TeamingServer/Service/ScheduleService.java b/src/main/java/com/teaming/TeamingServer/Service/ScheduleService.java index 095a3bf..e5692bf 100644 --- a/src/main/java/com/teaming/TeamingServer/Service/ScheduleService.java +++ b/src/main/java/com/teaming/TeamingServer/Service/ScheduleService.java @@ -59,4 +59,21 @@ public void deleteSchedule(Long memberId, Long projectId, Long scheduleId) { // 스케줄을 삭제한다. scheduleRepository.deleteById(scheduleId); } + + public void readSchedule(Long memberId, Long projectId, Long scheduleId) { + Project project = projectRepository.findById(projectId).orElseThrow(() + -> new BaseException(HttpStatus.NOT_FOUND.value(), "Project not found")); + Schedule schedule = scheduleRepository.findById(scheduleId).orElseThrow(() + -> new BaseException(HttpStatus.NOT_FOUND.value(), "Schedule not found")); + Member member = memberRepository.findById(memberId).orElseThrow(() + -> new EntityNotFoundException("Member not found")); + + if(!schedule.getProject().equals(project)) { + throw new IllegalArgumentException("Schedule does not belong to the specified project."); + } + if(!schedule.getMembersSchedules().equals(member)) { // 요건 필요한지 잘 모르겠다,, + throw new IllegalArgumentException("Schedule does not belong to the specified member."); + } + + } }