Skip to content

Commit f115829

Browse files
authored
Merge pull request #287 from FC-InnerCircle-ICD2/feature/member-address
주소 등록, 수정 API 이슈
2 parents b99567a + 29fbe64 commit f115829

6 files changed

Lines changed: 53 additions & 45 deletions

File tree

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
package org.fastcampus.applicationclient.member.dto.request
22

3+
import jakarta.validation.constraints.NotBlank
4+
import jakarta.validation.constraints.NotNull
5+
36
data class MemberAddressUpdateRequest(
47
val id: Long,
5-
val roadAddress: String,
6-
val jibunAddress: String,
8+
@field:NotBlank(message = "도로명 주소를 입력해 주세요.")
9+
val roadAddress: String?,
10+
@field:NotBlank(message = "지번 주소를 입력해 주세요.")
11+
val jibunAddress: String?,
712
val detailAddress: String?,
813
val alias: String?,
9-
val latitude: Double,
10-
val longitude: Double,
14+
@field:NotNull(message = "위도를 입력해 주세요.")
15+
val latitude: Double?,
16+
@field:NotNull(message = "경도를 입력해 주세요.")
17+
val longitude: Double?,
1118
)

application-client/src/main/kotlin/org/fastcampus/applicationclient/member/dto/response/MemberAddressResponse.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ data class MemberAddressResponse(
1111

1212
data class MemberAddressDto(
1313
val id: Long,
14-
@get:JsonProperty("isDefault")
15-
var isDefault: Boolean,
16-
val roadAddress: String,
17-
val jibunAddress: String,
18-
val detailAddress: String,
14+
val roadAddress: String?,
15+
val jibunAddress: String?,
16+
val detailAddress: String?,
1917
val latitude: Double,
2018
val longitude: Double,
19+
val alias: String?,
20+
@get:JsonProperty("isDefault")
21+
var isDefault: Boolean,
2122
)

application-client/src/main/kotlin/org/fastcampus/applicationclient/member/service/MemberService.kt

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import org.fastcampus.member.entity.MemberAddress
1818
import org.fastcampus.member.repository.MemberAddressRepository
1919
import org.fastcampus.member.repository.MemberRepository
2020
import org.springframework.stereotype.Service
21+
import org.springframework.transaction.annotation.Transactional
22+
import java.time.LocalDateTime
2123

2224
/**
2325
* Created by kms0902 on 25. 1. 19..
@@ -33,14 +35,27 @@ class MemberService(
3335
return MemberInfoResponse(findMember.signname, findMember.nickname)
3436
}
3537

38+
@Transactional
3639
fun createAddress(memberAddressCreateRequest: MemberAddressCreateRequest, authMember: AuthMember): MemberAddressCreateResponse {
40+
val addressType = requireNotNull(memberAddressCreateRequest.memberAddressType)
41+
42+
val count = memberAddressRepository.countByUserIdAndMemberAddressTypeAndIsDeleted(authMember.id, addressType, false)
43+
if (MemberAddressType.HOME == addressType || MemberAddressType.COMPANY == addressType) {
44+
if (0 < count) {
45+
throw MemberException(MemberExceptionResult.DUPLICATE_MEMBER_ADDRESS_TYPE)
46+
}
47+
} else {
48+
if (4 < count) {
49+
throw MemberException(MemberExceptionResult.EXCEEDED_REGISTRABLE_ADDRESS_TYPE)
50+
}
51+
}
52+
3753
deleteDefaultAddressByMemberId(authMember.id)
3854

39-
val addressType = memberAddressCreateRequest.memberAddressType
4055
val createMemberAddress = MemberAddress(
4156
null,
4257
authMember.id,
43-
requireNotNull(addressType),
58+
addressType,
4459
requireNotNull(memberAddressCreateRequest.roadAddress),
4560
requireNotNull(memberAddressCreateRequest.jibunAddress),
4661
memberAddressCreateRequest.detailAddress,
@@ -49,23 +64,9 @@ class MemberService(
4964
requireNotNull(memberAddressCreateRequest.longitude),
5065
isDefault = true,
5166
isDeleted = false,
52-
updatedAt = null,
67+
updatedAt = LocalDateTime.now(),
5368
)
5469

55-
if (MemberAddressType.HOME == addressType || MemberAddressType.COMPANY == addressType) {
56-
val findMemberAddress = memberAddressRepository.findByUserIdAndMemberAddressType(authMember.id, addressType)
57-
if (findMemberAddress != null) {
58-
throw MemberException(MemberExceptionResult.DUPLICATE_MEMBER_ADDRESS_TYPE)
59-
}
60-
}
61-
62-
if (MemberAddressType.OTHER == addressType) {
63-
val count = memberAddressRepository.countByUserIdAndMemberAddressType(authMember.id, addressType)
64-
if (4 < count) {
65-
throw MemberException(MemberExceptionResult.EXCEEDED_REGISTRABLE_ADDRESS_TYPE)
66-
}
67-
}
68-
6970
val savedMemberAddress = memberAddressRepository.save(createMemberAddress)
7071
return MemberAddressCreateResponse(requireNotNull(savedMemberAddress.id))
7172
}
@@ -87,6 +88,7 @@ class MemberService(
8788
detailAddress = address.detailAddress ?: "",
8889
latitude = address.latitude,
8990
longitude = address.longitude,
91+
alias = address.alias,
9092
isDefault = address.isDefault,
9193
)
9294

@@ -118,13 +120,17 @@ class MemberService(
118120
val findMemberAddress = memberAddressRepository.findByIdAndUserId(addressId, authMember.id)
119121
?: throw MemberException(MemberExceptionResult.NOT_FOUND_ADDRESS)
120122

123+
deleteDefaultAddressByMemberId(authMember.id)
124+
121125
val updatedAddress = findMemberAddress.copy(
122-
roadAddress = memberAddressUpdateRequest.roadAddress,
123-
jibunAddress = memberAddressUpdateRequest.jibunAddress,
126+
id = addressId,
127+
roadAddress = requireNotNull(memberAddressUpdateRequest.roadAddress),
128+
jibunAddress = requireNotNull(memberAddressUpdateRequest.jibunAddress),
124129
detailAddress = memberAddressUpdateRequest.detailAddress,
125130
alias = memberAddressUpdateRequest.alias,
126-
latitude = memberAddressUpdateRequest.latitude,
127-
longitude = memberAddressUpdateRequest.longitude,
131+
latitude = requireNotNull(memberAddressUpdateRequest.latitude),
132+
longitude = requireNotNull(memberAddressUpdateRequest.longitude),
133+
isDefault = true,
128134
)
129135

130136
memberAddressRepository.save(updatedAddress)

domains/member/src/main/kotlin/org/fastcampus/member/repository/MemberAddressRepository.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ import org.fastcampus.member.entity.MemberAddress
66
interface MemberAddressRepository {
77
fun save(memberAddress: MemberAddress): MemberAddress
88

9-
fun findByUserIdAndMemberAddressType(userId: Long, memberAddressType: MemberAddressType): MemberAddress?
10-
11-
fun countByUserIdAndMemberAddressType(userId: Long, memberAddressType: MemberAddressType): Long
9+
fun countByUserIdAndMemberAddressTypeAndIsDeleted(userId: Long, memberAddressType: MemberAddressType, isDeleted: Boolean): Long
1210

1311
fun findByUserId(userId: Long): List<MemberAddress>
1412

infrastructure/member-postgres/src/main/kotlin/org/fastcampus/member/postgres/repository/MemberAddressJpaRepository.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ import org.springframework.data.jpa.repository.JpaRepository
66
import java.util.*
77

88
interface MemberAddressJpaRepository : JpaRepository<MemberAddressJpaEntity, Long> {
9-
fun findByUserIdAndMemberAddressType(userId: Long, memberAddressType: MemberAddressType): Optional<MemberAddressJpaEntity>
10-
11-
fun countByUserIdAndMemberAddressType(userId: Long, memberAddressType: MemberAddressType): Long
9+
fun countByUserIdAndMemberAddressTypeAndIsDeleted(userId: Long, memberAddressType: MemberAddressType, isDeleted: Boolean): Long
1210

1311
fun findByUserId(userId: Long): List<MemberAddressJpaEntity>
1412

infrastructure/member-postgres/src/main/kotlin/org/fastcampus/member/postgres/repository/MemberAddressRepositoryCustom.kt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,16 @@ class MemberAddressRepositoryCustom(
1515
return memberAddressJpaRepository.save(memberAddress.toJpaEntity()).toModel()
1616
}
1717

18-
override fun findByUserIdAndMemberAddressType(userId: Long, memberAddressType: MemberAddressType): MemberAddress? {
19-
return memberAddressJpaRepository.findByUserIdAndMemberAddressType(userId, memberAddressType).filter {
20-
!it.isDeleted
21-
}.map { it.toModel() }.orElse(null)
22-
}
23-
24-
override fun countByUserIdAndMemberAddressType(userId: Long, memberAddressType: MemberAddressType): Long {
25-
return memberAddressJpaRepository.countByUserIdAndMemberAddressType(userId, memberAddressType)
18+
override fun countByUserIdAndMemberAddressTypeAndIsDeleted(
19+
userId: Long,
20+
memberAddressType: MemberAddressType,
21+
isDeleted: Boolean,
22+
): Long {
23+
return memberAddressJpaRepository.countByUserIdAndMemberAddressTypeAndIsDeleted(userId, memberAddressType, isDeleted)
2624
}
2725

2826
override fun findByUserId(userId: Long): List<MemberAddress> {
29-
return memberAddressJpaRepository.findByUserId(userId).filter { !it.isDeleted }.map { it.toModel() }.toList()
27+
return memberAddressJpaRepository.findByUserId(userId).filter { !it.isDeleted }.map { it.toModel() }.sortedByDescending { it.id }
3028
}
3129

3230
override fun findByUserIdAndIsDefault(userId: Long, isDefault: Boolean): MemberAddress? {

0 commit comments

Comments
 (0)