1) 프로젝트 진행도
- 가게 CRUD 구현
가게 생성가게 수정가게 단건 조회(메뉴 같이 조회)가게 이름 검색(이름으로 검색히 연관된 가게 다 조회)가게 페업
- 메뉴 CRUD 구현
메뉴 생성(1일차)메뉴 삭제메뉴 수정(2일차)
- 장바구니 (쿠키 활용)
- 한 번에 주문
- 가게 단건 조회 (@Service)
public StoreMenuResponseDto findStore(Long storeId, User loginUser) {
// 가게 Id 확인
Store findStore = storeRepository.findByStoreOrElseThrow(storeId);
if(findStore.getStatus() == StoreStatus.CLOSURE){
if(loginUser.getAuthority() != Authority.OWNER || !findStore.getUser().getId().equals(loginUser.getId())) {
throw new CustomException(ErrorCode.STORE_NOT_FOUND);
}
}
// 엔티티 -> Dto 변환
List<MenuResponseDto> menuDtos = new ArrayList<>();
for (Menu menu : findStore.getMenus()) {
if (menu.getStatus() != MenuStatus.DELETED) {
menuDtos.add(new MenuResponseDto(
menu.getId(),
menu.getMenuName(),
menu.getPrice(),
menu.getStatus()
));
}
}
return StoreMenuResponseDto.fromStoreMenu(findStore, menuDtos);
}
- 가게를 단건 조회 할 시 삭제된 메뉴는 같이 보이면 안되기 때문에 if문을 넣어주어 조건을 추가했다.
- enum으로 되어있는 Status가 DELETED라면 아닐 때만 메뉴가 보이게 했다.
- 또한 가게가 ClOSURE 라면 가게 주인인 사람은 보이게 조건을 넣어주었다.
- 가게 폐업(@Service)
@Transactional
public void closeStore(Long storeId, Long userId) {
//가게 조회
Store findStore = storeRepository.findByStoreOrElseThrow(storeId);
//사용자 검증
if(!findStore.getUser().getId().equals(userId)){
throw new CustomException(ErrorCode.FORBIDDEN_PERMISSION);
}
// 상태 토글
if (findStore.getStatus() == StoreStatus.OPEN) {
findStore.setStatus(StoreStatus.CLOSURE);
} else {
findStore.setStatus(StoreStatus.OPEN);
}
}
- 가게 폐업을 하려면 일단 입력한 가게가 있는지 확인하고 그 가게가 본인의 가게인지도 확인해야한다.
- 로그인한 Session을 이용해서 login 유저의 getId()로 id를 가져오고 그 아이디를 넣어주어 조회한 가게의 UserId 와 로그인한 UserId가 같은 지 검증을 한다.
- 그리고 가계 폐업은 softdelete이기 때문에 상태를 변화시켜주고 조회에서 할 때 걸러주면된다.
- 가게 주인은 혹시 가게를 다시 개장할 수 있을 가능성을 고려해 토글형식으로 만들었다.
- 원래 코드에 if-else를 쓰면 좋지 않으나 토글 방식은 아직 else를 안 쓰고 하는 방식을 고려하지 못했다.
- 메뉴 수정은 전 날 작성한 가게 수정과 거의 흡사하기에 설명 생략.
- 메뉴 삭제
@Transactional
public void deleteMenu(Long storeId, Long menuId, Long userId) {
//가게 조회
Store findStore = storeRepository.findByStoreOrElseThrow(storeId);
//사용자 검증
if(!findStore.getUser().getId().equals(userId)){
throw new CustomException(ErrorCode.FORBIDDEN_OWNER);
}
//메뉴 조회
Menu findMenu = menuRepository.findByMenuOrElseThrow(menuId);
//상태 토글
if(findMenu.getStatus() == MenuStatus.SELLING) {
findMenu.setStatus(MenuStatus.DELETED);
} else {
findMenu.setStatus(MenuStatus.SELLING);
}
}
- 역시 메뉴 삭제 또한 가게 주인이 추가한 메뉴만 삭제할 수 있기에 가게 조회 및 사용자 검증을 하였다.
- 메뉴를 조회하여 삭제할 메뉴가 있는지 확인하고 메뉴 또한 softdelete이기에 토글로 상태만 변화시켜주었다.
- 남은 파트는 Cookie를 활용한 장바구니 기능인데 Cookie를 많이 접해보지 않아 이번 기회에 제대로 알아가야겠다.
'TIL > Project' 카테고리의 다른 글
[KPT 회고록] (project : 먹GO) (1) | 2024.12.09 |
---|---|
TIL 2024-12-08 (Trouble Shooting (먹GO) ) (0) | 2024.12.08 |
TIL 2024-12-04 (outsourcing 1일차) (1) | 2024.12.04 |
TIL 2024-11-28 (Trouble Shooting (통화 환율) ) (2) | 2024.11.28 |
[KPT 회고록] (project : todo-log) (0) | 2024.11.25 |