2024. 2. 28. 20:31ㆍTIL
오늘 한 내용
1. Price, Seat 구현
2. OneToOne 관계 설정 오류
3. 로그인시 토큰 문제 해결
1. Price, Seat 구현
Price와 Seat는 따로 패키지를 만들지 않고 Controller와 ServiceImpl은 Event와 공유하며 Response, Repository, Model 만 구분해서 만들었다.
이유는 저 두개는 Event 가 만들어질 때 자동으로 만들어져야 하는 구조로 우리가 계획을 하였고
따라서 ServiceImpl에서 CreateEvent시 Price, Seat의 생성 코드를 작성하였다.
override fun createEvent(
categoryId: Long,
eventRequest: CreateEventRequest,
) {
val category = categoryRepository.findByIdOrNull(categoryId)
?: throw ModelNotFoundException("category", categoryId)
val place = placeRepository.findPlaceByName(eventRequest.place)
?: throw ModelNotFoundException("place", 0)
val price = Price(
seatRPrice = eventRequest.seatRPrice,
seatSPrice = eventRequest.seatSPrice,
seatAPrice = eventRequest.seatAPrice
)
val event = Event(
posterImage = eventRequest.posterImage,
title = eventRequest.title,
eventInfo = eventRequest.eventInfo,
startDate = eventRequest.startDate,
endDate = eventRequest.endDate,
place = place,
category = category,
price = price
)
price.event = event
eventRepository.save(event)
priceRepository.save(price)
//place 네임 기반으로 place리포지토리에서 조회후 넣어주기
//startDate와 endDate를 기반으로 날짜 계산후 for반복문 완성해주기
for (i in 1..3) {
val seat = Seat(
event = event,
date = LocalDate.now(),//여기도 알맞은 날짜 넣도록하기
seatR = place.seatR,
seatS = place.seatS,
seatA = place.seatA
)
event.seat.add(seat)
seatRepository.save(seat)
}
}
워낙에 들어가야되는 값이 많아서 코드자체가 길어졌다..
이문제는 차차 해결해봐야겠다.
2. OneToOne 관계 설정 오류
Price와 Seat를 구현하고 테스트해봤는데
여러가지 오류가 반겨주었다.
그중 하나가 OneToOne관의 관계설정 오류
내가 짜놓은 CreateEvent 코드에서는 순차적으로 Price, Event, Seat가 만들어지고 저장이 되는데
Price 테이블에는 Event 와의 관계가 설정되어 있지만 저장시에 Event 를 받지 못해서가 문제였다.
(아마 이런 상황에선 Event를 먼저 저장하고 Price를 저장해도 Event쪽에서 오류가 생길게 뻔하다.)
이는 내가 OneToOne 관의 관계설정법도 잘 모르고 심지어 Price.event를 잠시 null로 했다가 생긴 오류였다.
그래서 우선 Event를 One, Price를 Many로 만들었다고 설정하고 관계를 다시 짜주었는데 이번에는 잘 실행되는 걸 확인하였다.
하지만 둘은 OneToOne 관계니까 가능하면 OneToOne 관계로 있게 하고싶었고 방법을 찾아본 결과
생각보다 쉬웠다.
어노테이션은 @OneToOne 으로 적어주되, 관계설정은 OneToMany관계처럼 FK를 가지고있는 쪽과 안가지고있는 쪽 설정을 해주었더니 제대로 작동이 되었다.
3. 로그인시 토큰 문제 해결
여느때처럼 Swagger를 작동하고 여러 API를 테스트하려는 도중 계속 역할이 Admin인 계정만 가능하게 만들어 놓은 API에서 AccessDnied 에러가 발생하였다.
문제는 역할을 Admin으로 설정하고 회원가입하고 로그인해도 계속 오류가 뜬다는것
도저히 무슨문제인지 잘 모르겠어서 jwt토큰을 해석해주는 사이트에서 토큰을 해석해봤는데 회원가입은 분명 Admin 이였지만 토큰엔 Member가 찍히는 것이였다!
회원가입에는 문제가 없는걸 수없이 확인해봤으니 남은건 login 부분
찾아보니 role에 강제로 member가 들어가는걸 확인하였다!!!!
이부분은 member.role.name으로 바꿔주니 작동이 잘 되는걸 확인했다.
기존까진 설계 및 기본적인 CRUD 였다면 오늘부터 본격적인 세부화 작업이 시작됐다.
내일은 EventServiceImpl 부분을 마저 작업할 예정
'TIL' 카테고리의 다른 글
20240304 (월) 최종 프로젝트 티켓레이더 2주차 - Test-code (0) | 2024.03.04 |
---|---|
20240229 (목) 최종 프로젝트 티켓레이더 1주차 - CRUD 마무리단계 (0) | 2024.02.29 |
20240227 (화) 최종 프로젝트 티켓레이더 1주차 - 회의 진행 중.. (0) | 2024.02.27 |
20240226 (월) 최종 프로젝트 티켓레이더 1주차 (0) | 2024.02.26 |
20240223 (금) 대용량 트래픽 프로젝트 - 동시성 제어 프로젝트 8일차 (0) | 2024.02.23 |