11package com .oronaminc .join .room .service ;
22
3+ import static com .oronaminc .join .global .exception .ErrorCode .*;
4+
5+ import java .util .List ;
6+ import java .util .Map ;
7+ import java .util .stream .Collectors ;
8+
9+ import org .springframework .cache .Cache ;
10+ import org .springframework .cache .CacheManager ;
11+ import org .springframework .context .ApplicationEventPublisher ;
12+ import org .springframework .stereotype .Service ;
13+ import org .springframework .transaction .annotation .Transactional ;
14+
315import com .oronaminc .join .answer .domain .Answer ;
416import com .oronaminc .join .answer .service .AnswerReader ;
517import com .oronaminc .join .document .domain .Document ;
1628import com .oronaminc .join .room .dao .RoomRepository ;
1729import com .oronaminc .join .room .domain .Room ;
1830import com .oronaminc .join .room .domain .RoomStatus ;
19- import com .oronaminc .join .room .dto .*;
31+ import com .oronaminc .join .room .dto .CreateRoomRequest ;
32+ import com .oronaminc .join .room .dto .CreateRoomResponse ;
33+ import com .oronaminc .join .room .dto .JoinRoomRequest ;
34+ import com .oronaminc .join .room .dto .JoinRoomResponse ;
35+ import com .oronaminc .join .room .dto .ReportResponse ;
36+ import com .oronaminc .join .room .dto .RoomDetailResponse ;
37+ import com .oronaminc .join .room .dto .RoomJoinResponse ;
38+ import com .oronaminc .join .room .dto .RoomUpdateInfoResponse ;
39+ import com .oronaminc .join .room .dto .RoomUpdateRequest ;
40+ import com .oronaminc .join .room .dto .RoomUpdateStatusRequest ;
41+ import com .oronaminc .join .room .dto .TopQnAResponse ;
2042import com .oronaminc .join .room .event .RoomDeleteEvent ;
2143import com .oronaminc .join .room .util .CodeGenerator ;
2244import com .oronaminc .join .room .util .RoomMapper ;
2345import com .oronaminc .join .websocket .session .CurrentParticipantManager ;
24- import lombok .RequiredArgsConstructor ;
25- import org .springframework .cache .annotation .CacheEvict ;
26- import org .springframework .context .ApplicationEventPublisher ;
27- import org .springframework .stereotype .Service ;
28- import org .springframework .transaction .annotation .Transactional ;
2946
30- import java .util .List ;
31- import java .util .Map ;
32- import java .util .stream .Collectors ;
33-
34- import static com .oronaminc .join .global .exception .ErrorCode .*;
47+ import lombok .RequiredArgsConstructor ;
3548
3649@ Service
3750@ Transactional (readOnly = true )
@@ -49,6 +62,7 @@ public class RoomService {
4962 private final RoomReader roomReader ;
5063 private final CurrentParticipantManager currentParticipantManager ;
5164 private final ApplicationEventPublisher publisher ;
65+ private final CacheManager cacheManager ;
5266
5367 private static final int CODE_LENGTH = 6 ;
5468
@@ -92,7 +106,6 @@ public RoomDetailResponse getRoomDetail(Long memberId, Long roomId) {
92106 }
93107
94108 @ Transactional
95- @ CacheEvict (cacheNames = "roomById" , key = "#roomId" )
96109 public void updateRoom (Long memberId , Long roomId , RoomUpdateRequest updateRoomRequest ) {
97110 participantService .validatePresenter (roomId , memberId );
98111
@@ -105,10 +118,11 @@ public void updateRoom(Long memberId, Long roomId, RoomUpdateRequest updateRoomR
105118 room .update (updateRoomRequest );
106119 participantService .updateTeam (room , updateRoomRequest .teamEmail ());
107120 documentService .updateDocument (updateRoomRequest .documentUrl (), roomId );
121+
122+ clearCache (room .getId (), room .getSecretCode ());
108123 }
109124
110125 @ Transactional
111- @ CacheEvict (cacheNames = "roomById" , key = "#roomId" )
112126 public void deleteRoom (Long memberId , Long roomId ) {
113127 participantService .validatePresenter (roomId , memberId );
114128
@@ -119,18 +133,19 @@ public void deleteRoom(Long memberId, Long roomId) {
119133 throw new ErrorException (BAD_REQUEST_ROOM_STARTED );
120134 }
121135
136+ clearCache (room .getId (), room .getSecretCode ());
122137 publisher .publishEvent (new RoomDeleteEvent (roomId ));
123138 roomRepository .deleteById (roomId );
124139 s3Service .deleteFile (document .getFileUrl ());
125140 }
126141
127142 @ Transactional
128- @ CacheEvict (cacheNames = "roomById" , key = "#roomId" )
129143 public void updateRoomStatus (Long memberId , Long roomId ,
130- RoomUpdateStatusRequest roomUpdateStatusRequest ) {
144+ RoomUpdateStatusRequest roomUpdateStatusRequest ) {
131145 participantService .validatePresenter (roomId , memberId );
132146 Room room = roomReader .getById (roomId );
133147
148+ clearCache (room .getId (), room .getSecretCode ());
134149 RoomStatus updateStatus = roomUpdateStatusRequest .roomStatus ();
135150 List <RoomStatus > canUpdateStatus = List .of (RoomStatus .STARTED , RoomStatus .ENDED );
136151 if (!canUpdateStatus .contains (roomUpdateStatusRequest .roomStatus ())) {
@@ -222,4 +237,16 @@ public RoomJoinResponse subscribeRoom(Long roomId, Long memberId) {
222237 currentParticipantManager .addParticipant (roomId , memberId , limit );
223238 return new RoomJoinResponse (currentParticipantManager .getRoomParticipants (roomId ).size ());
224239 }
240+
241+ private void clearCache (Long roomId , String secretCode ) {
242+ Cache roomByIdCache = cacheManager .getCache ("roomById" );
243+ if (roomByIdCache != null ) {
244+ roomByIdCache .evict (roomId );
245+ }
246+
247+ Cache roomBySecretCodeCache = cacheManager .getCache ("roomBySecretCode" );
248+ if (roomBySecretCodeCache != null ) {
249+ roomBySecretCodeCache .evict (secretCode );
250+ }
251+ }
225252}
0 commit comments