1) 프로젝트 진행도
- 가게 CRUD 구현
가게 생성가게 수정- 가게 단건 조회(메뉴 같이 조회)
가게 이름 검색(이름으로 검색히 연관된 가게 다 조회)- 가게 페업
- 메뉴 CRUD 구현
메뉴 생성(1일차)- 메뉴 삭제
- 메뉴 수정
- 장바구니 (쿠키 활용)
- 한 번에 주문
모든 예외처리는 임시로 NOT_FOUND_USER로만 해놓은 겁니다.
- 가게 생성
- 가게는 오픈 및 마감 시간이 있습니다.
- 가게는 최소 주문 금액이 있습니다.
- 사장님은 최대 3개의 가게만 소지 가능.
//권한 검증
if(!loginUser.getAuthority().equals(Authority.OWNER)) {
throw new CustomException(ErrorCode.NOT_FOUND_USER);
}
//가게 수 확인
long activeStoreCount = storeRepository.countByUserAndStatusNot(loginUser, StoreStatus.CLOSURE);
if(activeStoreCount >= 3) {
throw new CustomException(ErrorCode.NOT_FOUND_USER);
}
//오픈 시간, 마감 시간
if(requestDto.getOpenTime().isAfter(requestDto.getCloseTime())) {
throw new CustomException(ErrorCode.NOT_FOUND_USER);
}
- 오픈 및 마감 시간은 LocalTime으로 타입을 잡아주어 날짜 상관없이 시간만 입력하게 했으며 오픈 시간이 더 느리면 예외처리 되도록 코드를 작성하였다.
- 가게 수는 CLOSURE 폐업인 것을 제외하고 3개 이상이면 예외처리가 발생하게 코딩을 하였다.
- 권한 인증은 로그인한 유저의 enum으로 되어있는 Authority를 확인하여 OWNER와 같으면 가게를 생성할 수 있게 권한 설정을 했다.
- 가게 수정
- 본인 가게만 수정 가능하다.
- 가게 이름, 최소주문가격, 오픈시간, 클로즈시간을 수정할 수 있다.
//가게 ID 확인
if(findStore.getId() == null) {
throw new CustomException(ErrorCode.NOT_FOUND_STORE);
}
//본인의 가게 검증
if(!findStore.getUser().getId().equals(loginUserId)) {
throw new CustomException(ErrorCode.NOT_FOUND_USER);
}
if(name == null || minimumAmount == null || openTime == null || closeTime == null) {
throw new CustomException(ErrorCode.NOT_FOUND_USER);
}
- 맨 처음 수정할 가게가 있는지 확인을 하고 다음으로 본인의 가게가 맞는지 검증을 실시한다.
- 그 뒤로 수정할 때 null 값을 못넣게 조건을 달아주었다.
- 가게 이름 검색
- 이름으로 검색할 시 연관된 모든 가게가 조회되도록 해야한다.
- ex)) 스타벅스 = 스타벅스 강남점, 스타벅스 건대점, 스타벅스 홍대점
@Query("SELECT new com.example.outsourcing.store.dto.StoreResponseDto( " +
"s.id, s.name, s.minimumAmount, s.openTime, s.closeTime, s.status) " +
"FROM store s " +
"WHERE LOWER(s.name) LIKE LOWER(CONCAT('%', :name, '%'))")
List<StoreResponseDto> findByNameContainingIgnoreCase(@Param("name") String name);
- 서비스와 컨트롤러에선 그저 호출만 해주었기에 JPQL만 보면 된다.
- LOWER은 대소문자 구분없이 검색을 도와준다.
- SELETE 부분은 내가 조회하고자 하는 모든 데이터를 넣어주면 된다.
- 메뉴 생성
- 메뉴 생성은 사장님만 할 수 있습니다.
- 사장님은 본인 가게에만 메뉴를 등록할 수 있습니다.
//가게 조회
Store store = storeRepository.findByOrElseThrow(storeId);
//사장님 권한 확인
if(!store.getUser().getId().equals(userid)) {
throw new CustomException(ErrorCode.NOT_FOUND_USER);
}
Menu menu = new Menu(
store,
requestDto.getMenuName(),
requestDto.getPrice(),
MenuStatus.SELLING
);
- !store.getUser().getId().equals(userId)는 가게 주인의 아이디와 로그인한 유저의 아이디가 같은지 확인하여 검증을 하였다.
'TIL > Project' 카테고리의 다른 글
TIL 2024-12-08 (Trouble Shooting (먹GO) ) (0) | 2024.12.08 |
---|---|
TIL 2024-12-05 (outsourcing 2일차) (2) | 2024.12.05 |
TIL 2024-11-28 (Trouble Shooting (통화 환율) ) (2) | 2024.11.28 |
[KPT 회고록] (project : todo-log) (0) | 2024.11.25 |
TIL 2024-11-21 (todo-log 3일차) (0) | 2024.11.21 |