Skip to content

Commit

Permalink
[FIX] find reviewable team API by change response dto
Browse files Browse the repository at this point in the history
  • Loading branch information
nogamsung committed Jan 8, 2024
1 parent 62562d8 commit 91390c9
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 65 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.gabojait.gabojaitspring.api.dto.review.response;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.gabojait.gabojaitspring.domain.team.Team;
import com.gabojait.gabojaitspring.domain.team.TeamMember;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.ToString;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

@Getter
@ToString
Expand All @@ -20,50 +21,15 @@ public class ReviewFindTeamResponse {
@ApiModelProperty(position = 2, required = true, value = "프로젝트 이름")
private String projectName;

@ApiModelProperty(position = 3, required = true, value = "디자이너 현재 수")
private Byte designerCurrentCnt;
@ApiModelProperty(position = 3, required = true, value = "팀원들")
private List<ReviewTeamMemberResponse> teamMembers;

@ApiModelProperty(position = 4, required = true, value = "백엔드 현재 수")
private Byte backendCurrentCnt;

@ApiModelProperty(position = 5, required = true, value = "프런트 현재 수")
private Byte frontendCurrentCnt;

@ApiModelProperty(position = 6, required = true, value = "매니저 현재 수")
private Byte managerCurrentCnt;

@ApiModelProperty(position = 7, required = true, value = "디자이너 최대 수")
private Byte designerMaxCnt;

@ApiModelProperty(position = 8, required = true, value = "백엔드 최대 수")
private Byte backendMaxCnt;

@ApiModelProperty(position = 9, required = true, value = "프런트 최대 수")
private Byte frontendMaxCnt;

@ApiModelProperty(position = 10, required = true, value = "매니저 최대 수")
private Byte managerMaxCnt;

@ApiModelProperty(position = 11, required = true, value = "생성일")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;

@ApiModelProperty(position = 12, required = true, value = "수정일")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedAt;

public ReviewFindTeamResponse(Team team) {
public ReviewFindTeamResponse(Team team, List<TeamMember> teamMembers) {
this.teamId = team.getId();
this.projectName = team.getProjectName();
this.designerCurrentCnt = team.getDesignerCurrentCnt();
this.backendCurrentCnt = team.getBackendCurrentCnt();
this.frontendCurrentCnt = team.getFrontendCurrentCnt();
this.managerCurrentCnt = team.getManagerCurrentCnt();
this.designerMaxCnt = team.getDesignerMaxCnt();
this.backendMaxCnt = team.getBackendMaxCnt();
this.frontendMaxCnt = team.getFrontendMaxCnt();
this.managerMaxCnt = team.getManagerMaxCnt();
this.createdAt = team.getCreatedAt();
this.updatedAt = team.getUpdatedAt();

this. teamMembers = teamMembers.stream()
.map(ReviewTeamMemberResponse::new)
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.gabojait.gabojaitspring.api.dto.review.response;

import com.gabojait.gabojaitspring.domain.team.TeamMember;
import com.gabojait.gabojaitspring.domain.user.Position;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.ToString;

@Getter
@ToString
@ApiModel(value = "리뷰 팀원 응답")
public class ReviewTeamMemberResponse {

@ApiModelProperty(position = 1, required = true, value = "회원 식별자")
private Long userId;

@ApiModelProperty(position = 2, required = true, value = "아이디")
private String username;

@ApiModelProperty(position = 3, required = true, value = "닉네임")
private String nickname;

@ApiModelProperty(position = 4, required = true, value = "포지션",
allowableValues = "DESIGNER, FRONTEND, BACKEND, MANAGER")
private Position position;

@ApiModelProperty(position = 5, required = true, value = "리더 여부")
private Boolean isLeader;

public ReviewTeamMemberResponse(TeamMember teamMember) {
this.userId = teamMember.getUser().getId();
this.username = teamMember.getUser().getUsername();
this.nickname = teamMember.getUser().getNickname();
this.position = teamMember.getPosition();
this.isLeader = teamMember.getIsLeader();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import static com.gabojait.gabojaitspring.common.code.ErrorCode.*;
import static com.gabojait.gabojaitspring.common.code.ErrorCode.TEAM_MEMBER_NOT_FOUND;
import static com.gabojait.gabojaitspring.common.code.ErrorCode.USER_NOT_FOUND;

@Service
@RequiredArgsConstructor
Expand Down Expand Up @@ -64,8 +65,10 @@ public PageData<List<ReviewFindAllTeamResponse>> findAllReviewableTeams(String u
public ReviewFindTeamResponse findReviewableTeam(String username, long teamId, LocalDateTime now) {
User user = findUser(username);
TeamMember teamMember = findCompleteTeamMember(user.getId(), teamId, now);
List<TeamMember> teamMembers = teamMemberRepository.findAllCompleteFetchTeam(teamId);
teamMembers.remove(teamMember);

return new ReviewFindTeamResponse(teamMember.getTeam());
return new ReviewFindTeamResponse(teamMember.getTeam(), teamMembers);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,12 @@
import com.gabojait.gabojaitspring.api.dto.review.response.ReviewFindAllTeamResponse;
import com.gabojait.gabojaitspring.api.dto.review.response.ReviewFindTeamResponse;
import com.gabojait.gabojaitspring.api.dto.review.response.ReviewPageResponse;
import com.gabojait.gabojaitspring.api.dto.review.response.ReviewTeamMemberResponse;
import com.gabojait.gabojaitspring.api.dto.team.response.*;
import com.gabojait.gabojaitspring.api.dto.user.response.*;
import com.gabojait.gabojaitspring.api.dto.user.response.UserContactResponse;
import com.gabojait.gabojaitspring.api.dto.user.response.UserFindMyselfResponse;
import com.gabojait.gabojaitspring.api.dto.user.response.UserLoginResponse;
import com.gabojait.gabojaitspring.api.dto.user.response.UserRegisterResponse;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RestController;
Expand Down Expand Up @@ -73,6 +77,7 @@ public Docket api() {
.additionalModels(typeResolver.resolve(TeamUpdateResponse.class))
.additionalModels(typeResolver.resolve(ReviewFindAllTeamResponse.class))
.additionalModels(typeResolver.resolve(ReviewFindTeamResponse.class))
.additionalModels(typeResolver.resolve(ReviewTeamMemberResponse.class))
.additionalModels(typeResolver.resolve(ReviewPageResponse.class))
.additionalModels(typeResolver.resolve(OfferAbstractResponse.class))
.additionalModels(typeResolver.resolve(OfferDefaultResponse.class))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,7 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.groups.Tuple.tuple;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;

@ActiveProfiles("test")
@SpringBootTest
Expand Down Expand Up @@ -107,30 +106,37 @@ void givenNonExistingUser_whenFindAllReviewableTeams_thenThrow() {
@DisplayName("리뷰 가능한 팀 조회를 한다.")
void givenValid_whenFindReviewableTeam_thenReturn() {
// given
User user = createSavedDefaultUser("tester@gabojait.com", "tester", "테스터", Position.MANAGER);
User user1 = createSavedDefaultUser("tester1@gabojait.com", "tester1", "테스터일", Position.MANAGER);
User user2 = createSavedDefaultUser("tester2@gabojait.com", "tester2", "테스터이", Position.BACKEND);
User user3 = createSavedDefaultUser("tester3@gabojait.com", "tester3", "테스터삼", Position.FRONTEND);
LocalDateTime now = LocalDateTime.now();

Team team = createSavedTeam("가보자잇");
teamRepository.save(team);
TeamMember teamMember = createSavedTeamMember(true, user, team);
teamMember.complete("github.com/gabojait", now);
teamMemberRepository.save(teamMember);
TeamMember teamMember1 = createSavedTeamMember(true, user1, team);
TeamMember teamMember2 = createSavedTeamMember(false, user2, team);
TeamMember teamMember3 = createSavedTeamMember(false, user3, team);
teamMember1.complete("github.com/gabojait", now);
teamMember2.complete("github.com/gabojait", now);
teamMember3.complete("github.com/gabojait", now);
teamMemberRepository.saveAll(List.of(teamMember1, teamMember2, teamMember3));

// when
ReviewFindTeamResponse response = reviewService.findReviewableTeam(user.getUsername(), team.getId(),
now);
ReviewFindTeamResponse response = reviewService.findReviewableTeam(user1.getUsername(), team.getId(), now);

// then
assertThat(response)
.extracting("teamId", "projectName", "designerCurrentCnt", "backendCurrentCnt", "frontendCurrentCnt",
"managerCurrentCnt", "designerMaxCnt", "backendMaxCnt", "frontendMaxCnt", "managerMaxCnt",
"createdAt", "updatedAt")
.containsExactly(
team.getId(), team.getProjectName(), team.getDesignerCurrentCnt(), team.getBackendCurrentCnt(),
team.getFrontendCurrentCnt(), team.getManagerCurrentCnt(), team.getDesignerMaxCnt(),
team.getBackendMaxCnt(), team.getFrontendMaxCnt(), team.getManagerMaxCnt(), team.getCreatedAt(),
team.getUpdatedAt()
);
assertAll(() -> assertThat(response)
.extracting("teamId", "projectName")
.containsExactly(team.getId(), team.getProjectName()),
() -> assertThat(response.getTeamMembers())
.extracting("userId", "username", "nickname", "position", "isLeader")
.containsExactly(
tuple(user3.getId(), user3.getUsername(), user3.getNickname(),
teamMember3.getPosition(), teamMember3.getIsLeader()),
tuple(user2.getId(), user2.getUsername(), user2.getNickname(),
teamMember2.getPosition(), teamMember2.getIsLeader())
)
);
}

@Test
Expand Down

0 comments on commit 91390c9

Please sign in to comment.