저번글에서 메뉴에 관련된 기능은 모두 구현을 했으니 이번에는 매장정보 수정과
고객이 작성한 리뷰에 답글을 다는 기능을 구현해보도록 하겠습니다
매장정보수정은 메뉴수정과 비슷하지만 더 간단합니다 메뉴수정의 경우 옵션의 존재로
인해 고려해야할 부분이 많아 코드가 복잡했지만 매장의 경우 사용자가 입력한 데이터를
그대로 테이블에 업데이트 해주기만 하면 됩니다
리뷰답글도 마찬가지입니다 다만 리뷰답글의 경우 INSERT가 아닌 UPDATE인데 우리가
기존에 REVIEW테이블을 생성했을때 BOSS_COMMENT라는 컬럼을 추가한걸 기억하실겁니다
이는 한개의 리뷰에는 한개의 답글만 가지는 1:1의 관계이기 때문에 추가적인 테이블을
만들지 않았기 때문입니다. 만약 한개의 리뷰에 여러개의 답글을 가지는 1:N의 관계라면
테이블을 추가해 INSERT문을 사용해야 하지만 여기서는 1:1의 관계이므로 답글을
기존 REVIEW테이블에 추가해야하므로 UPDATE문을 사용합니다
//매장 정보 수정
@PatchMapping("/api/admin/management/storeInfo")
public ResponseEntity<StoreDto> storeInfoUpdate(StoreDto storeDto, MultipartFile file) throws IOException {
if(!file.isEmpty()){
String img = fileUpload.uploadImg(file, "storeImg");
storeDto.setStoreImg(img);
storeDto.setStoreThumb(img);
}
System.out.println(storeDto.toString());
adminService.storeInfoUpdate(storeDto);
return ResponseEntity.ok().body(storeDto);
}
//리뷰 답글 작성
@PatchMapping("/api/admin/management/bossComment")
public ResponseEntity<String> bossComment(long storeId, String orderNum, String bossComment) throws IOException {
String reviewContent = adminService.bossComment(storeId, orderNum, bossComment);
return ResponseEntity.ok().body(reviewContent);
}
//매장 정보 수정
public void storeInfoUpdate(StoreDto storeDto) {
adminMapper.storeInfoUpdate(storeDto);
}
//리뷰 답글
public String bossComment(long storeId, String orderNum, String bossComment) {
bossComment = bossComment.replace("\n","<br>").replaceAll(" ", " ");
Map<String, Object> map = new HashMap<>();
map.put("storeId", storeId);
map.put("bossComment", bossComment);
map.put("orderNum", orderNum);
adminMapper.bossComment(map);
return bossComment;
}
사용자가 입력한 텍스트를 replace메서드를 통해 바꿔주는 이유는 DB에 저장하고 불러올때
줄바꿈과 띄어쓰기를 유지하기 위함입니다
//매장 정보 수정
public void storeInfoUpdate(StoreDto storeDto);
//사장님 답글
public void bossComment(Map<String, Object> map);
<update id="storeInfoUpdate">
UPDATE DL_STORE SET
CATEGORY = #{category }
,STORE_NAME = #{storeName }
,STORE_ADDRESS1 = #{storeAddress1 }
,STORE_ADDRESS2 = #{storeAddress2 }
,STORE_ADDRESS3 = #{storeAddress3 }
,STORE_PHONE = #{storePhone }
,STORE_IMG = #{storeImg }
,STORE_THUMB = #{storeThumb }
,OPENING_TIME = #{openingTime }
,CLOSING_TIME = #{closingTime }
,MIN_DELIVERY = #{mindelivery }
,DELIVERY_TIME = #{deliveryTime }
,DELIVERY_TIP = #{deliveryTip }
,STORE_DES = #{storeDes }
WHERE
ID = #{id }
</update>
<update id="bossComment">
UPDATE DL_REVIEW SET
BOSS_COMMENT = #{bossComment }
WHERE
ORDER_NUM = #{orderNum }
AND
STORE_ID = #{storeId }
</update>
매장수정과 리뷰답글의 경우 코드가 간단하므로 설명은 생략하도록 하겠습니다
현재 매장수정 버튼을 클릭하고 매장의 위치를 변경할때 기존에 추가했던
카카오지도Api를 그대로 사용하고 있습니다 다만 adminDetail.js 코드를 보면
다음과 같이 home.js에 추가했던 카카오지도Api 코드가 중복되는걸 볼 수 있습니다
그 이유는 사용자가 주문을 하기 위해 주소검색시에는 이를 유지시키기 위해 쿠키에
주소정보를 저장하지만 매장정보수정시에는 쿠키에 저장할 필요가 없기 때문인데
이렇게 중복되는 코드를 계속 추가해서 사용하는건 좋은방법이 아닙니다
따라서 기존 코드에 현재 사용자가 접근한 페이지가 관리자페이지인지 아닌지
조건문을 통해 판단하도록 수정하면 중복되는 코드를 줄일수 있습니다
또 이 코드를 어느 한 페이지에 종속되지 않도록 분리시켜 util로 만들어
사용하는것도 좋은 방법입니다 다만 그럴경우 수정할 부분이 많아 글이 길어질것
같으므로 저는 이대로 사용하도록 하겠습니다