Skip to content

Commit

Permalink
Merge branch 'feature-#21' into feature-#28
Browse files Browse the repository at this point in the history
  • Loading branch information
chanwooo committed Nov 10, 2022
2 parents 7caec99 + 7dd36d9 commit 1dd0294
Show file tree
Hide file tree
Showing 14 changed files with 519 additions and 34 deletions.
5 changes: 5 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,12 @@ dependencies {
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'

testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'

testImplementation 'org.springframework.boot:spring-boot-starter-test'

}

tasks.named('test') {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/flab/quing/review/ReviewServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import flab.quing.review.dto.ReviewRequest;
import flab.quing.review.dto.ReviewResponse;
import flab.quing.waiting.NoSuchWaitingException;
import flab.quing.waiting.exception.NoSuchWaitingException;
import flab.quing.waiting.Waiting;
import flab.quing.waiting.WaitingRepository;
import lombok.RequiredArgsConstructor;
Expand Down
8 changes: 5 additions & 3 deletions src/main/java/flab/quing/waiting/QuingService.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@ public interface QuingService {

List<WaitingResponse> getList(long storeId);

Integer countForward(long waitingId);
int countForward(long waitingId);

void sendMessage(long waitingId, String message);

void sendEnterMessage(long waitingId);

void doneWaiting(long waitingId);
void sendRegisterMessage(long waitingId);

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

WaitingResponse cancelWaiting(long waitingId);

}
96 changes: 96 additions & 0 deletions src/main/java/flab/quing/waiting/QuingServiceImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
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 flab.quing.waiting.exception.DuplicateWaitingException;
import flab.quing.waiting.exception.NoSuchWaitingException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Slf4j
@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);

Optional<Waiting> exist = waitingRepository.findByUserIdAndWaitingQueueStatusIs(user.getId(), WaitingQueueStatus.WAITING);
if(exist.isPresent()) {
throw new DuplicateWaitingException();
}
Waiting save = waitingRepository.save(waiting);
return save.toResponse();
}

@Override
public List<WaitingResponse> getList(long storeId) {
return waitingRepository.findAllByStoreIdAndWaitingQueueStatusIs(storeId, WaitingQueueStatus.WAITING)
.stream()
.map(Waiting::toResponse)
.collect(Collectors.toList());
}

@Override
@Transactional
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) {
//ncloud sms
Waiting waiting = waitingRepository.findById(waitingId).orElseThrow(NoSuchWaitingException::new);
User user = waiting.getUser();
System.out.println("phoneNumber = " + user.getPhoneNumber());
System.out.println("message = " + user.getName()+"님 "+message);
}

@Override
public void sendEnterMessage(long waitingId) {
sendMessage(waitingId, "입장해주세요!");
}

@Override
public void sendRegisterMessage(long waitingId) {
sendMessage(waitingId, "등록되었습니다.");
}

@Override
@Transactional
public WaitingResponse doneWaiting(long waitingId) {
Waiting waiting = waitingRepository.findById(waitingId).orElseThrow(NoSuchWaitingException::new);
waiting.done();
return waiting.toResponse();
}

@Override
@Transactional
public WaitingResponse cancelWaiting(long waitingId) {
Waiting waiting = waitingRepository.findById(waitingId).orElseThrow(NoSuchWaitingException::new);
waiting.cancel();
return waiting.toResponse();
}
}
32 changes: 31 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,33 @@ 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;
}

public void cancel() {
waitingQueueStatus = WaitingQueueStatus.CANCELED;
}
}
9 changes: 0 additions & 9 deletions src/main/java/flab/quing/waiting/WaitingQueueRepository.java

This file was deleted.

6 changes: 6 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,12 @@

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

import java.util.List;
import java.util.Optional;

public interface WaitingRepository extends JpaRepository<Waiting, Long> {

Optional<Waiting> findByUserIdAndWaitingQueueStatusIs(long userId, WaitingQueueStatus waitingQueueStatus);

List<Waiting> findAllByStoreIdAndWaitingQueueStatusIs(long storeId, WaitingQueueStatus waitingQueueStatus);
}
2 changes: 0 additions & 2 deletions src/main/java/flab/quing/waiting/dto/WaitingRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,5 @@ public class WaitingRequest {

private long userId;

private String phoneNumber;

private long storeId;
}
7 changes: 6 additions & 1 deletion src/main/java/flab/quing/waiting/dto/WaitingResponse.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package flab.quing.waiting.dto;

import flab.quing.waiting.WaitingQueueStatus;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Data;
Expand All @@ -10,12 +11,16 @@
@Builder
public class WaitingResponse {

private long id;

private String storeName;

private String userName;

private String phoneNumber;

private Integer countForward;
private int callCount;

private WaitingQueueStatus waitingQueueStatus;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package flab.quing.waiting.exception;

public class DuplicateWaitingException extends RuntimeException {
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package flab.quing.waiting;
package flab.quing.waiting.exception;

import java.util.NoSuchElementException;

Expand Down
51 changes: 35 additions & 16 deletions src/test/java/flab/quing/review/ReviewRepositoryTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

import flab.quing.DummyDataMaker;
import flab.quing.store.Store;
import flab.quing.store.StoreRepository;
import flab.quing.user.User;
import flab.quing.user.UserRepository;
import flab.quing.waiting.Waiting;
import flab.quing.waiting.WaitingRepository;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
Expand All @@ -12,22 +16,29 @@

import static org.assertj.core.api.Assertions.assertThat;

@Slf4j
@DataJpaTest
class ReviewRepositoryTest {

@Autowired
ReviewRepository reviewRepository;

@Autowired
UserRepository userRepository;

@Test
void findByWaitingOrderByIdDesc() {
@Autowired
StoreRepository storeRepository;

@Autowired
WaitingRepository waitingRepository;

@Test
void findTopByWaitingIdOrderByIdDesc() {
User user = DummyDataMaker.user();
Store store = DummyDataMaker.store();
Waiting waiting = DummyDataMaker.waiting(user, store);

Review review1 = DummyDataMaker.review(user, waiting, "review1");
reviewRepository.save(review1);
Review review1 = reviewRepository.save(DummyDataMaker.review(user, waiting, "review1"));

Review result1 = reviewRepository.findTopByWaitingIdOrderByIdDesc(waiting.getId()).get();
assertThat(result1.getMessage()).isEqualTo("review1");
Expand All @@ -42,30 +53,38 @@ void findByWaitingOrderByIdDesc() {
}

@Test
void findAllByWaitingStoreAndDeletedIsFalse() {
void findAllByWaitingStoreIdAndDeletedIsFalse() {
//given
User user1 = DummyDataMaker.user();
User user2 = DummyDataMaker.user();
userRepository.saveAll(List.of(user1, user2));

Store store = DummyDataMaker.store();
storeRepository.save(store);

Waiting waiting1 = DummyDataMaker.waiting(user1, store);
Waiting waiting2 = DummyDataMaker.waiting(user2, store);
waitingRepository.saveAll(List.of(waiting1, waiting2));

Review review1 = DummyDataMaker.review(user1, waiting1, "review1");
Review review2 = DummyDataMaker.review(user1, waiting2, "review2");
Review review1 = reviewRepository.save(DummyDataMaker.review(user1, waiting1, "review1"));
log.info("review1 = " + review1);

Review result1 = reviewRepository.save(review1);
Review result2 = reviewRepository.save(review2);
result2.hide();
Review review3 = DummyDataMaker.review(user1, waiting2, "review3");
Review result3 = reviewRepository.save(review3);
Review review2 = reviewRepository.save(DummyDataMaker.review(user2, waiting2, "review2"));
log.info("review2 = " + review2.getDeleted_at());

List<Review> storeReviews = reviewRepository.findAllByWaitingStoreIdAndDeletedIsFalse(store.getId());
List<Review> allByWaitingStoreIdAndDeletedIsFalse = reviewRepository.findAllByWaitingStoreIdAndDeletedIsFalse(store.getId());
System.out.println("allByWaitingStoreIdAndDeletedIsFalse = " + allByWaitingStoreIdAndDeletedIsFalse);
review2.hide();
log.info("review2 = " + review2.getDeleted_at());

Review review3 = reviewRepository.save(DummyDataMaker.review(user2, waiting2, "review3"));
log.info("review3 = " + review3);

storeReviews.stream().forEach(System.out::println);
storeRepository.findAll().forEach(o-> log.info(o.getId().toString()+" "+o));

//when
List<Review> storeReviews = reviewRepository.findAllByWaitingStoreIdAndDeletedIsFalse(store.getId());
log.info("allByWaitingStoreIdAndDeletedIsFalse = " + storeReviews);

//then
assertThat(storeReviews.size()).isEqualTo(2);
assertThat(storeReviews.get(0).getMessage()).isEqualTo("review1");
assertThat(storeReviews.get(1).getMessage()).isEqualTo("review3");
Expand Down
Loading

0 comments on commit 1dd0294

Please sign in to comment.