20240308 (금) 최종 프로젝트 티켓레이더 2주차 - 끝이 보이기 시작한 CRUD
2024. 3. 8. 21:04ㆍTIL
드디어 CRUD 구현의 끝이 보이기 시작한듯 하다.
1. PlaceServiceImpl 수정
기존에 있던 코드를 좀더 간결하고 반복되지 않는 코드로 변경하였다.
override fun updatePlace(placeId: Long, request: PlaceRequest) {
val place = placeRepository.findByIdOrNull(placeId)
?: throw ModelNotFoundException("place", placeId)
place.let { request.toPlace() }
placeRepository.save(place)
val seatList = availableSeatRepository.findByPlaceId(placeId)
seatList.map {
request.updateSeatByPlace(it!!, place)
availableSeatRepository.save(it)
}
val ticketList = ticketRepository.findAllByPlaceId(placeId)
ticketList.map {
it!!.place = place.name
ticketRepository.save(it)
}
}
2. UpdateEvent 관련 오류 및 수정작업
이벤트 생성시 이뤄져야하는 코드 순서
- 이벤트Id 기반으로 이벤트를 찾아옴
- 이어서 Price, Category, Place를 찾아옴
- 리퀘스트의 내용대로 기존 이벤트를 수정 > 저장
- 이벤트 생성시 Price를 자동생성하는 것처럼 Price의 내용을 자동으로 수정 > 저장
- 기존 이벤트와 달라진 이벤트의 startDate, endDate가 둘중 하나라도 다르면 Seat를 불러옴
- Seat리포지토리에서 겹치는 장소와 날짜가 있는지 검사
- 달라진 이벤트 이외의 날짜는 전부 삭제(isDeleted = true) 처리
- 달라진 이벤트 기준으로 startDate, endDate를 받아서 Seat리포지토리에 없다면 새로 생성 > 저장
@Transactional
override fun updateEvent(eventId: Long, eventRequest: EventRequest) {
val event = eventRepository.findByIdOrNull(eventId)
?: throw ModelNotFoundException("Event", eventId)
val price = priceRepository.findByEventId(eventId)
?: throw ModelNotFoundException("Price", eventId)
val category = categoryRepository.findByIdOrNull(eventRequest.categoryId)
?: throw ModelNotFoundException("category", eventRequest.categoryId)
val place = placeRepository.findPlaceByName(eventRequest.place)
?: throw ModelNotFoundException("place", 0)
val orgStartDate = event.startDate
val orgEndDate = event.endDate
//시작일과 끝나는 일 비교후 false 시 예외처리
check(eventRequest.startDate < eventRequest.endDate) {
"끝나는날짜는 시작날짜보다 빠를수 없습니다."
}
event.let {
it.posterImage = eventRequest.posterImage
it.title = eventRequest.title
it.eventInfo = eventRequest.eventInfo
it.startDate = eventRequest.startDate
it.endDate = eventRequest.endDate
it.place = place
it.category = category
}
eventRepository.save(event)
price.let {
it.seatRPrice = eventRequest.seatRPrice
it.seatSPrice = eventRequest.seatSPrice
it.seatAPrice = eventRequest.seatAPrice
it.event = event
}
event.price = price
priceRepository.save(price)
//날짜 변동이 생겼는지 확인
if (orgStartDate != event.startDate || orgEndDate != event.endDate) {
val date = event.startDate
val duration = event.endDate.compareTo(event.startDate)
for (i in 0..duration) {
val seat = availableSeatRepository.findByPlaceIdAndDate(place.id!!, date.plusDays(i.toLong()))
if (seat != null) {
check(seat.event!!.id == event.id) {
"다른 이벤트가 존재함"
}
}
}
val seatList = availableSeatRepository.findAllByEventId(eventId)
seatList.map{
if(it!!.date.isBefore(event.startDate) || it.date.isAfter(event.endDate)){
it.isDeleted = true
}
}
for (i in 0..duration) {
val seat = availableSeatRepository.findByEventIdAndDate(eventId, date.plusDays(i.toLong()))
if (seat == null) {
val newSeat = eventRequest.toAvailableSeat(event, place, date.plusDays(i.toLong()))
availableSeatRepository.save(newSeat)
}
}
}
}
다음주는 최대한 빨리 CRUD를 끝내고 테스트코드와 1차발표준비정도를 하면 좋을것 같다.
'TIL' 카테고리의 다른 글
20240312 (화) 최종 프로젝트 티켓레이더 3주차 - 1차 발표 준비 (1) | 2024.03.12 |
---|---|
20240311 (월) 최종 프로젝트 티켓레이더 3주차 - 1차 발표 준비 계획 (0) | 2024.03.11 |
20240307 (목) 최종 프로젝트 티켓레이더 2주차 - CRUD CRUD.. (1) | 2024.03.07 |
20240306 (수) 최종 프로젝트 티켓레이더 2주차 - 다시 처음으로 (2) | 2024.03.06 |
20240305 (화) 최종 프로젝트 티켓레이더 2주차 - Lock 구현 (1) | 2024.03.05 |