Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import com.weeth.domain.club.domain.service.ClubCodePolicy
import com.weeth.domain.club.domain.service.ClubJoinPolicy
import com.weeth.domain.club.domain.service.ClubMemberPolicy
import com.weeth.domain.user.application.exception.UserInActiveException
import com.weeth.domain.user.domain.entity.UserProfile
import com.weeth.domain.user.domain.repository.UserProfileRepository
import com.weeth.domain.user.domain.repository.UserReader
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
Expand All @@ -33,6 +35,7 @@ import java.time.LocalDateTime
class ManageClubMemberUsecase(
private val clubRepository: ClubRepository,
private val clubMemberRepository: ClubMemberRepository,
private val userProfileRepository: UserProfileRepository,
private val clubMemberCardinalRepository: ClubMemberCardinalRepository,
private val cardinalReader: CardinalReader,
private val attendanceInitializer: AttendanceInitializer,
Expand Down Expand Up @@ -76,6 +79,12 @@ class ManageClubMemberUsecase(
accept()
}

val defaultProfile =
userProfileRepository.save(
UserProfile.create(user = user, name = user.name.take(UserProfile.MAX_NAME_LENGTH)),
)
member.assignProfile(defaultProfile)

clubMemberRepository.save(member)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class UserProfile(
fun isOwnedBy(userId: Long): Boolean = user.id == userId

companion object {
private const val MAX_NAME_LENGTH = 20
const val MAX_NAME_LENGTH = 20
private const val MAX_STORAGE_KEY_LENGTH = 500
private const val MAX_BIO_LENGTH = 30

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import com.weeth.domain.club.domain.service.ClubMemberPolicy
import com.weeth.domain.club.fixture.ClubMemberTestFixture
import com.weeth.domain.club.fixture.ClubTestFixture
import com.weeth.domain.user.application.exception.UserInActiveException
import com.weeth.domain.user.domain.entity.UserProfile
import com.weeth.domain.user.domain.repository.UserProfileRepository
import com.weeth.domain.user.domain.repository.UserReader
import com.weeth.domain.user.fixture.UserTestFixture
import io.kotest.assertions.throwables.shouldThrow
Expand All @@ -39,6 +41,7 @@ class ManageClubMemberUseCaseTest :
DescribeSpec({
val clubRepository = mockk<ClubRepository>()
val clubMemberRepository = mockk<ClubMemberRepository>()
val userProfileRepository = mockk<UserProfileRepository>()
val clubMemberCardinalRepository = mockk<ClubMemberCardinalRepository>(relaxed = true)
val cardinalReader = mockk<CardinalReader>()
val attendanceInitializer = mockk<AttendanceInitializer>(relaxed = true)
Expand All @@ -52,6 +55,7 @@ class ManageClubMemberUseCaseTest :
ManageClubMemberUsecase(
clubRepository = clubRepository,
clubMemberRepository = clubMemberRepository,
userProfileRepository = userProfileRepository,
clubMemberCardinalRepository = clubMemberCardinalRepository,
cardinalReader = cardinalReader,
attendanceInitializer = attendanceInitializer,
Expand All @@ -66,6 +70,7 @@ class ManageClubMemberUseCaseTest :
clearMocks(
clubRepository,
clubMemberRepository,
userProfileRepository,
clubMemberCardinalRepository,
cardinalReader,
attendanceInitializer,
Expand All @@ -75,6 +80,7 @@ class ManageClubMemberUseCaseTest :
clubActivityDeletionPolicy,
)
every { clubMemberRepository.save(any()) } answers { firstArg() }
every { userProfileRepository.save(any()) } answers { firstArg() }
}

describe("setInitialCardinals") {
Expand Down Expand Up @@ -275,6 +281,33 @@ class ManageClubMemberUseCaseTest :

verify(exactly = 1) { clubMemberRepository.save(any()) }
}

it("가입 즉시 기본 프로필이 생성되어 멤버에 할당된다") {
val targetClub = ClubTestFixture.createClub(code = "JOIN-CODE")
val user = UserTestFixture.createRegisteredUser(name = "홍길동")

every { clubRepository.getClubById(1L) } returns targetClub
every { userReader.getByIdWithLock(10L) } returns user
every { clubMemberRepository.findByClubIdAndUserId(1L, 10L) } returns null
justRun { clubJoinPolicy.validateJoinLimit(10L) }

useCase.join(
clubId = 1L,
userId = 10L,
request = ClubJoinRequest(code = "JOIN-CODE"),
)

verify(exactly = 1) {
userProfileRepository.save(
match<UserProfile> { it.name == "홍길동" && it.user == user },
)
}
verify(exactly = 1) {
clubMemberRepository.save(
match { it.userProfile != null },
)
}
}
}

context("탈퇴 사용자가 가입 시도하는 경우") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,12 @@ object UserTestFixture {
status = Status.WAITING,
).applyId(id)

fun createRegisteredUser(id: Long = 0L): User =
fun createRegisteredUser(
id: Long = 0L,
name: String = "등록완료",
): User =
User(
name = "등록완료",
name = name,
email = Email.from("registered@test.com"),
status = Status.ACTIVE,
).apply {
Expand Down
Loading