-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature: 처리 제한을 초과한 사용자의 요청은 대기열로 들어가야 한다. (#36)
- Loading branch information
Showing
7 changed files
with
97 additions
and
0 deletions.
There are no files selected for viewing
5 changes: 5 additions & 0 deletions
5
src/main/java/com/thirdparty/ticketing/domain/waitingroom/RunningRoom.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package com.thirdparty.ticketing.domain.waitingroom; | ||
|
||
public interface RunningRoom { | ||
boolean contains(UserInfo userInfo); | ||
} |
8 changes: 8 additions & 0 deletions
8
src/main/java/com/thirdparty/ticketing/domain/waitingroom/UserInfo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package com.thirdparty.ticketing.domain.waitingroom; | ||
|
||
import lombok.Data; | ||
|
||
@Data | ||
public class UserInfo { | ||
private final String email; | ||
} |
27 changes: 27 additions & 0 deletions
27
src/main/java/com/thirdparty/ticketing/domain/waitingroom/WaitingAspect.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package com.thirdparty.ticketing.domain.waitingroom; | ||
|
||
import org.aspectj.lang.ProceedingJoinPoint; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.security.core.Authentication; | ||
import org.springframework.security.core.context.SecurityContextHolder; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
|
||
@RequiredArgsConstructor | ||
public class WaitingAspect { | ||
|
||
private final WaitingManager waitingManager; | ||
|
||
private Object waitingRequest(ProceedingJoinPoint joinPoint) throws Throwable { | ||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); | ||
String email = (String) authentication.getPrincipal(); | ||
UserInfo userInfo = new UserInfo(email); | ||
if (waitingManager.isReadyToHandle(userInfo)) { | ||
return joinPoint.proceed(); | ||
} else { | ||
long waitingNumber = waitingManager.enterWaitingRoom(userInfo); | ||
return ResponseEntity.status(HttpStatus.TEMPORARY_REDIRECT).body(waitingNumber); | ||
} | ||
} | ||
} |
9 changes: 9 additions & 0 deletions
9
src/main/java/com/thirdparty/ticketing/domain/waitingroom/WaitingCounter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.thirdparty.ticketing.domain.waitingroom; | ||
|
||
public interface WaitingCounter { | ||
|
||
/** | ||
* @return 사용자에게 부여되는 고유한 카운트를 반환한다. | ||
*/ | ||
long getNextCount(); | ||
} |
12 changes: 12 additions & 0 deletions
12
src/main/java/com/thirdparty/ticketing/domain/waitingroom/WaitingLine.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package com.thirdparty.ticketing.domain.waitingroom; | ||
|
||
public interface WaitingLine { | ||
|
||
/** | ||
* 사용자를 대기열에 넣는다. | ||
* | ||
* @param userInfo 사용자의 정보 | ||
* @param waitingCounter 사용자의 고유한 카운트 값 | ||
*/ | ||
void enter(UserInfo userInfo, long waitingCounter); | ||
} |
18 changes: 18 additions & 0 deletions
18
src/main/java/com/thirdparty/ticketing/domain/waitingroom/WaitingManager.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package com.thirdparty.ticketing.domain.waitingroom; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
|
||
@RequiredArgsConstructor | ||
public class WaitingManager { | ||
|
||
private final RunningRoom runningRoom; | ||
private final WaitingRoom waitingRoom; | ||
|
||
public boolean isReadyToHandle(UserInfo userInfo) { | ||
return runningRoom.contains(userInfo); | ||
} | ||
|
||
public long enterWaitingRoom(UserInfo userInfo) { | ||
return waitingRoom.enter(userInfo); | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
src/main/java/com/thirdparty/ticketing/domain/waitingroom/WaitingRoom.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package com.thirdparty.ticketing.domain.waitingroom; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
|
||
@RequiredArgsConstructor | ||
public abstract class WaitingRoom { | ||
|
||
private final WaitingLine waitingLine; | ||
private final WaitingCounter waitingCounter; | ||
|
||
/** | ||
* 사용자를 대기열에 넣고, 대기공간에 보관한다. | ||
* | ||
* @param userInfo 사용자의 정보 | ||
* @return 사용자의 남은 순번을 반환한다. | ||
*/ | ||
public abstract long enter(UserInfo userInfo); | ||
} |