14
14
import org .codeNbug .mainserver .domain .seat .entity .SeatLayout ;
15
15
import org .codeNbug .mainserver .domain .seat .repository .SeatLayoutRepository ;
16
16
import org .codeNbug .mainserver .domain .seat .repository .SeatRepository ;
17
+ import org .codeNbug .mainserver .global .exception .globalException .BadRequestException ;
18
+ import org .codeNbug .mainserver .global .exception .globalException .ConflictException ;
17
19
import org .springframework .stereotype .Service ;
18
20
19
21
import jakarta .transaction .Transactional ;
@@ -48,7 +50,7 @@ public SeatLayoutResponse getSeatLayout(Long eventId, Long userId) {
48
50
throw new IllegalArgumentException ("로그인된 사용자가 없습니다." );
49
51
}
50
52
SeatLayout seatLayout = seatLayoutRepository .findByEvent_EventId (eventId )
51
- .orElseThrow (() -> new IllegalArgumentException ("행사가 존재하지 않습니다." ));
53
+ .orElseThrow (() -> new IllegalArgumentException ("해당 이벤트에 좌석 레이아웃이 존재하지 않습니다." ));
52
54
53
55
log .info ("SeatLayout ID: {}" , seatLayout .getId ());
54
56
@@ -75,15 +77,18 @@ public SeatSelectResponse selectSeat(Long eventId, SeatSelectRequest seatSelectR
75
77
.orElseThrow (() -> new IllegalArgumentException ("행사가 존재하지 않습니다." ));
76
78
77
79
List <Long > selectedSeats = seatSelectRequest .getSeatList ();
78
- if (selectedSeats .size () > 4 ) {
79
- throw new IllegalArgumentException ("최대 4개의 좌석만 선택할 수 있습니다." );
80
- }
81
80
82
81
if (event .getSeatSelectable ()) {
83
82
// 지정석 예매 처리
83
+ if (selectedSeats != null && selectedSeats .size () > 4 ) {
84
+ throw new BadRequestException ("최대 4개의 좌석만 선택할 수 있습니다." );
85
+ }
84
86
selectSeats (selectedSeats , userId , eventId , true , seatSelectRequest .getTicketCount ());
85
87
} else {
86
88
// 미지정석 예매 처리
89
+ if (selectedSeats != null && !selectedSeats .isEmpty ()) {
90
+ throw new BadRequestException ("[selectSeats] 미지정석 예매 시 좌석 목록은 제공되지 않아야 합니다." );
91
+ }
87
92
selectSeats (null , userId , eventId , false , seatSelectRequest .getTicketCount ());
88
93
}
89
94
@@ -110,24 +115,20 @@ private void selectSeats(List<Long> selectedSeats, Long userId, Long eventId, bo
110
115
.orElseThrow (() -> new IllegalArgumentException ("[selectSeats] 좌석이 존재하지 않습니다." ));
111
116
112
117
if (!seat .isAvailable ()) {
113
- throw new IllegalStateException ("[selectSeats] 이미 예매된 좌석입니다. seatId = " + seatId );
118
+ throw new ConflictException ("[selectSeats] 이미 예매된 좌석입니다. seatId = " + seatId );
114
119
}
115
120
116
121
reserveSeat (seat , userId , eventId , seatId );
117
122
}
118
123
} else {
119
124
// 미지정석 예매 처리
120
- if (selectedSeats != null && !selectedSeats .isEmpty ()) {
121
- throw new IllegalArgumentException ("[selectSeats] 미지정석 예매 시 좌석 목록은 제공되지 않아야 합니다." );
122
- }
123
-
124
125
List <Seat > availableSeats = seatRepository .findAvailableSeatsByEventId (eventId )
125
126
.stream ()
126
127
.limit (ticketCount )
127
128
.toList ();
128
129
129
130
if (availableSeats .size () < ticketCount ) {
130
- throw new IllegalStateException ("[selectSeats] 예매 가능한 좌석 수가 부족합니다." );
131
+ throw new ConflictException ("[selectSeats] 예매 가능한 좌석 수가 부족합니다." );
131
132
}
132
133
133
134
for (Seat seat : availableSeats ) {
@@ -150,7 +151,7 @@ private void reserveSeat(Seat seat, Long userId, Long eventId, Long seatId) {
150
151
151
152
boolean lockSuccess = redisLockService .tryLock (lockKey , lockValue , Duration .ofMinutes (5 ));
152
153
if (!lockSuccess ) {
153
- throw new IllegalStateException ("[reserveSeat] 이미 선택된 좌석이 있습니다." );
154
+ throw new BadRequestException ("[reserveSeat] 이미 선택된 좌석이 있습니다." );
154
155
}
155
156
156
157
seat .reserve ();
@@ -177,7 +178,7 @@ public void cancelSeat(Long eventId, SeatCancelRequest seatCancelRequest, Long u
177
178
String lockValue = redisLockService .getLockValue (lockKey );
178
179
179
180
if (!redisLockService .unlock (lockKey , lockValue )) {
180
- throw new IllegalStateException ("[cancelSeat] 좌석 락을 해제할 수 없습니다." );
181
+ throw new BadRequestException ("[cancelSeat] 좌석 락을 해제할 수 없습니다." );
181
182
}
182
183
183
184
Seat seat = seatRepository .findById (seatId )
0 commit comments