Skip to content

Commit

Permalink
#21-QuingService 일부 구현
Browse files Browse the repository at this point in the history
append
getList
countForward
doneWaiting
  • Loading branch information
chanwooo committed Oct 21, 2022
1 parent 12faf2f commit 2a16950
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/main/java/flab/quing/waiting/QuingService.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public interface QuingService {

void sendEnterMessage(long waitingId);

void doneWaiting(long waitingId);
WaitingResponse doneWaiting(long waitingId);

void cancelWaiting(long waitingId);

Expand Down
75 changes: 75 additions & 0 deletions src/main/java/flab/quing/waiting/QuingServiceImpl.java
Original file line number Diff line number Diff line change
@@ -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<WaitingResponse> 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<WaitingResponse> 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) {

}
}
28 changes: 27 additions & 1 deletion src/main/java/flab/quing/waiting/Waiting.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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;
}
}
3 changes: 3 additions & 0 deletions src/main/java/flab/quing/waiting/WaitingRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface WaitingRepository extends JpaRepository<Waiting, Long> {

List<Waiting> findAllByStoreIdAndWaitingQueueStatusIs(long storeId, WaitingQueueStatus waitingQueueStatus);
}
4 changes: 2 additions & 2 deletions src/main/java/flab/quing/waiting/dto/WaitingResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 2a16950

Please sign in to comment.