diff --git a/src/main/java/site/gachontable/gachontablebe/domain/admin/presentation/dto/response/SeatingsResponse.java b/src/main/java/site/gachontable/gachontablebe/domain/admin/presentation/dto/response/SeatingsResponse.java index 0f3b85a0..1e7fff62 100644 --- a/src/main/java/site/gachontable/gachontablebe/domain/admin/presentation/dto/response/SeatingsResponse.java +++ b/src/main/java/site/gachontable/gachontablebe/domain/admin/presentation/dto/response/SeatingsResponse.java @@ -2,6 +2,7 @@ import lombok.Builder; import site.gachontable.gachontablebe.domain.seating.domain.Seating; +import site.gachontable.gachontablebe.domain.shared.Table; import java.util.List; import java.util.UUID; @@ -11,12 +12,13 @@ public record SeatingsResponse(List seatings) { @Builder - public record SeatingResponse(Integer tableId, Integer tableNum, String exitTime, UUID waitingId) { + public record SeatingResponse(Integer seatingId, Integer seatingNum, Table tableType, String exitTime, UUID waitingId) { public static SeatingResponse from(Seating seating) { return SeatingResponse.builder() - .tableId(seating.getSeatingId()) - .tableNum(seating.getSeatingNum()) + .seatingId(seating.getSeatingId()) + .seatingNum(seating.getSeatingNum()) + .tableType(seating.getTableType()) .exitTime(seating.getExitTime().format(WITH_WEEKDAY)) .waitingId(seating.getWaiting().getWaitingId()) .build(); diff --git a/src/main/java/site/gachontable/gachontablebe/domain/admin/presentation/dto/response/WaitingInfosResponse.java b/src/main/java/site/gachontable/gachontablebe/domain/admin/presentation/dto/response/WaitingInfosResponse.java index 78670f25..82654bab 100644 --- a/src/main/java/site/gachontable/gachontablebe/domain/admin/presentation/dto/response/WaitingInfosResponse.java +++ b/src/main/java/site/gachontable/gachontablebe/domain/admin/presentation/dto/response/WaitingInfosResponse.java @@ -1,6 +1,7 @@ package site.gachontable.gachontablebe.domain.admin.presentation.dto.response; import lombok.Builder; +import site.gachontable.gachontablebe.domain.shared.Table; import site.gachontable.gachontablebe.domain.waiting.domain.Waiting; import site.gachontable.gachontablebe.domain.waiting.type.Status; @@ -11,12 +12,12 @@ public record WaitingInfosResponse(Integer count, List waitingInfos) { @Builder - public record WaitingInfo(String username, LocalDateTime time, Integer headCount, String tel, UUID waitingId, Status waitingStatus) { + public record WaitingInfo(String username, LocalDateTime time, Table tableType, String tel, UUID waitingId, Status waitingStatus) { public static WaitingInfo of(String userName, Waiting waiting) { return WaitingInfo.builder() .username(userName) .time(waiting.getCreatedAt()) - .headCount(waiting.getHeadCount()) + .tableType(waiting.getTableType()) .tel(waiting.getTel()) .waitingId(waiting.getWaitingId()) .waitingStatus(waiting.getWaitingStatus()) diff --git a/src/main/java/site/gachontable/gachontablebe/domain/admin/usecase/EnterUser.java b/src/main/java/site/gachontable/gachontablebe/domain/admin/usecase/EnterUser.java index a15c121e..98f5f8e1 100644 --- a/src/main/java/site/gachontable/gachontablebe/domain/admin/usecase/EnterUser.java +++ b/src/main/java/site/gachontable/gachontablebe/domain/admin/usecase/EnterUser.java @@ -59,6 +59,7 @@ private void createSeating(Pub pub, Waiting waiting, Integer seatingNum) { Seating seating = Seating.create( seatingNum, + waiting.getTableType(), LocalDateTime.now().plusHours(pub.getHours()), pub, waiting, diff --git a/src/main/java/site/gachontable/gachontablebe/domain/pub/domain/Pub.java b/src/main/java/site/gachontable/gachontablebe/domain/pub/domain/Pub.java index 8b1eb55f..3e0dd3b5 100644 --- a/src/main/java/site/gachontable/gachontablebe/domain/pub/domain/Pub.java +++ b/src/main/java/site/gachontable/gachontablebe/domain/pub/domain/Pub.java @@ -14,6 +14,7 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Pub { + private static final Integer MAX_WAITING_COUNT = 30; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -114,6 +115,13 @@ public Pub(String pubName, public void increaseWaitingCount() { this.waitingCount += 1; + checkMaxWaitingCount(); + } + + private void checkMaxWaitingCount() { + if (this.waitingCount >= MAX_WAITING_COUNT) { + this.waitingStatus = false; + } } public void decreaseWaitingCount() { diff --git a/src/main/java/site/gachontable/gachontablebe/domain/seating/domain/Seating.java b/src/main/java/site/gachontable/gachontablebe/domain/seating/domain/Seating.java index 6bca4241..3bb2bc10 100644 --- a/src/main/java/site/gachontable/gachontablebe/domain/seating/domain/Seating.java +++ b/src/main/java/site/gachontable/gachontablebe/domain/seating/domain/Seating.java @@ -9,6 +9,7 @@ import site.gachontable.gachontablebe.domain.pub.domain.Pub; import site.gachontable.gachontablebe.domain.user.domain.User; import site.gachontable.gachontablebe.domain.waiting.domain.Waiting; +import site.gachontable.gachontablebe.domain.shared.Table; import java.time.LocalDateTime; @@ -24,6 +25,10 @@ public class Seating { @Column(nullable = false) private Integer seatingNum; + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private Table tableType; + @Column(nullable = false) private LocalDateTime exitTime; @@ -39,9 +44,10 @@ public class Seating { @JoinColumn(name = "user_id") private User user; - public static Seating create(Integer seatingNum, LocalDateTime exitTime, Pub pub, Waiting waiting, User user) { + public static Seating create(Integer seatingNum, Table tableType, LocalDateTime exitTime, Pub pub, Waiting waiting, User user) { return Seating.builder() .seatingNum(seatingNum) + .tableType(tableType) .exitTime(exitTime) .pub(pub) .waiting(waiting) @@ -50,8 +56,9 @@ public static Seating create(Integer seatingNum, LocalDateTime exitTime, Pub pub } @Builder - public Seating(Integer seatingNum, LocalDateTime exitTime, Pub pub, Waiting waiting, User user) { + public Seating(Integer seatingNum, Table tableType, LocalDateTime exitTime, Pub pub, Waiting waiting, User user) { this.seatingNum = seatingNum; + this.tableType = tableType; this.exitTime = exitTime; this.pub = pub; this.waiting = waiting; diff --git a/src/main/java/site/gachontable/gachontablebe/domain/shared/Table.java b/src/main/java/site/gachontable/gachontablebe/domain/shared/Table.java new file mode 100644 index 00000000..579d4e64 --- /dev/null +++ b/src/main/java/site/gachontable/gachontablebe/domain/shared/Table.java @@ -0,0 +1,13 @@ +package site.gachontable.gachontablebe.domain.shared; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum Table { + BASIC("4인 테이블 (1~5인)"), + PARTY("8인 테이블 (5~8인)"); + + private final String nameKo; +} diff --git a/src/main/java/site/gachontable/gachontablebe/domain/waiting/domain/Waiting.java b/src/main/java/site/gachontable/gachontablebe/domain/waiting/domain/Waiting.java index 06c1ef34..192a0598 100644 --- a/src/main/java/site/gachontable/gachontablebe/domain/waiting/domain/Waiting.java +++ b/src/main/java/site/gachontable/gachontablebe/domain/waiting/domain/Waiting.java @@ -8,6 +8,7 @@ import site.gachontable.gachontablebe.domain.user.domain.User; import site.gachontable.gachontablebe.domain.waiting.type.Position; import site.gachontable.gachontablebe.domain.waiting.type.Status; +import site.gachontable.gachontablebe.domain.shared.Table; import java.util.Objects; import java.util.UUID; @@ -26,8 +27,9 @@ public class Waiting extends BaseTimeEntity { @Column(nullable = false) private Position waitingType; + @Enumerated(EnumType.STRING) @Column(nullable = false) - private Integer headCount; + private Table tableType; @Enumerated(EnumType.STRING) @Column @@ -48,10 +50,10 @@ public boolean matchesUser(User user) { return Objects.equals(this.user, user); } - public static Waiting create(Position waitingType, Integer headCount, Status waitingStatus, String tel, User user, Pub pub) { + public static Waiting create(Position waitingType, Table tableType, Status waitingStatus, String tel, User user, Pub pub) { return Waiting.builder() .waitingType(waitingType) - .headCount(headCount) + .tableType(tableType) .waitingStatus(waitingStatus) .tel(tel) .user(user) @@ -60,9 +62,9 @@ public static Waiting create(Position waitingType, Integer headCount, Status wai } @Builder - public Waiting(Position waitingType, Integer headCount, Status waitingStatus, String tel, User user, Pub pub) { + public Waiting(Position waitingType, Table tableType, Status waitingStatus, String tel, User user, Pub pub) { this.waitingType = waitingType; - this.headCount = headCount; + this.tableType = tableType; this.waitingStatus = waitingStatus; this.tel = tel; this.user = user; diff --git a/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/request/RemoteWaitingRequest.java b/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/request/RemoteWaitingRequest.java index 6d47781b..bb61cb92 100644 --- a/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/request/RemoteWaitingRequest.java +++ b/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/request/RemoteWaitingRequest.java @@ -1,5 +1,7 @@ package site.gachontable.gachontablebe.domain.waiting.presentation.dto.request; +import site.gachontable.gachontablebe.domain.shared.Table; + public record RemoteWaitingRequest(Integer pubId, - Integer headCount) { + Table tableType) { } diff --git a/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/response/StatusResponse.java b/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/response/StatusResponse.java index 9383a856..9d350f18 100644 --- a/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/response/StatusResponse.java +++ b/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/response/StatusResponse.java @@ -2,6 +2,7 @@ import lombok.Builder; import site.gachontable.gachontablebe.domain.pub.domain.Pub; +import site.gachontable.gachontablebe.domain.shared.Table; import site.gachontable.gachontablebe.domain.waiting.domain.Waiting; import java.util.UUID; @@ -14,7 +15,7 @@ public record StatusResponse(UUID waitingId, String orderStatus, Integer order, String createdAt, - Integer headCount) { + Table tableType) { public static StatusResponse of(Waiting waiting, Pub pub, Integer order) { return StatusResponse.builder() @@ -23,7 +24,7 @@ public static StatusResponse of(Waiting waiting, Pub pub, Integer order) { .orderStatus(waiting.getWaitingStatus().getStatusKo()) .order(order) .createdAt(waiting.getCreatedAt().format(WITH_WEEKDAY)) - .headCount(waiting.getHeadCount()) + .tableType(waiting.getTableType()) .build(); } diff --git a/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/response/WaitingHistoryResponse.java b/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/response/WaitingHistoryResponse.java index 1070d476..2d65c5cc 100644 --- a/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/response/WaitingHistoryResponse.java +++ b/src/main/java/site/gachontable/gachontablebe/domain/waiting/presentation/dto/response/WaitingHistoryResponse.java @@ -24,7 +24,7 @@ public static WaitingHistoryResponse of(Waiting waiting, Seating seating) { .pubName(waiting.getPub().getPubName()) .status(waiting.getWaitingStatus()) .enteredTime(waiting.getUpdatedAt().format(WITH_WEEKDAY)) - .exitTime(seating.getExitTime().format(WITH_WEEKDAY)) + .exitTime(seating != null ? seating.getExitTime().format(WITH_WEEKDAY) : null) .build(); } } diff --git a/src/main/java/site/gachontable/gachontablebe/domain/waiting/usecase/CreateWaitingImpl.java b/src/main/java/site/gachontable/gachontablebe/domain/waiting/usecase/CreateWaitingImpl.java index 4b6a9c54..474a06cf 100644 --- a/src/main/java/site/gachontable/gachontablebe/domain/waiting/usecase/CreateWaitingImpl.java +++ b/src/main/java/site/gachontable/gachontablebe/domain/waiting/usecase/CreateWaitingImpl.java @@ -49,11 +49,11 @@ public WaitingResponse execute(AuthDetails authDetails, RemoteWaitingRequest req checkPreConditions(pub, user); Waiting waiting = waitingRepository.save( - Waiting.create(Position.REMOTE, request.headCount(), Status.WAITING, user.getUserTel(), user, pub)); + Waiting.create(Position.REMOTE, request.tableType(), Status.WAITING, user.getUserTel(), user, pub)); pub.increaseWaitingCount(); - sendBiztalk.execute(TEMPLATE_CODE, user.getUserTel(), createVariables(user.getUsername(), pub, waiting, request.headCount())); + sendBiztalk.execute(TEMPLATE_CODE, user.getUserTel(), createVariables(user.getUsername(), pub, waiting, request.tableType().getNameKo())); return new WaitingResponse(true, SuccessCode.REMOTE_WAITING_SUCCESS.getMessage()); } @@ -103,7 +103,7 @@ private void checkDuplicatePubWaiting(Pub pub, User user) { }); } - private HashMap createVariables(String username, Pub pub, Waiting waiting, Integer headCount) { + private HashMap createVariables(String username, Pub pub, Waiting waiting, String tableType) { List waitings = waitingRepository .findAllByPubAndWaitingStatusOrWaitingStatusOrderByCreatedAtAsc(pub, Status.WAITING, Status.AVAILABLE); @@ -113,7 +113,7 @@ private HashMap createVariables(String username, Pub pub, Waitin HashMap variables = new HashMap<>(); variables.put("#{username}", username); variables.put("#{pub}", pub.getPubName()); - variables.put("#{headCount}", String.valueOf(headCount)); + variables.put("#{headCount}", tableType); variables.put("#{order}", order); variables.put("#{callNumber}", callNumber); variables.put("#{waitingId}", String.valueOf(waiting.getWaitingId())); diff --git a/src/main/java/site/gachontable/gachontablebe/domain/waiting/usecase/GetWaitingHistory.java b/src/main/java/site/gachontable/gachontablebe/domain/waiting/usecase/GetWaitingHistory.java index f917ce68..ca3b8744 100644 --- a/src/main/java/site/gachontable/gachontablebe/domain/waiting/usecase/GetWaitingHistory.java +++ b/src/main/java/site/gachontable/gachontablebe/domain/waiting/usecase/GetWaitingHistory.java @@ -32,9 +32,12 @@ public List execute(AuthDetails authDetails) { return waitings.stream() .map(waiting -> { - Seating seating = seatingRepository.findByWaiting(waiting) - .orElseThrow(SeatingNotFoundException::new); - return WaitingHistoryResponse.of(waiting, seating); + if (waiting.getWaitingStatus() == Status.ENTERED) { + Seating seating = seatingRepository.findByWaiting(waiting) + .orElseThrow(SeatingNotFoundException::new); + return WaitingHistoryResponse.of(waiting, seating); + } + return WaitingHistoryResponse.of(waiting, null); }) .toList(); }