Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GTB-76 [feat] 웨이팅 신청 방식 변경 #89

Merged
merged 8 commits into from
Sep 24, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -11,12 +12,13 @@
public record SeatingsResponse(List<SeatingResponse> 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();
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -11,12 +12,12 @@
public record WaitingInfosResponse(Integer count, List<WaitingInfosResponse.WaitingInfo> 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())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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;
}
}
Comment on lines +121 to 125
Copy link
Contributor

@yechan-kim yechan-kim Sep 24, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

웨이팅을 30개로 제한을 두는 부분을 추가하신 이유가 있으실까요? 정책이 변경된 건가요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그렇습니다! 해당 부분 노션에 정리되어 있으니 확인 부탁드립니다 😄


public void decreaseWaitingCount() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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;

Expand All @@ -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)
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand All @@ -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)
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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()
Expand All @@ -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();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
Expand Down Expand Up @@ -103,7 +103,7 @@ private void checkDuplicatePubWaiting(Pub pub, User user) {
});
}

private HashMap<String, String> createVariables(String username, Pub pub, Waiting waiting, Integer headCount) {
private HashMap<String, String> createVariables(String username, Pub pub, Waiting waiting, String tableType) {

List<Waiting> waitings = waitingRepository
.findAllByPubAndWaitingStatusOrWaitingStatusOrderByCreatedAtAsc(pub, Status.WAITING, Status.AVAILABLE);
Expand All @@ -113,7 +113,7 @@ private HashMap<String, String> createVariables(String username, Pub pub, Waitin
HashMap<String, String> 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()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,12 @@ public List<WaitingHistoryResponse> 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();
}
Expand Down