Skip to content

Commit

Permalink
♻️ 이미 등록된 즐겨찾기 역 정보와 등록하고자 하는 역 정보가 동일할 때 예외 처리 (#339)
Browse files Browse the repository at this point in the history
  • Loading branch information
discphy committed Feb 19, 2025
1 parent 1ae954c commit 72387f7
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import backend.team.ahachul_backend.api.member.application.port.out.MemberStatio
import backend.team.ahachul_backend.api.member.application.port.out.MemberStationWriter
import backend.team.ahachul_backend.api.member.domain.entity.MemberEntity
import backend.team.ahachul_backend.api.member.domain.entity.MemberStationEntity
import backend.team.ahachul_backend.common.exception.CommonException
import backend.team.ahachul_backend.common.response.ResponseCode
import backend.team.ahachul_backend.common.utils.RequestUtils
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
Expand Down Expand Up @@ -59,6 +61,10 @@ class MemberService(
val bookmarkStations = command.stations
val originMemberStations = memberStationReader.getByMember(member)

if (isAlreadyRegisteredStation(originMemberStations, bookmarkStations)) {

This comment has been minimized.

Copy link
@semi-cloud

semi-cloud Feb 19, 2025

Collaborator

음 사실 유저 입장에서 비정상적인 동작은 아닌거라, 예외를 던지기보다는 그냥 같지 않을 경우에만 삭제하고 새로 넣는 작업을 수행하는 방식이 더 나아보이는데 어떻게 생각하시나요? 👀

      if (!isAlreadyRegisteredStation(originMemberStations, bookmarkStations)) {
             // 삭제하고 새로 넣는 작업 수행
        }
throw CommonException(ResponseCode.ALREADY_REGISTERED_STATION)
}

if (originMemberStations.isNotEmpty()) {
memberStationWriter.deleteAllByMember(member)
}
Expand All @@ -67,18 +73,6 @@ class MemberService(
return BookmarkStationDto.Response(bookmarkStationIds)
}

private fun saveNewStations(member: MemberEntity, bookmarkStations: List<BookmarkStationCommand>): List<Long> {
return bookmarkStations
.map {
val memberStation = MemberStationEntity(
member = member,
station = stationReader.getByName(it.stationName),
label = it.label
)
memberStationWriter.save(memberStation).id
}
}

override fun getBookmarkStation(): GetBookmarkStationDto.Response {
val member = memberReader.getMember(RequestUtils.getAttribute("memberId")!!.toLong())

Expand Down Expand Up @@ -108,6 +102,31 @@ class MemberService(
return SearchMemberDto.Response.of(members)
}

private fun isAlreadyRegisteredStation(
originMemberStations: List<MemberStationEntity>,
bookmarkStations: List<BookmarkStationCommand>
): Boolean {
if (originMemberStations.size != bookmarkStations.size) {
return false
}

return originMemberStations.indices.all {
originMemberStations[it].isEquals(bookmarkStations[it].stationName, bookmarkStations[it].label)
}
}

private fun saveNewStations(member: MemberEntity, bookmarkStations: List<BookmarkStationCommand>): List<Long> {
return bookmarkStations
.map {
val memberStation = MemberStationEntity(
member = member,
station = stationReader.getByName(it.stationName),
label = it.label
)
memberStationWriter.save(memberStation).id
}
}

private fun getSubwayLineInfos(station: StationEntity): List<GetBookmarkStationDto.SubwayLineInfo> {
val subwayLineStations = subwayLineStationReader.findByStation(station)
return subwayLineStations.map {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import backend.team.ahachul_backend.api.member.domain.model.ProviderType
import backend.team.ahachul_backend.common.domain.entity.SubwayLineEntity
import backend.team.ahachul_backend.common.domain.model.RegionType
import backend.team.ahachul_backend.common.exception.BusinessException
import backend.team.ahachul_backend.common.exception.CommonException
import backend.team.ahachul_backend.common.persistence.SubwayLineRepository
import backend.team.ahachul_backend.common.response.ResponseCode
import backend.team.ahachul_backend.common.utils.RequestUtils
Expand Down Expand Up @@ -261,6 +262,41 @@ class MemberServiceTest(
)
}

@Test
fun 이미_등록된_즐겨찾기__정보와_동일한_정보로_수정_요청하지_못한다() {
// given
val station1 = StationEntity(name = "시청역")
val station2 = StationEntity(name = "강남역")

stationRepository.saveAll(listOf(station1, station2))

val memberStation1 = MemberStationEntity(
member = member!!,
station = station1,
label = ""
)

val memberStation2 = MemberStationEntity(
member = member!!,
station = station2,
label = "직장"
)

memberStationRepository.saveAll(listOf(memberStation1, memberStation2))

val command = BookmarkStationCommands(
stations = listOf(
BookmarkStationCommand("시청역", ""),
BookmarkStationCommand("강남역", "직장"),
)
)

// when & then
assertThatThrownBy { memberUseCase.bookmarkStation(command) }
.isExactlyInstanceOf(CommonException::class.java)
.hasMessage("이미 등록된 즐겨찾기 역 정보와 동일합니다.")
}

@Test
fun 즐겨찾는_역이_4_보다_크면_실패() {
// when + then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,8 @@ class MemberStationEntity(
val station: StationEntity

): BaseEntity() {

fun isEquals(stationName: String, label: String?) : Boolean {
return this.station.name == stationName && this.label == label
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ enum class ResponseCode(
FAILED_TO_GET_CONGESTION_INFO("705", "현재 혼잡도 정보를 받을 수 없습니다.", HttpStatus.NOT_FOUND),

// STATION
EXCEED_MAXIMUM_STATION_COUNT("800", "즐겨찾는 역은 최대 3개까지 가능합니다.", HttpStatus.BAD_REQUEST),
EXCEED_MAXIMUM_STATION_COUNT("800", "즐겨찾는 역은 최대 4개까지 가능합니다.", HttpStatus.BAD_REQUEST),
ALREADY_REGISTERED_STATION("801", "이미 등록된 즐겨찾기 역 정보와 동일합니다.", HttpStatus.BAD_REQUEST),

// FILE
FILE_READ_FAILED("800", "파일 읽기에 실패했습니다.", HttpStatus.INTERNAL_SERVER_ERROR);
Expand Down

0 comments on commit 72387f7

Please sign in to comment.