- ๋จ์ด ๋ฉ๋ด๋ฅผ ์ต์ด ๋ฑ๋ก ํ๊ธฐ ์ ์๋ ์ฌ์ฉ์๊ฐ ์๋น์ค ์์ ์ ์ ๋ฑ๋กํ๋ ๋ฉ๋ด๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ธ์จ๊ณผ ์๋์ด 0์ผ๋ก ์ด๊ธฐํ ๋์ด์ ์กฐํ์ ์๋ตํ๋ค.
- ๋จ์ด ๋ฉ๋ด ๋ฑ๋ก ํ์๋ DB์ ๋ฑ๋ก๋ ๋จ์ด ๋ฉ๋ด ํ ์ด๋ธ๊ณผ ๊ธฐ๋ณธ ๋ฉ๋ด ํ ์ด๋ธ์ Join ํ์ฌ, ๊ฒฐ๊ณผ๊ฐ์ด NULL์ด ์๋ ๊ฒฝ์ฐ์ ํ ์ธ์จ๊ณผ ์๋์ ์ฑ์์ ๋ฐํํ ์ ์๋ค.
- ์์ ๊ณผ ๋ฑ๋ก์ ์ฆ๊ฐ์ ์ผ๋ก ํ ์ ์๋๋ก ๊ฐ ์๋ต์ todaymenuIdx๋ฅผ ์ฑ์์ ๋ณด๋ด์ฃผ๊ณ , ๋ฑ๋ก/์์ ์์๋ ์กฐํ ์๋ต ๋ฐ๋์ ๋ฑ๋ก/์์ ์ฌ๋ถ๋ฅผ ์ถ๊ฐํด์ ์๋ฒ์ ์์ฒญํ๋ค.
- ์๋ต ๋ฐ๋
- TodayMenuControlller.java
- TodayMenuService.java
- JWT์์ ์ถ์ถํ ์ฌ์ฉ์ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋งค์์ ๊ฐ๊ฒ ID ์กฐํ
public GetMainPageMenu getTodayMenuList(int sellerIdx) throws BaseException{ // 1) ์ฌ์ฉ์ ๊ฐ๊ฒ ์กฐํ int storeIdx; try{ storeIdx = storeDao.storeIdxBySellerIdx(sellerIdx); } catch (Exception e) { throw new BaseException(POST_STORES_NOT_REGISTERD); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. }
์กฐํ๋ ๊ฐ๊ฒ Id๋ก ๊ฐ๊ฒ์ ๋ฑ๋ก๋ ๋จ์ด๋ฉ๋ด๋ฅผ ์กฐํ
List<GetMainPageItem> mainTodaymenuItems, sideTodaymenuItems; try{ mainTodaymenuItems = todayMenuDao.getTodayMenuList(storeIdx, "M"); }catch (Exception e) { throw new BaseException(POST_STORES_NOT_REGISTERD); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. } try{ sideTodaymenuItems = todayMenuDao.getTodayMenuList(storeIdx, "S"); }catch (Exception e) { throw new BaseException(POST_STORES_NOT_REGISTERD); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. } return new GetMainPageMenu(storeIdx, mainTodaymenuItems, sideTodaymenuItems);
}
- TodayMenuDao.java
๋จ์ด ๋ฉ๋ด๋ฅผ ์์ง ํ ์ด๋ธ์ ๋ฃ์ง ์์๋ค๋ฉด, ์กฐ์ธ ์์ ๊ฒฐ๊ณผ ์นผ๋ผ์ ๊ฒฐ๊ณผ๊ฐ NULL๋ก ๋์ค๋๋ก ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ์๋ค.public List<GetMainPageItem> getTodayMenuList(int storeIdx, String status) { String query = "SELECT\n" + " M.menuIdx, M.menu_name, M.price as origin_price,\n" + " IF(T.status = 'D' , null, T.todaymenuIdx) as todaymenuIdx,\n" + " IF(T.status = 'D' , null, T.discount) as discount,\n" + " IF(T.status = 'D' , null, T.price) as discount_price,\n" + " IF(T.status = 'D' , null, T.remain) as remain,\n" + " IF(T.status = 'D' , null, T.status) as status\n" + "FROM Menu M\n" + "LEFT JOIN TodayMenu T on M.menuIdx = T.menuIdx AND T.status != 'D'\n" + "WHERE M.storeIdx = ?\n" + "AND M.status = ?"; Object[] params = new Object[]{ storeIdx, status }; return this.jdbcTemplate.query(query, (rs, rowNum) -> new GetMainPageItem( rs.getInt("menuIdx"), rs.getString("menu_name"), rs.getInt("origin_price"), rs.getInt("todaymenuIdx"), rs.getInt("discount"), rs.getInt("discount_price"), rs.getInt("remain"), rs.getString("status") == null ? "N" : rs.getString("status"), rs.getString("status") == null ? -1 : 0 ), params); }
API ํ ์คํธ๋ก ๊ฒฐ๊ณผ๊ฐ ์ ๋์ค๋ ๋ชจ์ต
ํ๋ฉด๋ทฐ์๋ ๊ฐ์ด ์ ์ ์ฉ๋์ด ๋์ค๋ ๋ชจ์ต
๋จ์ด ๋ฉ๋ด ์กฐํ์์๋ ๋ฑ๋กํ์ง ์์ ๋ฉ๋ด, ๋ฑ๋กํ ๋ฉ๋ด๋ก ๋๋๊ฒ ๋๊ณ ,
๋จ์ด ๋ฑ๋ก/์์ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํ ๊ฒฝ์ฐ์ ์๋ ์๋์ ๊ฐ์ด 3๊ฐ์ง๊ฐ ์๋ค.
- ๋ฏธ๋ฑ๋ก or ๋ฑ๋กํ๋๋ฐ ์์ ํ์ง ์๋ ๊ฒฝ์ฐ (๊ฐ ๋ณ๊ฒฝ X)
- ๋จ์ด ๋ฉ๋ด๋ฅผ ์๋ก ๋ฑ๋กํ๋ ๊ฒฝ์ฐ (๊ฐ ๋ณ๊ฒฝ O)
- ๋ฑ๋ก๋์ด ์๋๋ฐ ์์ ํ๋ ๊ฒฝ์ฐ (๊ฐ ๋ณ๊ฒฝ O)
์ด๋ ๊ฒ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ํ ์ด์ ๋ ์กฐํ๋ฅผ ํ ์์, ๋ฑ๋กํ ๋ฉ๋ด์ ๊ฒฝ์ฐ ์๋ต ๊ฐ์ผ๋ก ํด๋น ๋จ์ด ๋ฉ๋ด์ ๋ํ ์ ๋ณด๊ฐ ๋ ์์ค๊ธฐ ๋๋ฌธ์ ํด๋น todaymenuIdx๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ์ ๋ํด์๋ ๊ฐ์ ์ฑ์ ๋ฃ์ด๋ Insert ๋์ Update๋ฅผ ์งํํ๊ธฐ ์ํจ์ด๋ค.
*์ด์ ์ ๋ฑ๋กํ ๋จ์ด๋ฉ๋ด๋ฅผ ์์ ๊ณ ์์ ๋ ํํ๋ก ์๋ก Insert ํ์ง ์๊ณ ๊ทธ๋ฅ ํด๋น ๋จ์ด ๋ฉ๋ด์ ์ ๋ณด๋ฅผ Update
(1) ๋ก์ง ํ๋ก์ฐ
1. ์กฐํ์ ์๋ต์ผ๋ก ๋ฐ์ Body๊ฐ์ ๋ฑ๋ก/์์ ์ํ๋ฅผ ์ถ๊ฐํ์ฌ ์ ์กํ๋ค
(GET๋ฉ์๋์ ์๋ต ๋ฐ๋์POST ๋ฉ์๋์ ์์ฒญ ๋ฐ๋๋ ๊ฐ์ ํํ์ด๋ค!)
2. ์ฌ์ฉ์์ ๊ฐ๊ฒ Idx๋ฅผ ์กฐํํ๊ณ ,
3. ๋ฑ๋กํ ๋จ์ด๋ฉ๋ด๋ ํ๋งค์์ ๊ฐ๊ฒ์ ๋จ์ด ๋ฉ๋ด๋ฅผ ์ฐ๊ด ์ง์ด ๋ฑ๋กํ๋ค.
4. ์์ ํ ๋จ์ด๋ฉ๋ด๋ ์์ฒญ์ผ๋ก ๋ค์ด์จ ๋จ์ด๋ฉ๋ด Idx๋ฅผ ํตํด ์์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ๊ณ
5. ๋ฑ๋ก/์์ ์ ํ ๋จ์ด๋ฉ๋ด ๊ฐ์๋ฅผ ์๋ต์ผ๋ก ๋ฐํํจ.
- ์์ฒญ ๋ฐ๋ : [GET] /jat/todaymenu ์ ๋์ผ
- ์๋ต ๋ฐ๋ :
- TodayMenuController.java
- TodayMenuService.java
- ๋ฑ๋ก์ ํ๊ธฐ์ํ ์ฌ์ฉ์ ๊ฐ๊ฒ Idx๋ฅผ ์กฐํ
@Transactional(rollbackFor = BaseException.class) public PostMainPageTMenuRes registerTodayMenu(int sellerIdx, PostMainPageTMenu postTodayMenuReq) throws BaseException { // 1) ์ฌ์ฉ์ ๊ฐ๊ฒ ์กฐํ int storeIdx; try{ storeIdx = storeDao.storeIdxBySellerIdx(sellerIdx); } catch (Exception e) { throw new BaseException(POST_STORES_NOT_REGISTERD); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. }
- ๋ฉ์ธ ๋ฉ๋ด ์ค ๋ฑ๋ก/์์ ํ ๋จ์ด ๋ฉ๋ด๋ฅผ ๋ถ๋ฆฌํ๊ณ , ๋ฑ๋ก/์์
// -1 : ๋ฏธ๋ฑ๋ก ์ํ ๋ฉ๋ด // 0 : ๋ฑ๋ก ๋์ด์์ง๋ง ์์ ์ํ๋ ๋จ์ด๋ฉ๋ด // 1 : ๋ฑ๋ก๋์ด ์๊ณ , ์์ ์ ํ๋ ๋จ์ด๋ฉ๋ด // 2 : ๋ฑ๋ก ์๋์ด ์๋ค๊ฐ ์๋ก ๋ฑ๋กํ๋ ๋จ์ด๋ฉ๋ด // 2-1) ๋ฉ์ธ ๋ฉ๋ด ๋จ์ด๋ฉ๋ด ์์ /๋ฑ๋ก ํ์ธ List<GetMainPageItem> newTodayMain = new ArrayList<>(), updateTodayMain = new ArrayList<>(); int newTodayMainCnt = 0, updateTodayMainCnt = 0; if (postTodayMenuReq.getMainMenus() != null) { for (GetMainPageItem pageItem : postTodayMenuReq.getMainMenus()) { if (pageItem.getIsUpdated() == 2) { // 2: ์๋ก ๋ฑ๋กํ๋ ์ค๋์ ๋จ์ด ๋ฉ๋ด ์ผ ๊ฒฝ์ฐ! newTodayMain.add(pageItem); } else if(pageItem.getIsUpdated() == 1){ // 1: ๋ฑ๋ก๋์ด์๋ ๋ฉ๋ด ์ค ์์ ํ๋ ๋จ์ด ๋ฉ๋ด์ผ ๊ฒฝ์ฐ! updateTodayMain.add(pageItem); } } } // 2-2) ๋ฉ์ธ ๋จ์ด๋ฉ๋ด ๋ฑ๋ก/์์ try{ newTodayMainCnt = todayMenuDao.registerTodayMenu(storeIdx, newTodayMain, "M"); updateTodayMainCnt = todayMenuDao.updateTodayMenu(updateTodayMain); } catch (Exception e) { throw new BaseException(POST_TODAY_MAINMENU_SAVE_ERROR); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. }
- ์ฌ์ด๋๋ ๋๊ฐ์ ๊ณผ์ ํ ๋๋น์ ์ ์ฉ๋ ํ ๊ฐ์ ๋ฐํ
// 3-1) ์ฌ์ด๋ ๋ฉ๋ด ๋จ์ด๋ฉ๋ด ์์ /๋ฑ๋ก ํ์ธ List<GetMainPageItem> newTodaySide = new ArrayList<>(), updateTodaySide = new ArrayList<>(); int newTodaySideCnt = 0, updateTodaySideCnt = 0; if (postTodayMenuReq.getSideMenus() != null) { for (GetMainPageItem pageItem : postTodayMenuReq.getSideMenus()) { if (pageItem.getIsUpdated() == 2) { // 2: ์๋ก ๋ฑ๋กํ๋ ์ค๋์ ๋จ์ด ๋ฉ๋ด ์ผ ๊ฒฝ์ฐ! newTodaySide.add(pageItem); } else if(pageItem.getIsUpdated() == 1){ updateTodaySide.add(pageItem); } } } // 3-2) ์ฌ์ด๋ ๋จ์ด๋ฉ๋ด ๋ฑ๋ก/์์ try{ newTodaySideCnt = todayMenuDao.registerTodayMenu(storeIdx, newTodaySide, "S"); updateTodaySideCnt = todayMenuDao.updateTodayMenu(updateTodaySide); } catch (Exception e) { throw new BaseException(POST_TODAY_MAINMENU_SAVE_ERROR); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. } return new PostMainPageTMenuRes(storeIdx, newTodayMainCnt, updateTodayMainCnt, newTodaySideCnt, updateTodaySideCnt); }
- TodayMenuDao.java
// ๋จ์ด๋ฉ๋ด ์ผ๊ด ๋ฑ๋ก public int registerTodayMenu(int storeIdx, List<GetMainPageItem> todayMenuItems, String status) { String query = "INSERT INTO TodayMenu(date, storeIdx, menuIdx, price, discount, remain, status)\n" + "VALUE(NOW(),?,?,?,?,?,?)"; this.jdbcTemplate.batchUpdate(query, todayMenuItems, todayMenuItems.size(), (PreparedStatement ps, GetMainPageItem todayMenuItem) ->{ ps.setInt(1, storeIdx); ps.setInt(2, todayMenuItem.getMenuIdx()); ps.setInt(3, todayMenuItem.getDiscountPrice()); ps.setInt(4, todayMenuItem.getDiscountRatio()); ps.setInt(5, todayMenuItem.getRemain()); ps.setString(6, status); }); return todayMenuItems.size(); }
// ๋จ์ด ๋ฉ๋ด ์ผ๊ด ์์ public int updateTodayMenu(List<GetMainPageItem> todayMenuItems){ String query = "UPDATE TodayMenu\n" + " SET price = ?,\n" + " discount = ?,\n" + " remain = ?\n" + "WHERE todaymenuIdx = ?"; return this.jdbcTemplate.batchUpdate(query, todayMenuItems, todayMenuItems.size(), (PreparedStatement ps, GetMainPageItem todayMenuItem) -> { ps.setInt(1, todayMenuItem.getDiscountPrice()); ps.setInt(2, todayMenuItem.getDiscountRatio()); ps.setInt(3, todayMenuItem.getRemain()); ps.setInt(4, todayMenuItem.getTodaymenuIdx()); }).length ; }
ํ๋ฉด์์ ํ ์ธ์จ์ด ๊ฐ๊ฒฉ์ ๋ฐ๋ก ์ ์ฉ๋๋ ๊ธฐ๋ฅ์ ํ๋ก ํธ์์ ๊ณ์ฐ์์ ๋ฃ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์๊ธ๋ฒํฐ๋กค : ํ ์ธ์จ 20%, ํ ์ธ๊ฐ๊ฒฉ 2000 -> 1600, ์๋ 5๊ฐ
- ๋ง์ด ์๋์์น ๋นต : ํ ์ธ์จ 30%, ํ ์ธ๊ฐ๊ฒฉ 4500 -> 3100, ์๋ 6๊ฐ
- DB์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฐ์ด ์ฌ๋ผ๊ฐ๊ณ ,
- API ์๋ต ๊ฒฐ๊ณผ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ฉ๋ ๋ชจ์ต
์๋์์น์ ์๋์ 3๊ฐ๋ก ๋ณ๊ฒฝํ๊ณ , ๊ฟ ํ ์คํธ ์๋นต์ ๋จ์ด๋ฉ๋ด ๋ฑ๋ก์ ํด๋ณด๊ฒ ๋ค.
- ๋ฑ๋ก ๋ฒํผ ๋ค์ ํด๋ฆญ
- ์์ ๊ณผ ์ถ๊ฐ๋ฑ๋ก์ด ์ ๋ฐ์๋์ด DB์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ชจ์ต.
ํด๋น ๋จ์ด๋ฉ๋ด๋ค์ ๊ตฌ๋งค์๊ฐ ๊ฐ๊ฒ๋ฅผ ์กฐํํ์ ๋ ํ์ํ ๋ฉ๋ด๋ค์ด๋ค!