diff --git a/src/main/java/goormthon/team28/startup_valley/controller/QuestionController.java b/src/main/java/goormthon/team28/startup_valley/controller/QuestionController.java index a66c972..2c1a25e 100644 --- a/src/main/java/goormthon/team28/startup_valley/controller/QuestionController.java +++ b/src/main/java/goormthon/team28/startup_valley/controller/QuestionController.java @@ -20,13 +20,21 @@ public ResponseDto listWaitingQuestion(@UserId Long userId, @PathVariable Lon } @GetMapping("/teams/{teamsId}/questions/received") - public ResponseDto listReceivedQuestion(@UserId Long userId, @PathVariable Long teamsId) { - return ResponseDto.ok(questionService.listReceivedQuestion(userId, teamsId, Boolean.TRUE)); + public ResponseDto listReceivedQuestion( + @UserId Long userId, + @PathVariable Long teamsId, + @RequestParam String sort + ) { + return ResponseDto.ok(questionService.listReceivedQuestion(userId, teamsId, Boolean.TRUE, sort)); } @GetMapping("/teams/{teamsId}/questions/sent") - public ResponseDto listSentQuestion(@UserId Long userId, @PathVariable Long teamsId) { - return ResponseDto.ok(questionService.listReceivedQuestion(userId, teamsId, Boolean.FALSE)); + public ResponseDto listSentQuestion( + @UserId Long userId, + @PathVariable Long teamsId, + @RequestParam String sort + ) { + return ResponseDto.ok(questionService.listReceivedQuestion(userId, teamsId, Boolean.FALSE, sort)); } @PostMapping("/teams/{teamsId}/questions") diff --git a/src/main/java/goormthon/team28/startup_valley/controller/TeamController.java b/src/main/java/goormthon/team28/startup_valley/controller/TeamController.java index 046d0d7..2fe2161 100644 --- a/src/main/java/goormthon/team28/startup_valley/controller/TeamController.java +++ b/src/main/java/goormthon/team28/startup_valley/controller/TeamController.java @@ -19,9 +19,13 @@ public ResponseDto getTeamList(@UserId Long userId) { return ResponseDto.ok(teamService.getTeamList(userId)); } - @GetMapping("/teams/retrieve-list") - public ResponseDto listProgressingTeam(@UserId Long userId) { - return ResponseDto.ok(teamService.listProgressingTeam(userId)); + @GetMapping("/teams/members/{membersId}/retrieve-list") + public ResponseDto listRetrieveTeam( + @UserId Long userId, + @PathVariable Long membersId, + @RequestParam String sort + ) { + return ResponseDto.ok(teamService.listRetrieveTeam(userId, membersId, sort)); } @GetMapping("/teams/{teamsId}") diff --git a/src/main/java/goormthon/team28/startup_valley/controller/WorkController.java b/src/main/java/goormthon/team28/startup_valley/controller/WorkController.java index 5276416..912a64d 100644 --- a/src/main/java/goormthon/team28/startup_valley/controller/WorkController.java +++ b/src/main/java/goormthon/team28/startup_valley/controller/WorkController.java @@ -15,8 +15,12 @@ public class WorkController { private final WorkService workService; @GetMapping("/teams/{teamsId}/works") - public ResponseDto listMemberWork(@UserId Long userId, @PathVariable Long teamsId) { - return ResponseDto.ok(workService.listMemberWork(userId, teamsId)); + public ResponseDto listMemberWork( + @UserId Long userId, + @PathVariable Long teamsId, + @RequestParam String sort + ) { + return ResponseDto.ok(workService.listMemberWork(userId, teamsId, sort)); } @GetMapping("/teams/{teamsId}/works/ranking") diff --git a/src/main/java/goormthon/team28/startup_valley/exception/ErrorCode.java b/src/main/java/goormthon/team28/startup_valley/exception/ErrorCode.java index 46dfa98..5708e39 100644 --- a/src/main/java/goormthon/team28/startup_valley/exception/ErrorCode.java +++ b/src/main/java/goormthon/team28/startup_valley/exception/ErrorCode.java @@ -21,6 +21,7 @@ public enum ErrorCode { INVALID_CREATE_PEER_REVIEW_OTHER(40010, HttpStatus.BAD_REQUEST, "해당 사용자(멤버)는 이미 리뷰를 작성하였습니다."), INVALID_CREATE_PEER_REVIEW_SELF(40010, HttpStatus.BAD_REQUEST, "자신에게 리뷰를 작성할 수 없습니다."), INVALID_CREATE_PEER_REVIEW_TO_OTHER_TEAM_MEMBER(40011, HttpStatus.BAD_REQUEST, "다른 팀의 멤버에게 리뷰를 작성할 수 없습니다."), + INVALID_QUERY_PARAMETER(40012, HttpStatus.BAD_REQUEST, "유효하지 않는 쿼리 파라미터입니다."), //401 INVALID_HEADER_VALUE(40100, HttpStatus.UNAUTHORIZED, "올바르지 않은 헤더값입니다."), diff --git a/src/main/java/goormthon/team28/startup_valley/repository/MemberRepository.java b/src/main/java/goormthon/team28/startup_valley/repository/MemberRepository.java index cbaf376..f3e6927 100644 --- a/src/main/java/goormthon/team28/startup_valley/repository/MemberRepository.java +++ b/src/main/java/goormthon/team28/startup_valley/repository/MemberRepository.java @@ -18,6 +18,7 @@ public interface MemberRepository extends JpaRepository { Boolean existsByUser(User user); Boolean existsByUserAndTeam(User user, Team team); List findAllByTeam(Team team); + List findAllByTeamAndPart(Team team, EPart part); List findAllByTeamOrderByTotalMinuteDesc(Team team); List findAllByUser(User user); Optional findByTeamAndUser(Team team, User user); diff --git a/src/main/java/goormthon/team28/startup_valley/repository/QuestionRepository.java b/src/main/java/goormthon/team28/startup_valley/repository/QuestionRepository.java index 0a777b2..6e13cc7 100644 --- a/src/main/java/goormthon/team28/startup_valley/repository/QuestionRepository.java +++ b/src/main/java/goormthon/team28/startup_valley/repository/QuestionRepository.java @@ -17,6 +17,7 @@ public interface QuestionRepository extends JpaRepository { @EntityGraph(attributePaths = {"sender"}) Optional findByCodeAndStatus(String code, EQuestionStatus status); List findAllByReceiverAndStatus(Member member, EQuestionStatus eQuestionStatus); + List findAllBySenderAndStatus(Member member, EQuestionStatus eQuestionStatus); List findAllByReceiver(Member member); List findAllBySender(Member member); boolean existsByCode(String code); diff --git a/src/main/java/goormthon/team28/startup_valley/service/QuestionService.java b/src/main/java/goormthon/team28/startup_valley/service/QuestionService.java index 5a3d4a4..b66a5f7 100644 --- a/src/main/java/goormthon/team28/startup_valley/service/QuestionService.java +++ b/src/main/java/goormthon/team28/startup_valley/service/QuestionService.java @@ -76,8 +76,12 @@ public QuestionListDto listWaitingQuestion(Long userId, Long teamsId) { return QuestionListDto.of(questionDtoList, questionDtoList.size()); } - public QuestionRetrieveSetListDto listReceivedQuestion(Long userId, Long teamsId, Boolean isReceived) { - + public QuestionRetrieveSetListDto listReceivedQuestion( + Long userId, + Long teamsId, + Boolean isReceived, + String sort + ) { User currentUser = userRepository.findById(userId) .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_USER)); Team team = teamRepository.findById(teamsId) @@ -85,8 +89,18 @@ public QuestionRetrieveSetListDto listReceivedQuestion(Long userId, Long teamsId Member member = memberRepository.findByTeamAndUser(team, currentUser) .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_MEMBER)); - List questionList = isReceived ? questionRepository .findAllByReceiver(member) - : questionRepository.findAllBySender(member); + List questionList; + switch (sort) { + case "all" -> questionList = isReceived ? questionRepository.findAllByReceiver(member) + : questionRepository.findAllBySender(member); + case "completed" -> questionList = isReceived ? + questionRepository.findAllByReceiverAndStatus(member, EQuestionStatus.FINISH) : + questionRepository.findAllBySenderAndStatus(member, EQuestionStatus.FINISH); + case "pending" -> questionList = isReceived ? + questionRepository.findAllByReceiverAndStatus(member, EQuestionStatus.WAITING_ANSWER) : + questionRepository.findAllBySenderAndStatus(member, EQuestionStatus.WAITING_ANSWER); + default -> throw new CommonException(ErrorCode.INVALID_QUERY_PARAMETER); + } List questionRetrieveSetDtoList = new ArrayList<>(); for (Question question : questionList) { Optional answer = answerRepository.findByQuestion(question); diff --git a/src/main/java/goormthon/team28/startup_valley/service/TeamService.java b/src/main/java/goormthon/team28/startup_valley/service/TeamService.java index e29d34e..ff7022e 100644 --- a/src/main/java/goormthon/team28/startup_valley/service/TeamService.java +++ b/src/main/java/goormthon/team28/startup_valley/service/TeamService.java @@ -19,6 +19,7 @@ import java.time.LocalDate; import java.util.List; import java.util.Optional; +import java.util.stream.Stream; @Slf4j @Service @@ -94,12 +95,26 @@ public TeamListDto getTeamList(Long userId) { ); } - public TeamRetrieveListDto listProgressingTeam(Long userId) { + public TeamRetrieveListDto listRetrieveTeam(Long userId, Long membersId, String sort) { - User currentUser = userRepository.findById(userId) - .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_USER)); - List memberList = memberRepository.findAllByUser(currentUser); - List teamRetrieveDtoList = memberList.stream() + Member targetMember = memberRepository.findById(membersId) + .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_MEMBER)); + User targetUser = targetMember.getUser(); + List memberList = memberRepository.findAllByUser(targetUser); + + Stream memberStream; + switch (sort) { + case "all" -> memberStream = memberList.stream(); + case "complete" -> memberStream = memberList.stream() + .filter(member -> member.getTeam().getStatus().equals(EProjectStatus.FINISH)); + case "progress" -> memberStream = memberList.stream() + .filter(member -> member.getTeam().getStatus().equals(EProjectStatus.IN_PROGRESS)); + case "peer" -> memberStream = memberList.stream() + .filter(member -> member.getTeam().getStatus().equals(EProjectStatus.PEER_REVIEW)); + default -> throw new CommonException(ErrorCode.INVALID_QUERY_PARAMETER); + } + + List teamRetrieveDtoList = memberStream .map(member -> TeamRetrieveDto.of( member.getTeam().getId(), member.getTeam().getName(), diff --git a/src/main/java/goormthon/team28/startup_valley/service/WorkService.java b/src/main/java/goormthon/team28/startup_valley/service/WorkService.java index 27e2b54..7f8c9f6 100644 --- a/src/main/java/goormthon/team28/startup_valley/service/WorkService.java +++ b/src/main/java/goormthon/team28/startup_valley/service/WorkService.java @@ -3,6 +3,7 @@ import goormthon.team28.startup_valley.domain.*; import goormthon.team28.startup_valley.dto.request.WorkTimeDto; import goormthon.team28.startup_valley.dto.response.*; +import goormthon.team28.startup_valley.dto.type.EPart; import goormthon.team28.startup_valley.exception.CommonException; import goormthon.team28.startup_valley.exception.ErrorCode; import goormthon.team28.startup_valley.repository.*; @@ -51,7 +52,7 @@ public Optional findNotOverWork(Scrum scrum, Member member){ return workRepository.findByScrumAndOwnerAndEndAtIsNull(scrum, member); } - public WorkListDto listMemberWork(Long userId, Long teamsId) { + public WorkListDto listMemberWork(Long userId, Long teamsId, String sort) { User currentUser = userRepository.findById(userId) .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_USER)); @@ -62,7 +63,16 @@ public WorkListDto listMemberWork(Long userId, Long teamsId) { if (!memberRepository.existsByUserAndTeam(currentUser, team)) throw new CommonException(ErrorCode.NOT_FOUND_MEMBER); - List memberList = memberRepository.findAllByTeam(team); + List memberList; + switch (sort) { + case "all" -> memberList = memberRepository.findAllByTeam(team); + case "front" -> memberList = memberRepository.findAllByTeamAndPart(team, EPart.FRONTEND); + case "back" -> memberList = memberRepository.findAllByTeamAndPart(team, EPart.BACKEND); + case "pm" -> memberList = memberRepository.findAllByTeamAndPart(team, EPart.PM); + case "design" -> memberList = memberRepository.findAllByTeamAndPart(team, EPart.DESIGN); + default -> throw new CommonException(ErrorCode.INVALID_QUERY_PARAMETER); + } + List workDtoList = new ArrayList<>(); for (Member member : memberList) { List workList = workRepository.findAllByOwner(member); @@ -73,7 +83,7 @@ public WorkListDto listMemberWork(Long userId, Long teamsId) { member.getPart(), member.getUser().getProfileImage(), work.getContent(), - work.getEndAt() + work.getStartAt() )) .toList()); }