Skip to content

Commit

Permalink
feat: 프로필 생성, 수정할 때 프로필 이미지 id not required로 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
korECM committed Jan 15, 2023
1 parent 275206d commit f33971c
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 18 deletions.
4 changes: 2 additions & 2 deletions src/main/kotlin/zip/cafe/api/profile/dto/Profile.kt
Original file line number Diff line number Diff line change
Expand Up @@ -131,14 +131,14 @@ data class UploadedProfileImageResponse(

data class InitProfileRequest(
val nickname: String,
val imageId: Long,
val imageId: Long?,
)

class InitProfileResponse

data class EditProfileRequest(
val nickname: String,
val imageId: Long,
val imageId: Long?,
)

class EditProfileResponse
33 changes: 19 additions & 14 deletions src/main/kotlin/zip/cafe/service/MemberService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@ import org.springframework.web.multipart.MultipartFile
import zip.cafe.connector.S3Connector
import zip.cafe.connector.dto.S3FileDto
import zip.cafe.entity.ProfileImage
import zip.cafe.entity.member.Member
import zip.cafe.repository.MemberRepository
import zip.cafe.repository.ProfileImageRepository
import zip.cafe.repository.findOneById

private const val DEFAULT_PROFILE_IMAGE_URL = "https://d125lzs083ehp3.cloudfront.net/default.png"

@Service
class MemberService(
private val memberRepository: MemberRepository,
Expand All @@ -26,29 +29,31 @@ class MemberService(
fun findMemberById(memberId: Long) = memberRepository.findOneById(memberId)

@Transactional
fun initMemberProfile(memberId: Long, nickname: String, profileImageId: Long) {
require(!checkNicknameDuplication(nickname)) { "중복되는 닉네임입니다" }
val profileImage = profileImageRepository.findByIdOrNull(profileImageId) ?: throw IllegalArgumentException("존재하지 않는 프로필 이미지입니다")
require(profileImage.uploadedBy.id == memberId) { "본인의 프로필 이미지만 사용할 수 있습니다" }

fun initMemberProfile(memberId: Long, nickname: String, profileImageId: Long?) {
val member = memberRepository.findByIdOrNull(memberId) ?: throw IllegalArgumentException("존재하지 않는 회원입니다")
require(!member.isProfileInit) { "이미 프로필을 초기 설정한 회원입니다" }
member.profileImage = profileImage.cloudFrontURL
member.nickname = nickname
applyProfile(member, nickname, profileImageId)
member.isProfileInit = true
profileImage.member = member
}

@Transactional
fun editMemberProfile(memberId: Long, nickname: String, profileImageId: Long) {
fun editMemberProfile(memberId: Long, nickname: String, profileImageId: Long?) {
val member = memberRepository.findByIdOrNull(memberId) ?: throw IllegalArgumentException("존재하지 않는 회원입니다")
applyProfile(member, nickname, profileImageId)
}

private fun applyProfile(member: Member, nickname: String, profileImageId: Long?) {
require(!checkNicknameDuplication(nickname)) { "중복되는 닉네임입니다" }
val profileImage = profileImageRepository.findByIdOrNull(profileImageId) ?: throw IllegalArgumentException("존재하지 않는 프로필 이미지입니다")
require(profileImage.uploadedBy.id == memberId) { "본인의 프로필 이미지만 사용할 수 있습니다" }

val member = memberRepository.findByIdOrNull(memberId) ?: throw IllegalArgumentException("존재하지 않는 회원입니다")
member.profileImage = profileImage.cloudFrontURL
val profileImageURL = if (profileImageId != null) {
val profileImage = profileImageRepository.findByIdOrNull(profileImageId) ?: throw IllegalArgumentException("존재하지 않는 프로필 이미지입니다")
require(profileImage.uploadedBy.id == member.id) { "본인의 프로필 이미지만 사용할 수 있습니다" }
profileImage.member = member
profileImage.cloudFrontURL
} else DEFAULT_PROFILE_IMAGE_URL

member.profileImage = profileImageURL
member.nickname = nickname
profileImage.member = member
}

@Transactional(propagation = Propagation.NEVER)
Expand Down
4 changes: 2 additions & 2 deletions src/test/kotlin/zip/cafe/api/MemberControllerTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ class MemberControllerTest : WebMvcTestAdapter() {
"init-profile",
requestFields(
"nickname" type STRING means "닉네임" example nickname,
"imageId" type NUMBER means "프로필 이미지 Id" example imageId
"imageId" type NUMBER means "프로필 이미지 Id" example imageId and optional
),
responseBody(
"body" beneathPathWithSubsectionId "body"
Expand Down Expand Up @@ -130,7 +130,7 @@ class MemberControllerTest : WebMvcTestAdapter() {
"edit-profile",
requestFields(
"nickname" type STRING means "닉네임" example nickname,
"imageId" type NUMBER means "프로필 이미지 Id" example imageId
"imageId" type NUMBER means "프로필 이미지 Id" example imageId and optional
),
responseBody(
"body" beneathPathWithSubsectionId "body"
Expand Down

0 comments on commit f33971c

Please sign in to comment.