From 2a16950c59142364b3acbc42763bd68c940c7112 Mon Sep 17 00:00:00 2001 From: Chanwookim Date: Sat, 22 Oct 2022 03:29:21 +0900 Subject: [PATCH] =?UTF-8?q?#21-QuingService=20=EC=9D=BC=EB=B6=80=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20append=20getList=20countForward=20doneWait?= =?UTF-8?q?ing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/flab/quing/waiting/QuingService.java | 2 +- .../flab/quing/waiting/QuingServiceImpl.java | 75 +++++++++++++++++++ src/main/java/flab/quing/waiting/Waiting.java | 28 ++++++- .../flab/quing/waiting/WaitingRepository.java | 3 + .../quing/waiting/dto/WaitingResponse.java | 4 +- 5 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 src/main/java/flab/quing/waiting/QuingServiceImpl.java diff --git a/src/main/java/flab/quing/waiting/QuingService.java b/src/main/java/flab/quing/waiting/QuingService.java index 532babc..736fe16 100644 --- a/src/main/java/flab/quing/waiting/QuingService.java +++ b/src/main/java/flab/quing/waiting/QuingService.java @@ -17,7 +17,7 @@ public interface QuingService { void sendEnterMessage(long waitingId); - void doneWaiting(long waitingId); + WaitingResponse doneWaiting(long waitingId); void cancelWaiting(long waitingId); diff --git a/src/main/java/flab/quing/waiting/QuingServiceImpl.java b/src/main/java/flab/quing/waiting/QuingServiceImpl.java new file mode 100644 index 0000000..64cf1a3 --- /dev/null +++ b/src/main/java/flab/quing/waiting/QuingServiceImpl.java @@ -0,0 +1,75 @@ +package flab.quing.waiting; + +import flab.quing.store.NoSuchStoreException; +import flab.quing.store.Store; +import flab.quing.store.StoreRepository; +import flab.quing.store.exception.NoSuchUserException; +import flab.quing.user.User; +import flab.quing.user.UserRepository; +import flab.quing.waiting.dto.WaitingRequest; +import flab.quing.waiting.dto.WaitingResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@Service +public class QuingServiceImpl implements QuingService { + + private final WaitingRepository waitingRepository; + private final UserRepository userRepository; + private final StoreRepository storeRepository; + + @Override + @Transactional + public WaitingResponse append(WaitingRequest waitingRequest) { + User user = userRepository.findById(waitingRequest.getUserId()).orElseThrow(NoSuchUserException::new); + Store store = storeRepository.findById(waitingRequest.getStoreId()).orElseThrow(NoSuchStoreException::new); + Waiting waiting = Waiting.of(user, store); + Waiting save = waitingRepository.save(waiting); + + return save.toResponse(); + } + + @Override + public List getList(long storeId) { +// return waitingRepository.findAllByStoreId(storeId) + return waitingRepository.findAllByStoreIdAndWaitingQueueStatusIs(storeId, WaitingQueueStatus.WAITING) + .stream() + .map(Waiting::toResponse) + .collect(Collectors.toList()); + } + + @Override + public int countForward(long waitingId) { + Waiting waiting = waitingRepository.findById(waitingId).orElseThrow(NoSuchWaitingException::new); + List list = getList(waiting.getStore().getId()); + return list.indexOf(waiting.toResponse()); + } + + @Override + public void sendMessage(long waitingId, String message) { + + } + + @Override + public void sendEnterMessage(long waitingId) { + + } + + @Override + @Transactional + public WaitingResponse doneWaiting(long waitingId) { + Waiting waiting = waitingRepository.findById(waitingId).orElseThrow(NoSuchWaitingException::new); + waiting.done(); + return waiting.toResponse(); + } + + @Override + public void cancelWaiting(long waitingId) { + + } +} diff --git a/src/main/java/flab/quing/waiting/Waiting.java b/src/main/java/flab/quing/waiting/Waiting.java index 50fe601..abad068 100644 --- a/src/main/java/flab/quing/waiting/Waiting.java +++ b/src/main/java/flab/quing/waiting/Waiting.java @@ -1,8 +1,9 @@ package flab.quing.waiting; -import flab.quing.store.Store; import flab.quing.entity.BaseEntity; +import flab.quing.store.Store; import flab.quing.user.User; +import flab.quing.waiting.dto.WaitingResponse; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -32,4 +33,29 @@ public class Waiting extends BaseEntity { private WaitingQueueStatus waitingQueueStatus; + + public static Waiting of(User user, Store store) { + return Waiting.builder() + .user(user) + .store(store) + .waitingQueueStatus(WaitingQueueStatus.WAITING) + .build(); + } + + public WaitingResponse toResponse() { + WaitingResponse waitingResponse = WaitingResponse.builder() + .id(getId()) + .storeName(store.getName()) + .userName(user.getName()) + .phoneNumber(user.getPhoneNumber()) + .waitingQueueStatus(waitingQueueStatus) + .callCount(callCount) + .build(); + + return waitingResponse; + } + + public void done() { + waitingQueueStatus = WaitingQueueStatus.DONE; + } } diff --git a/src/main/java/flab/quing/waiting/WaitingRepository.java b/src/main/java/flab/quing/waiting/WaitingRepository.java index 4c41574..ffc860d 100644 --- a/src/main/java/flab/quing/waiting/WaitingRepository.java +++ b/src/main/java/flab/quing/waiting/WaitingRepository.java @@ -2,6 +2,9 @@ import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface WaitingRepository extends JpaRepository { + List findAllByStoreIdAndWaitingQueueStatusIs(long storeId, WaitingQueueStatus waitingQueueStatus); } diff --git a/src/main/java/flab/quing/waiting/dto/WaitingResponse.java b/src/main/java/flab/quing/waiting/dto/WaitingResponse.java index b4b5568..8d53dd3 100644 --- a/src/main/java/flab/quing/waiting/dto/WaitingResponse.java +++ b/src/main/java/flab/quing/waiting/dto/WaitingResponse.java @@ -11,14 +11,14 @@ @Builder public class WaitingResponse { + private long id; + private String storeName; private String userName; private String phoneNumber; - private int countForward; - private int callCount; private WaitingQueueStatus waitingQueueStatus;