-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[BE] Member, MemberTeamPlace, TeamPlace 구조 및 연관관계 리팩터링 (#239)
* feat: MemberTeamPlace 필드 추가 - DisplayMemberName 필드 추가 - DisplayTeamPlaceName 필드 추가 * refactor: TeamPlace -> MemberTeamPlace 의존관계 제거 * feat: 팀플레이스 소속멤버 정보 조회 repository 기능 구현 * refactor: 멤버 팀플레이스 소속 확인 인터셉터 네이밍 변경 * style: 공백줄 제거
- Loading branch information
Showing
16 changed files
with
376 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9 changes: 9 additions & 0 deletions
9
backend/src/main/java/team/teamby/teambyteam/member/domain/MemberIdAndDisplayNameOnly.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package team.teamby.teambyteam.member.domain; | ||
|
||
import team.teamby.teambyteam.member.domain.vo.DisplayMemberName; | ||
|
||
public record MemberIdAndDisplayNameOnly( | ||
Long id, | ||
DisplayMemberName displayMemberName | ||
) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
40 changes: 40 additions & 0 deletions
40
backend/src/main/java/team/teamby/teambyteam/member/domain/vo/DisplayMemberName.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
package team.teamby.teambyteam.member.domain.vo; | ||
|
||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Embeddable; | ||
import lombok.AccessLevel; | ||
import lombok.EqualsAndHashCode; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import team.teamby.teambyteam.member.exception.MemberTeamPlaceException; | ||
|
||
import java.util.Objects; | ||
|
||
@Embeddable | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@EqualsAndHashCode | ||
@Getter | ||
public class DisplayMemberName { | ||
|
||
private static final int MAX_LENGTH = 20; | ||
|
||
@Column(name = "display_member_name", nullable = false, length = MAX_LENGTH) | ||
private String value; | ||
|
||
public DisplayMemberName(final String value) { | ||
validate(value); | ||
this.value = value; | ||
} | ||
|
||
private void validate(final String value) { | ||
if (Objects.isNull(value)) { | ||
throw new NullPointerException("멤버 이름은 null일 수 없습니다."); | ||
} | ||
if (value.length() > MAX_LENGTH) { | ||
throw new MemberTeamPlaceException.MemberDisplayNameLengthException(); | ||
} | ||
if (value.isBlank()) { | ||
throw new MemberTeamPlaceException.MemberNameBlankException(); | ||
} | ||
} | ||
} |
40 changes: 40 additions & 0 deletions
40
backend/src/main/java/team/teamby/teambyteam/member/domain/vo/DisplayTeamPlaceName.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
package team.teamby.teambyteam.member.domain.vo; | ||
|
||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Embeddable; | ||
import lombok.AccessLevel; | ||
import lombok.EqualsAndHashCode; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import team.teamby.teambyteam.member.exception.MemberTeamPlaceException; | ||
|
||
import java.util.Objects; | ||
|
||
@Embeddable | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@EqualsAndHashCode | ||
@Getter | ||
public class DisplayTeamPlaceName { | ||
|
||
private static final int MAX_LENGTH = 30; | ||
|
||
@Column(name = "display_team_place_name", nullable = false, length = MAX_LENGTH) | ||
private String value; | ||
|
||
public DisplayTeamPlaceName(final String value) { | ||
validate(value); | ||
this.value = value; | ||
} | ||
|
||
private void validate(final String value) { | ||
if (Objects.isNull(value)) { | ||
throw new NullPointerException("팀플레이스의 이름은 null일 수 없습니다."); | ||
} | ||
if (value.length() > MAX_LENGTH) { | ||
throw new MemberTeamPlaceException.TeamPlaceDisplayNameLengthException(); | ||
} | ||
if (value.isBlank()) { | ||
throw new MemberTeamPlaceException.TeamPlaceNameBlankException(); | ||
} | ||
} | ||
} |
32 changes: 32 additions & 0 deletions
32
backend/src/main/java/team/teamby/teambyteam/member/exception/MemberTeamPlaceException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package team.teamby.teambyteam.member.exception; | ||
|
||
public class MemberTeamPlaceException extends RuntimeException { | ||
|
||
public MemberTeamPlaceException(final String message) { | ||
super(message); | ||
} | ||
|
||
public static class MemberDisplayNameLengthException extends MemberTeamPlaceException { | ||
public MemberDisplayNameLengthException() { | ||
super("멤버 이름의 길이가 최대 이름 길이를 초과했습니다."); | ||
} | ||
} | ||
|
||
public static class MemberNameBlankException extends MemberTeamPlaceException { | ||
public MemberNameBlankException() { | ||
super("멤버 이름은 공백을 제외한 1자 이상이어야합니다."); | ||
} | ||
} | ||
|
||
public static class TeamPlaceDisplayNameLengthException extends MemberTeamPlaceException { | ||
public TeamPlaceDisplayNameLengthException() { | ||
super("팀플레이스의 이름의 길이가 최대 이름 길이를 초과했습니다."); | ||
} | ||
} | ||
|
||
public static class TeamPlaceNameBlankException extends MemberTeamPlaceException { | ||
public TeamPlaceNameBlankException() { | ||
super("팀플레이스의 이름은 공백을 제외한 1자 이상이어야합니다."); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
61 changes: 61 additions & 0 deletions
61
...end/src/test/java/team/teamby/teambyteam/member/domain/MemberTeamPlaceRepositoryTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
package team.teamby.teambyteam.member.domain; | ||
|
||
import org.assertj.core.api.SoftAssertions; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import team.teamby.teambyteam.common.RepositoryTest; | ||
import team.teamby.teambyteam.common.fixtures.MemberFixtures; | ||
import team.teamby.teambyteam.common.fixtures.TeamPlaceFixtures; | ||
import team.teamby.teambyteam.member.domain.vo.DisplayMemberName; | ||
import team.teamby.teambyteam.teamplace.domain.TeamPlace; | ||
|
||
import java.util.List; | ||
|
||
class MemberTeamPlaceRepositoryTest extends RepositoryTest { | ||
|
||
@Autowired | ||
private MemberTeamPlaceRepository memberTeamPlaceRepository; | ||
|
||
@Test | ||
@DisplayName("멤버아이디와 소속된 팀의 아이디로 해당 팀에서의 사용자 이름을 조회한다.") | ||
void findMemberIdAndDisplayNameByTeamPlaceIdAndMemberId() { | ||
// given | ||
final Member PHILIP = testFixtureBuilder.buildMember(MemberFixtures.PHILIP()); | ||
final TeamPlace ENGLISH_TEAM_PLACE = testFixtureBuilder.buildTeamPlace(TeamPlaceFixtures.ENGLISH_TEAM_PLACE()); | ||
testFixtureBuilder.buildMemberTeamPlace(PHILIP, ENGLISH_TEAM_PLACE); | ||
|
||
// when | ||
final MemberIdAndDisplayNameOnly actual = memberTeamPlaceRepository.findByTeamPlaceIdAndMemberId(ENGLISH_TEAM_PLACE.getId(), PHILIP.getId()).get(); | ||
|
||
//then | ||
SoftAssertions.assertSoftly(softly -> { | ||
softly.assertThat(actual.id()).isEqualTo(PHILIP.getId()); | ||
softly.assertThat(actual.displayMemberName().getValue()).isEqualTo(PHILIP.getName().getValue()); | ||
}); | ||
} | ||
|
||
@Test | ||
@DisplayName("팀플레이스에 소속된 모든 멤버들의 아이디와 해당 팀에서의 사용자 이름을 조회한다.") | ||
void findAllMemberIdAndDisplayNameByTeamPlace() { | ||
// given | ||
final Member PHILIP = testFixtureBuilder.buildMember(MemberFixtures.PHILIP()); | ||
final Member ENDLE = testFixtureBuilder.buildMember(MemberFixtures.ENDEL()); | ||
final TeamPlace ENGLISH_TEAM_PLACE = testFixtureBuilder.buildTeamPlace(TeamPlaceFixtures.ENGLISH_TEAM_PLACE()); | ||
testFixtureBuilder.buildMemberTeamPlace(PHILIP, ENGLISH_TEAM_PLACE); | ||
testFixtureBuilder.buildMemberTeamPlace(ENDLE, ENGLISH_TEAM_PLACE); | ||
|
||
// when | ||
final List<MemberIdAndDisplayNameOnly> actual = memberTeamPlaceRepository.findAllByTeamPlaceId(ENGLISH_TEAM_PLACE.getId()); | ||
final List<String> displayNames = actual.stream() | ||
.map(MemberIdAndDisplayNameOnly::displayMemberName) | ||
.map(DisplayMemberName::getValue) | ||
.toList(); | ||
|
||
//then | ||
SoftAssertions.assertSoftly(softly -> { | ||
softly.assertThat(actual).hasSize(2); | ||
softly.assertThat(displayNames).containsExactlyInAnyOrder(PHILIP.getName().getValue(), ENDLE.getName().getValue()); | ||
}); | ||
} | ||
} |
Oops, something went wrong.