diff --git a/.gitignore b/.gitignore index bcda253..182502f 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,7 @@ out/ .vscode/ application*.yml + +### mapstruct ### + +/src/main/generated/ \ No newline at end of file diff --git a/src/main/java/com/dowe/exception/ErrorType.java b/src/main/java/com/dowe/exception/ErrorType.java index 7186db6..89a3210 100644 --- a/src/main/java/com/dowe/exception/ErrorType.java +++ b/src/main/java/com/dowe/exception/ErrorType.java @@ -18,6 +18,7 @@ public enum ErrorType { MEMBER_NOT_FOUND(HttpStatus.BAD_REQUEST, "멤버가 존재하지 않습니다"), // Team + TEAM_CREATION_LIMIT_EXCEPTION(HttpStatus.CONFLICT, "사용자가 이미 5개의 팀에 참여 중이라 새로운 팀을 생성할 수 없습니다."), MEMBER_IS_ALREADY_IN_TEAM(HttpStatus.BAD_REQUEST, "이미 소속된 팀입니다"), TEAM_IS_FULL(HttpStatus.BAD_REQUEST, "팀이 가득 차 참여할 수 없습니다"); diff --git a/src/main/java/com/dowe/exception/team/TeamCreationLimitException.java b/src/main/java/com/dowe/exception/team/TeamCreationLimitException.java new file mode 100644 index 0000000..acc7893 --- /dev/null +++ b/src/main/java/com/dowe/exception/team/TeamCreationLimitException.java @@ -0,0 +1,11 @@ +package com.dowe.exception.team; + +import com.dowe.exception.CustomException; +import com.dowe.exception.ErrorType; + +public class TeamCreationLimitException extends CustomException { + + public TeamCreationLimitException() { + super(ErrorType.TEAM_CREATION_LIMIT_EXCEPTION); + } +} diff --git a/src/main/java/com/dowe/profile/application/ProfileService.java b/src/main/java/com/dowe/profile/application/ProfileService.java index e62a1f6..f730257 100644 --- a/src/main/java/com/dowe/profile/application/ProfileService.java +++ b/src/main/java/com/dowe/profile/application/ProfileService.java @@ -33,4 +33,10 @@ public Profile createDefaultProfile( return profileRepository.save(defaultProfile); } + public long countProfiles( + Long memberId + ) { + return profileRepository.countByMemberId(memberId); + } + } diff --git a/src/main/java/com/dowe/profile/infrastructure/ProfileRepository.java b/src/main/java/com/dowe/profile/infrastructure/ProfileRepository.java index 8258cbe..5a0ee21 100644 --- a/src/main/java/com/dowe/profile/infrastructure/ProfileRepository.java +++ b/src/main/java/com/dowe/profile/infrastructure/ProfileRepository.java @@ -5,4 +5,7 @@ import com.dowe.profile.Profile; public interface ProfileRepository extends JpaRepository { + + long countByMemberId(Long memberId); + } diff --git a/src/main/java/com/dowe/team/application/TeamService.java b/src/main/java/com/dowe/team/application/TeamService.java index 9fd1ce7..f3396a0 100644 --- a/src/main/java/com/dowe/team/application/TeamService.java +++ b/src/main/java/com/dowe/team/application/TeamService.java @@ -1,5 +1,8 @@ package com.dowe.team.application; +import static com.dowe.util.AppConstants.*; + +import com.dowe.exception.team.TeamCreationLimitException; import com.dowe.profile.application.ProfileService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -9,7 +12,6 @@ import com.dowe.member.Member; import com.dowe.member.infrastructure.MemberRepository; import com.dowe.profile.Profile; -import com.dowe.profile.infrastructure.ProfileRepository; import com.dowe.team.Team; import com.dowe.team.dto.NewTeam; import com.dowe.team.dto.TeamSettings; @@ -28,7 +30,6 @@ public class TeamService { private final TeamRepository teamRepository; private final MemberRepository memberRepository; - private final ProfileRepository profileRepository; private final S3Uploader s3Uploader; private final ProfileService profileService; @@ -41,6 +42,13 @@ public NewTeam create(Long memberId, TeamSettings teamSettings) { Member member = memberRepository.findById(memberId) .orElseThrow(MemberNotFoundException::new); + long profileCount = profileService.countProfiles(member.getId()); + log.info(">>> ProfileService create() profileCount for member {} : {}", memberId, profileCount); + + if (profileCount == MAXIMUM_TEAM_COUNT) { + throw new TeamCreationLimitException(); + } + String image = null; if (teamSettings.getImage() != null && !teamSettings.getImage().isEmpty()) { image = s3Uploader.upload(TEAM_IMAGE_DIRECTORY, teamSettings.getImage()); diff --git a/src/main/java/com/dowe/util/AppConstants.java b/src/main/java/com/dowe/util/AppConstants.java index fa9d589..51c4c7b 100644 --- a/src/main/java/com/dowe/util/AppConstants.java +++ b/src/main/java/com/dowe/util/AppConstants.java @@ -10,6 +10,7 @@ public final class AppConstants { public static final String X_WWW_FORM_URLENCODED_CHARSET_UTF_8 = "application/x-www-form-urlencoded;charset=utf-8"; public static final String MEMBER_ID = "memberId"; + public static final int MAXIMUM_TEAM_COUNT = 5; public static final String AUTHORIZATION_CODE = "authorization_code"; public static final String TOKEN_TYPE = "tokenType"; public static final String TEAM_TITLE = "title";