- ๋ฉ๋ด์ ์ด๋ฏธ์ง๋ ๋ฑ๋กํด๋๋๊ณ ์ํด๋๋จ.
- ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ์๋ฒ์์ ์ ์งํ๊ธฐ ์ํด AWS S3 ์๋น์ค๋ฅผ ์ด์ฉ.
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ AWS S3 ์ ๊ทผ ์ธ๊ฐ๋ AWS IAM ๊ณ์ ์ ์ก์ธ์คํค ํ์ฉ
(1) ๋ก์ง ํ๋ก์ฐ
1. ๋ฉ๋ด ์ ๋ณด๋ฅผ Post๋ก ์์ฒญ๋ฐ์.
2. ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ๋ฉ๋ด๋ฅผ ๋ฑ๋กํ๋์ง ํ์ธ
3. ์ฌ์ฉ์์ ๊ฐ๊ฒ๋ฅผ ์กฐํํ์ฌ ๊ฐ๊ฒ์ ๋ฉ๋ด ๋ฑ๋กํ ์ค๋น
4. ๋ฉ์ธ/์ฌ์ด๋ ๋ฉ๋ด, ์์ฐ์ง ๋ฑ๋ก
5. ํ๋งค์์ ๋ก๊ทธ์ธ status ๋ณ๊ฒฝ(๋ฉ๋ด ๋ฑ๋ก์๋ฃ ์ํ)
- ์์ฒญ ๋ฐ๋
- ์๋ต ๋ฐ๋
- MenuController.java
- MenuService.java
1. ์ฌ์ฉ์ ๋ฉ๋ด ๋ฑ๋ก ๊ฐ๋ฅ ์ฌ๋ถํ์ธ. ์ฌ์ฉ์ ๊ฐ๊ฒ ์กฐํ@Transactional(rollbackFor = BaseException.class) public PostMenuRes menuRegister(int sellerIdx, PostMenuReq postMenuReq) throws BaseException { // 0) ์ฌ์ฉ์ ๋ฉ๋ด ๋ฑ๋ก ์ฌ๋ถ ํ์ธ // (index) 0 :first_login, 1: menu_register int[] loginStatus = sellerDao.checkRegisterd(sellerIdx); if(loginStatus[0] == 0 && loginStatus[1] == 0){ throw new BaseException(STORE_MENU_ALREADY_SAVED); // 4034 : ๋ฉ๋ด ๋ฑ๋ก์ด ์ด๋ฏธ ์ด๋ฃจ์ด์ง ํ๋งค์ ์ ๋๋ค. } if(loginStatus[0] == 1){ throw new BaseException(STORE_REGISTER_NOT_PERMITTED); // 4035 : ๊ด๋ฆฌ์์๊ฒ ๊ฐ๊ฒ ์น์ธ๋์ง ์์ ํ๋งค์ ๊ณ์ ์ ๋๋ค. } // first_login == 1, menu_register == 0 ์ผ๋ ๋ฉ๋ด๋ฑ๋ก๊ฐ๋ฅ // 1)์ฌ์ฉ์ ๊ฐ๊ฒ ์กฐํ int storeIdx; try{ storeIdx = storeDao.storeIdxBySellerIdx(sellerIdx); } catch (Exception e) { throw new BaseException(POST_STORES_NOT_REGISTERD); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. }
์ฐ์ ๋ฉ๋ด๋ฅผ ์ด๋ฏธ ๋ฑ๋กํ๋ค๋ฉด ํด๋น ์๋น์ค ํ๋ก์ฐ ์ ๋ง์ง ์๋ ์์ฒญ์ด๊ธฐ ๋๋ฌธ์ ํ์ธ์ ํ์๊ณ , ํ์ธ ํ ์์์์ ๊ฐ๊ฒ๋ฅผ ์กฐํํ์ฌ ๋ฉ๋ด๋ฑ๋ก ์ ์ธ๋ํค ๊ฐ์ผ๋ก ์ฃผ์ด์ค ์ค๋น๋ฅผ ํ์๋ค.
- ๋ฉ์ธ/์ฌ์ด๋ ๋ฉ๋ด, ์์ฐ์ง ๋ฑ๋ก
// 2) ๊ฐ๊ฒ ๋ฉ๋ด/์์ฐ์ง ๋ฑ๋ก int mainMenuItemCount = 0, sideMenuItemCount = 0, ingredientCount = 0; List<PostMenuUrlItem> urlItems = null; try { // 2-1) ๋ฉ์ธ ๋ฉ๋ด ๋ฑ๋ก if (postMenuReq.getMainMenuItems() != null && postMenuReq.getMainMenuItems().size() != 0) { urlItems = convertToUrlFileNames(postMenuReq.getMainMenuItems()); mainMenuItemCount = menuDao.menuRegister(storeIdx, urlItems, "M"); } else throw new BaseException(STORE_MAINMENU_SAVE_ERROR); //mainMenuItemCount = 0;// 2031 : ๋ฉ์ธ ๋ฉ๋ด ๋ฑ๋ก ์ ๋ณด๊ฐ ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค. } catch (Exception e) { throw new BaseException(STORE_MAINMENU_SAVE_ERROR); // 4031 : ๋ฉ์ธ๋ฉ๋ด ๋ฑ๋ก์ ์คํจํ์์ต๋๋ค. } try { // 2-2) ์ฌ์ด๋ ๋ฉ๋ด ๋ฑ๋ก if (postMenuReq.getSideMenuItems() != null && postMenuReq.getSideMenuItems().size() != 0) { urlItems = convertToUrlFileNames(postMenuReq.getSideMenuItems()); sideMenuItemCount = menuDao.menuRegister(storeIdx, urlItems, "S"); } else sideMenuItemCount = 0;//throw new BaseException(STORE_SIDEMENU_SAVE_ERROR); // // 2032 : ์ฌ์ด๋ ๋ฉ๋ด ๋ฑ๋ก ์ ๋ณด๊ฐ ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค. } catch (Exception e) { //System.out.println("2:" + e); throw new BaseException(STORE_SIDEMENU_SAVE_ERROR); // 4032: ์ฌ์ด๋๋ฉ๋ด ๋ฑ๋ก์ ์คํจํ์์ต๋๋ค. } try { // 2-3) ์์ฐ์ง ๋ฑ๋ก if (postMenuReq.getIngredientItems() != null && postMenuReq.getIngredientItems().size() != 0) { ingredientCount = menuDao.ingredientRegister(storeIdx, postMenuReq.getIngredientItems()); } else throw new BaseException(STORE_INGREDIENT_SAVE_ERROR); } catch (Exception e) { //System.out.println("3:" + e); throw new BaseException(STORE_INGREDIENT_SAVE_ERROR); // 4033 : ์์ฐ์ง ๋ฑ๋ก์ ์คํจํ์์ต๋๋ค. }
๊ฐ๊ฐ ๋ค์ด์จ ์ ๋ณด๋ค์ DB์ ๋ฑ๋กํ์๋ค. ๋ฑ๋ก ์์ ๋ฑ๋ก์ด ์ฌ๋ฐ๋ก ๋์๋์ง ํ์ธํ๊ธฐ ์ํด์ JdbcTempalte ํจ์ ์ค batchUpdate์ ๋ฐํ ๊ฐ์ ํ์ธํ์ฌ ๋ฑ๋ก์ด ์ผ๋ง๋ ๋์๋์ง ๊ฐ์๋ฅผ ํ์ธ.
- ๋ฑ๋ก ์๋ฃ ํ ํ๋งค์ ์๋น์ค ์ด์ฉ ์ํ ๋ณ๊ฒฝ
// 3) ํ๋งค์ ์ต์ด๋ก๊ทธ์ธ, // ํ๋งค์ ๊ฐ๊ฒ๋ฑ๋ก์ฌ๋ถ ํ๋ ๋ณ๊ฒฝ : 1, 1 -> 0, 0 try { sellerDao.registerMenuNIngredient(sellerIdx); storeDao.convertStoreOpen(storeIdx); } catch(Exception e){ throw new BaseException(SELLER_ALL_REGISTER_COMPLETE_ERROR); // 4030 : ํ๋งค์์ ์ต์ด๋ก๊ทธ์ธ, ๋ฉ๋ด/์์ฐ์ง ๋ฑ๋ก์ด ์๋ฃ๋์ง ๋ชปํ์์ต๋๋ค. } if(postMenuReq.getMainMenuItems() != null && postMenuReq.getMainMenuItems().size() > 0 && mainMenuItemCount == 0){ throw new BaseException(STORE_MAINMENU_SAVE_ERROR); } if(postMenuReq.getSideMenuItems() != null && postMenuReq.getMainMenuItems().size() > 0 && sideMenuItemCount == 0){ throw new BaseException(STORE_SIDEMENU_SAVE_ERROR); } if(postMenuReq.getIngredientItems() != null && postMenuReq.getIngredientItems().size() > 0 && ingredientCount == 0){ throw new BaseException(STORE_INGREDIENT_SAVE_ERROR); } return new PostMenuRes(storeIdx, mainMenuItemCount, sideMenuItemCount, ingredientCount); }
๋ฑ๋ก ์๋ฃํ ํ๋งค์์ ์๋น์ค ์ด์ฉ์ ์ํด ์ต์ด๋ก๊ทธ์ธ, ๊ฐ๊ฒ, ๋ฉ๋ด ๋ฑ๋ก ์ฌ๋ถ๋ฅผ ๋ชจ๋ ์๋ฃ ์ํ๋ก ๋ณ๊ฒฝํ๊ณ ๋ก๊ทธ์ธ ํ ๋ณธ๊ฒฉ์ ์ธ ์๋น์ค๋ฅผ ์์ํ ์ ์๋๋ก ์ค๋นํ๋ค.
๋ ์์ฒญ๋ฐ์ ๋ฑ๋ก ์ ๋ณด์ ๊ฐ์์ DB์ ๋ฑ๋ก๋ ๊ฐ์๊ฐ ๋ง์ง ์์ ๊ฒฝ์ฐ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์๋ค.
- MenuDao.java
// ํ๋งค์์ ๋ฉ๋ด ๋ฑ๋ก ์ฌ๋ถ ํ์ธ public int[] checkRegisterd(int sellerIdx) { String query = "SELECT " + "first_login, menu_register " + "FROM Merchandisers " + "WHERE sellerIdx = ?"; return this.jdbcTemplate.queryForObject(query, (rs, rowNum) -> new int[]{ rs.getInt("first_login"), rs.getInt("menu_register")} , sellerIdx); }
// ๋ฉ๋ด๋ฅผ ๋ฑ๋กํ ํ๋งค์์ ๊ฐ๊ฒ Id public int storeIdxBySellerIdx(int sellerIdx){ String query = "SELECT storeIdx FROM Stores WHERE sellerIdx = ?"; return this.jdbcTemplate.queryForObject(query, (rs, rowNum) -> rs.getInt("storeIdx"), sellerIdx); }
// ๋ฉ์ธ/์ฌ์ด๋ ๋ฉ๋ด ์ผ๊ด ๋ฑ๋ก ์ฟผ๋ฆฌ public int menuRegister(int storeIdx, List<PostMenuUrlItem> mainMenuList, String mOrS) { String query = "INSERT INTO Menu (" + "storeIdx, " + "menu_name, " + "price, " + "composition," + "description," + "menu_url," + "status)\n" + "VALUES (?,?,?,?,?,?,?);"; this.jdbcTemplate.batchUpdate(query, mainMenuList, mainMenuList.size(), (PreparedStatement ps, PostMenuUrlItem menuItem) ->{ ps.setInt(1, storeIdx); ps.setString(2, menuItem.getMenuName()); ps.setInt(3, menuItem.getPrice()); ps.setString(4, menuItem.getComposition()); ps.setString(5, menuItem.getDescription()); ps.setString(6, menuItem.getMenuUrl()); ps.setString(7, mOrS); }); return mainMenuList.size(); }
// ์์ฐ์ง ์ผ๊ด๋ฑ๋ก ์ฟผ๋ฆฌ public int ingredientRegister(int storeIdx, List<PostIngredientItem> ingredientList) { String query ="INSERT INTO Ingredients (storeIdx, ingredient_name, origin, menu_names)\n" + "VALUES (?,?,?,?);"; this.jdbcTemplate.batchUpdate(query, ingredientList, ingredientList.size(), (PreparedStatement ps, PostIngredientItem postIngredientItem) ->{ ps.setInt(1, storeIdx); ps.setString(2, postIngredientItem.getIngredientName()); ps.setString(3, postIngredientItem.getOrigin()); ps.setString(4, postIngredientItem.getMenuName()); }); return ingredientList.size(); }
// ํ๋งค์ ์๋น์ค ์ด์ฉ ๊ฐ๋ฅ ์ํ๋ก ๋ณ๊ฒฝ public void registerMenuNIngredient(int sellerIdx){ String query = "UPDATE Merchandisers\n" + "SET menu_register = 0\n" + "WHERE sellerIdx = ?"; this.jdbcTemplate.update(query, sellerIdx); }
ํ ์คํธ๋ API์์ฒญ์ด ์๋ ํ๋ก ํธํ๋ฉด์ผ๋ก ์งํํด๋ณด๊ฒ ๋ค.
- ๋ฉ์ธ ๋ฉ๋ด ๋ฑ๋ก๋
- ์ฌ์ด๋ ๋ฉ๋ด ๋ฑ๋ก๋
- ์ด๋ฏธ์ง ๋ฑ๋ก๊ณผ์
- ๋ฑ๋ก ์ค๋น์๋ฃ
- ์์ฐ์ง ๋ฑ๋ก ์ค๋น์๋ฃ
์ ๋ค์ด์ด
์ด์ ํฌ์คํ ์์ ์์ฑํ๋ฏ S3 ๊ธฐ๋ฅ์ ๋งจ ์ฒ์์ ๋ฌ์ง ์์์๋๋ฐ, ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ฅผ ํ๋ก ํธ์์ ํ๋ ์ค ์์๋ค..ใ ใ
ํ๋ก ํธ์์ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋๋ก ๋ณด๋ธ๋ค๊ณ ํด์ ๊ตฌ๊ธ๋ง์ ํด๋ณด๋ AWS S3๋ฅผ ํตํด์ URL์ ๋ง๋ค ์ ์๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์๊ณ , ํ๋ก ํธ์์ ๋ณด๋ด์ฃผ๋ ์ด๋ฏธ์ง ํ์ผ์ S3 ๋ฒํท์ ๋ฑ๋กํ์ฌ, ์๋น์ค๋ฅผ ๊ตฌํํ๊ธฐ๋ก ํ์๋ค.
- ๋ฉ๋ด ๋ฑ๋ก ํ ๋จ์ด๋ฉ๋ดํ๋ฉด์์ ๋ณด์ด๋ ๋ฉ๋ด๋ ๋ฐ๋ก ๋ง๋ค๊ธฐ๋กํ์๋ค.
- ๋ฉ๋ด ์์ ์ ๋ฑ๋กํ ๋ฉ๋ด๋ฅผ ํ์ธํ๊ธฐ ์ํ API ๊ธฐ๋ฅ์ด๋ค.
๋ก์ง ํ๋ก์ฐ
1. JWT ํ ํฐ์ ๋ค์ด์๋ ํ๋งค์ ์๋ณ์๋ฅผ ํตํด ๊ฐ๊ฒ์ ๋ฉ๋ด๋ฅผ ์กฐํํ๋ค!
2. ๋ฉ๋ด๋ฅผ ์กฐํํ ๋ ํ์ํ ์ด๋ฏธ์ง์ URL์ ์๋ฒ์์ ๋ง๋ค์ด์ ๊ฒฐ๊ณผ์ ๊ฐ์ด ํฌํจํจ!
- ์๋ต ๋ฐ๋
๋ฉ๋ด Idx๋ฅผ ๋ฐํํ๋ ์ด์ ๋ ์์ ์์ ์ด๋ ๋ฉ๋ด๋ฅผ ์์ ํ๋์ง ์๋ณํ๊ธฐ ์ํจ!
- MenuController.java
- MenuService.java
- ๋ชจ๋ ์๋น์ค ์ด์ฉ์ด ๊ฐ๋ฅํ ํ๋งค์์ธ์ง ์ฐ์ ํ์ธ, ํ์ธ ํ ์ฌ์ฉ์์ ๊ฐ๊ฒ์ ๋ฑ๋ก๋ ๋ฉ๋ด๋ฅผ ํ์ธํ๊ธฐ ์ํด ๊ฐ๊ฒ Idx ๊ฐ์ ธ์ค๊ธฐ
public GetMenuItemsRes getStoreMenuList(int sellerIdx) throws BaseException { int[] loginStatus = sellerDao.checkRegisterd(sellerIdx); if(loginStatus[0] != 0 && loginStatus[1] != 0){ throw new BaseException(STORE_REGISTER_NOT_PERMITTED); // 4035 : ๊ด๋ฆฌ์์๊ฒ ๊ฐ๊ฒ ์น์ธ๋์ง ์์ ํ๋งค์ ๊ณ์ ์ ๋๋ค. } // 1) ์ฌ์ฉ์ ๊ฐ๊ฒ ์กฐํ int storeIdx; try{ storeIdx = storeDao.storeIdxBySellerIdx(sellerIdx); } catch (Exception e) { throw new BaseException(POST_STORES_NOT_REGISTERD); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. }
- ๋ฉ์ธ/์ฌ์ด๋ ๋ฉ๋ด ๊ธฐ๋ณธ์ ๋ณด ์กฐํ,
๋ฉ๋ด์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ : DB์ ๋ฑ๋ก๋์ด์๋ ๋ฉ๋ด ๋๋ฉ์ธ์ S3๋ฒํท์ ๋ฑ๋ก๋์ด์๋ ํด๋น ๋ฉ๋ด์ ์ด๋ฏธ์ง Key๊ฐ์ ๊ฐ์ ธ์์ S3์ URL์ ์์ฒญํ๋ค. ์๋ต๋ฐ์ผ๋ฉด ์๋ต ๋ฐ๋์ ๊ฐ์ ๋ฃ์ด์ ํด๋ผ์ด์ธํธ์ ์๋ตList<GetMenuItem> mainMenuList, sideMenuList; // 2) ๋ฉ์ธ ๋ฉ๋ด ์กฐํ try{ mainMenuList = menuDao.getStoreMenuList(storeIdx, "M"); }catch (Exception e) { throw new BaseException(GET_MENU_ERROR); } // ๋ฉ์ธ ๋ฉ๋ด url ๊ฐ์ ธ์ค๊ธฐ try{ for(GetMenuItem item : mainMenuList){ if (item.getMenuUrl() != null && !item.getMenuUrl().equals("")) { item.setMenuUrl(""+s3Client.getUrl(bucketName, item.getMenuUrl())); } } }catch (Exception e) { throw new BaseException(GET_MENU_ERROR); } // 3) ์ฌ์ด๋ ๋ฉ๋ด ์กฐํ try{ sideMenuList = menuDao.getStoreMenuList(storeIdx, "S"); }catch (Exception e) { throw new BaseException(GET_MENU_ERROR); } // ์ฌ์ด๋ ๋ฉ๋ด url ๊ฐ์ ธ์ค๊ธฐ try{ for(GetMenuItem item : sideMenuList){ if (item.getMenuUrl() != null && !item.getMenuUrl().equals("")) { item.setMenuUrl(""+s3Client.getUrl(bucketName, item.getMenuUrl())); } } }catch (Exception e) { throw new BaseException(GET_MENU_ERROR); } return new GetMenuItemsRes(storeIdx, mainMenuList, sideMenuList); }
- MenuDao.java
// ๊ฐ๊ฒ ๋ฑ๋ก ์ฌ๋ถ ํ์ธ first_login = 0, menu_register = 0 ์ผ๋ ๊ฐ๊ฒ, ๋ฉ๋ด๋ฑ๋ก ๋ชจ๋ ์๋ฃํ ํ๋งค์ public int[] checkRegisterd(int sellerIdx) { String query = "SELECT " + "first_login, menu_register " + "FROM Merchandisers " + "WHERE sellerIdx = ?"; return this.jdbcTemplate.queryForObject(query, (rs, rowNum) -> new int[]{ rs.getInt("first_login"), rs.getInt("menu_register")} , sellerIdx); }
// ๋ฉ๋ด๋ฅผ ์กฐํํ๊ธฐ ์ํ ์ฌ์ฉ์์ ๊ฐ๊ฒ Idx ๊ฐ์ ธ์ค๊ธฐ public int storeIdxBySellerIdx(int sellerIdx){ String query = "SELECT storeIdx FROM Stores WHERE sellerIdx = ?"; return this.jdbcTemplate.queryForObject(query, (rs, rowNum) -> rs.getInt("storeIdx"), sellerIdx); }
// ๋ฉ๋ด ๊ธฐ๋ณธ์ ๋ณด ์กฐํ (๋ฉ๋ดIdx, ๋ฉ๋ด ์ด๋ฆ, ๊ฐ๊ฒฉ, ๊ตฌ์ฑ, ์ค๋ช , ๋ฉ๋ด S3 ํค๊ฐ) public List<GetMenuItem> getStoreMenuList(int storeIdx, String status) { String query = "SELECT menuIdx, menu_name, price, composition, description, menu_url\n" + "FROM Menu WHERE storeIdx = ? AND status = ?"; Object[] params = new Object[]{storeIdx, status}; return this.jdbcTemplate.query(query, (rs, rowNum) -> new GetMenuItem( rs.getInt("menuIdx"), rs.getString("menu_name"), rs.getInt("price"), rs.getString("composition"), rs.getString("description"), rs.getString("menu_url"), 0 ), params); }
์๋จ.
- ๋ฉ๋ด/์ฌ์ด๋ ๋ฉ๋ด๋ฅผ ์กฐํ์ ๋ฐ์๋ Idx ๊ฐ์ ํตํด ์๋ฒ์ ์์ ์ํ ๊ฐ์ ์ถ๊ฐํ์ฌ Body ์ ๋ด์ ์์ ์ ์์ฒญํ๋ค!
- ์์ ์ ๋ํ ๊ฐ์ 4๊ฐ์ง๋ก ๊ตฌ๋ถ
0: ์์ ์ํ๊ณ ๊ทธ๋๋ก ์ ์งํ๋ ๋ฉ๋ด
1: ์์ ํ ๋ฉ๋ด
2: ์ญ์ ํ ๋ฉ๋ด
3: ์๋ก์ด ๋ฉ๋ด
(1 )๋ก์ง ํ๋ก์ฐ
1. ์์ ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฉ๋ด ๋ชฉ๋ก์ Body์ ๋ด์ ์๋ฒ๋ก ์์ฒญ
2. ์๋ฒ์์ ์ฌ์ฉ์์ ๊ฐ๊ฒ๋ฅผ ์กฐํํ๋ค.
3. ๊ฐ ๋ฉ๋ด์ ๋ฐ๋ผ์ ์์ , ์ญ์ , ์ถ๊ฐํ ๋ฉ๋ด๋ฅผ ๋ถ๋ฆฌํ๋ค.
4. ๋ถ๋ฆฌํ ๋ฉ๋ด ๋ชฉ๋ก๋ค์ DB์ ๊ฐ๊ฐ ์์ , ์์ฑ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ธ๋ค
- ์์ฒญ ๋ฐ๋
- ์๋ต ๋ฐ๋
- MenuController.java
- MenuService.java
- ์ฌ๋ฐ๋ฅธ ์ ๊ทผ์ ์ฌ์ฉ์์ธ์ง ํ์ธ, ๊ฐ ๋ฉ๋ด ์์ ์ฌํญ์ ํ์ธํ์ฌ ๋ถ๋ฆฌ
@Transactional(rollbackFor = BaseException.class) public PatchMenuRes menuUpdate(int sellerIdx, PatchMenuReq postMenuReq) throws BaseException{ // 1)์ฌ์ฉ์ ๊ฐ๊ฒ ์กฐํ int storeIdx; try{ storeIdx = storeDao.storeIdxBySellerIdx(sellerIdx); } catch (Exception e) { throw new BaseException(POST_STORES_NOT_REGISTERD); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. } // 0: ์์ ์ํ๊ณ ๊ทธ๋๋ก ์ ์ง๋ฉ๋ด // 1: ์์ ํ ๋ฉ๋ด // 2: ์ญ์ ํ ๋ฉ๋ด // 3: ์๋ก์ด ๋ฉ๋ด List<PostMenuItem> newMainMenu = new ArrayList<>(), newSideMenu = new ArrayList<>(); List<PatchMenuItem> updMainMenu = new ArrayList<>(), updSideMenu = new ArrayList<>(); List<PatchMenuItem> delMainMenu = new ArrayList<>(), delSideMenu = new ArrayList<>(); int newMainCnt = 0, newSideCnt = 0; int updMainCnt = 0, updSideCnt = 0; int delMainCnt = 0, delSideCnt = 0; // 2-M) ์์ /์ญ์ /์ ๊ท๋ฑ๋ก ํ ๋ฉ์ธ ๋ฉ๋ด ๋ถ๋ฆฌ if(postMenuReq.getMainMenuItems() != null){ //ystem.out.println("main"); for(PatchMenuItem item : postMenuReq.getMainMenuItems()){ if (item.getIsUpdated() == 0){ continue; }else if(item.getIsUpdated() == 3){ // 3: ์๋ก์ด ๋ฉ๋ด newMainMenu.add(new PostMenuItem(item.getMenuName(), item.getPrice(), item.getComposition(),item.getDescription(),item.getMenuUrl())); newMainCnt ++; }else if(item.getIsUpdated() == 2){ // 2: ์ญ์ ํ ๋ฉ๋ด delMainMenu.add(item); delMainCnt++; }else if(item.getIsUpdated() == 1){ // 1: ์์ ํ ๋ฉ๋ด updMainMenu.add(new PatchMenuItem(item.getMenuIdx(), item.getMenuName(), item.getPrice(), item.getComposition(),item.getDescription(),item.getMenuUrl(), item.getIsUpdated())); updMainCnt++; } } } // 2-S) ์์ /์ญ์ /์ ๊ท๋ฑ๋ก ํ ์ฌ์ด๋ ๋ฉ๋ด ๋ถ๋ฆฌ if(postMenuReq.getSideMenuItems() != null){ //System.out.println("side"); for(PatchMenuItem item : postMenuReq.getSideMenuItems()){ if (item.getIsUpdated() == 0) { continue; } else if(item.getIsUpdated() == 3){ newSideMenu.add(new PostMenuItem(item.getMenuName(), item.getPrice(), item.getComposition(),item.getDescription(),item.getMenuUrl())); newSideCnt++; } else if(item.getIsUpdated() == 2){ delSideMenu.add(item); delSideCnt++; }else if(item.getIsUpdated() == 1){ updSideMenu.add(new PatchMenuItem(item.getMenuIdx(), item.getMenuName(), item.getPrice(), item.getComposition(),item.getDescription(),item.getMenuUrl(), item.getIsUpdated())); updSideCnt++; } } }
- ๊ฐ ์์ , ์ ๊ท ๋ฉ๋ด Url ๋ด์ ๋ฆฌ์คํธ
List<PostMenuUrlItem> urlItemsNew = null; List<PatchMenuUrlItem> urlItemsUpd = null;
- ๋ฉ๋ด ์ ๊ท ๋ฑ๋ก
์ฌ๊ธฐ์๋ ๋ฐฐ์น Update๋ฅผ ์ฌ์ฉํ์๋๋ฐ ๋ฐฐ์น ์ ๋ฐ์ดํธ์ ๋ฐํ๊ฐ์ธ 2์ฐจ์๋ฐฐ์ด์ ๊ฐ์ด ์์ํ๋๋ก ๋์ค์ง ์์์ ์๋น์ค ํ๋ฆ์ ๋์ง ์๊ธฐ ์ํด ๊ฒ์ฆ ๋ก์ง์ ์ฃผ์์ฒ๋ฆฌํด๋จ๋ค..
ex) ๋ฑ๋ก 2๊ฐ : int[] = { {1}, {2} } ์ด๋ ๊ฒ ์ผ์ค ์์๋๋ฐ { {1, 2} } ์ด๋ฐ์์ผ๋ก ๋์ด..// 3-M) ๋ฉ์ธ ๋ฉ๋ด ์ ๊ท๋ฑ๋ก try{ if(newMainMenu != null && newMainMenu.size() != 0){ urlItemsNew = convertToUrlFileNames(newMainMenu); int newComplete = menuDao.menuRegister(storeIdx, urlItemsNew, "M"); /*if (newMainCnt != newComplete) throw new Exception();*/ } }catch (Exception e){ throw new BaseException(STORE_MAINMENU_SAVE_ERROR); } // 3-S) ์ฌ์ด๋ ๋ฉ๋ด ์ ๊ท๋ฑ๋ก try{ if(newSideMenu != null && newSideMenu.size() != 0){ urlItemsNew = convertToUrlFileNames(newSideMenu); int newComplete = menuDao.menuRegister(storeIdx, urlItemsNew, "S"); /*if (newSideCnt != newComplete) throw new Exception();*/ } }catch (Exception e){ throw new BaseException(STORE_SIDEMENU_SAVE_ERROR); }
- ๋ฉ๋ด ์์
๊ฐ์ ์ด์ ๋ก ์ฃผ์ ์ฒ๋ฆฌ// 4-M) ๋ฉ์ธ ๋ฉ๋ด ์์ try{ if(updMainMenu != null && updMainMenu.size() != 0){ urlItemsUpd =convertToUrlFileNamesUpd(updMainMenu); int updComplete = menuDao.menuUpdate(urlItemsUpd); /*if (updMainCnt != updComplete) throw new Exception();*/ } }catch (Exception e){ throw new BaseException(STORE_MAINMENU_SAVE_ERROR); } // 4-S) ์ฌ์ด๋ ๋ฉ๋ด ์์ try{ if(updSideMenu != null && updSideMenu.size() != 0){ urlItemsUpd =convertToUrlFileNamesUpd(updSideMenu); int updComplete = menuDao.menuUpdate(urlItemsUpd); /*if (updMainCnt != updComplete) throw new Exception();*/ } }catch (Exception e){ throw new BaseException(STORE_SIDEMENU_SAVE_ERROR); }
- ๋ฉ๋ด ์ญ์ ์ฒ๋ฆฌ(์ํ ๊ฐ์ 'D'๋ก ์์ )
// 5) ๋ฉ์ธ๋ฉ๋ด, ์ฌ์ด๋ ๋ฉ๋ด ์ญ์ try{ if(delMainMenu != null && delMainMenu.size() != 0){ int delComplete = menuDao.menuDeActive(delMainMenu); /*if (delMainCnt != delComplete) throw new Exception();*/ } }catch (Exception e){ throw new BaseException(STORE_MAINMENU_SAVE_ERROR); } try{ if(delSideMenu != null && delSideMenu.size() != 0){ int delComplete = menuDao.menuDeActive(delSideMenu); /*if (delSideCnt != delComplete) throw new Exception();*/ } }catch (Exception e){ throw new BaseException(STORE_SIDEMENU_SAVE_ERROR); }
- ๊ฒฐ๊ณผ ๋ฐํ : ์ฒ๋ฆฌ๋ ๊ฐ๋ค์ ๋ชจ๋ ๊ฐ์๋ก ์นด์ดํธํ ๊ฒฐ๊ณผ
return new PatchMenuRes(storeIdx, (postMenuReq.getMainMenuItems() != null ? postMenuReq.getMainMenuItems().size(): 0) +(postMenuReq.getSideMenuItems() != null ? postMenuReq.getSideMenuItems().size(): 0), newMainCnt, updMainCnt, newSideCnt, updSideCnt ); }
- MenuDao.java
// ๋ฉ๋ด ๋ฑ๋ก ์ผ๊ณผ ์ฟผ๋ฆฌ public int menuRegister(int storeIdx, List<PostMenuUrlItem> mainMenuList, String mOrS) { String query = "INSERT INTO Menu (" + "storeIdx, " + "menu_name, " + "price, " + "composition," + "description," + "menu_url," + "status)\n" + "VALUES (?,?,?,?,?,?,?);"; this.jdbcTemplate.batchUpdate(query, mainMenuList, mainMenuList.size(), (PreparedStatement ps, PostMenuUrlItem menuItem) ->{ ps.setInt(1, storeIdx); ps.setString(2, menuItem.getMenuName()); ps.setInt(3, menuItem.getPrice()); ps.setString(4, menuItem.getComposition()); ps.setString(5, menuItem.getDescription()); ps.setString(6, menuItem.getMenuUrl()); ps.setString(7, mOrS); }); return mainMenuList.size(); }
// ๋ฉ๋ด ์์ ์ผ๊ด ์ฟผ๋ฆฌ (๋ฐํ : 2์ฐจ์ ๋ฐฐ์ด ํ ๊ฐ์) public int menuUpdate(List<PatchMenuUrlItem> menuItems){ String query= "UPDATE Menu\n" + "SET menu_name = ?,\n" + " price = ?,\n" + " composition = ?,\n" + " description = ?, \n" + " menu_url = ? \n" + "WHERE menuIdx = ?"; return this.jdbcTemplate.batchUpdate(query, menuItems, menuItems.size(), (PreparedStatement ps, PatchMenuUrlItem item) ->{ ps.setString(1, item.getMenuName()); ps.setInt(2, item.getPrice()); ps.setString(3, item.getComposition()); ps.setString(4, item.getDescription()); ps.setString(5, item.getMenuUrl()); ps.setInt(6, item.getMenuIdx()); } ).length; }
// ๋ฉ๋ด ์ญ์ ์ผ๊ด ์ฟผ๋ฆฌ(์ํ๊ฐ 'D')๋ก ๋ณ๊ฒฝ public int menuDeActive(List<PatchMenuItem> menuItems){ String query = "UPDATE Menu\n" + "SET status = 'D'\n" + "WHERE menuIdx = ?"; return this.jdbcTemplate.batchUpdate(query, menuItems, menuItems.size(), (PreparedStatement ps, PatchMenuItem item) ->{ ps.setInt(1, item.getMenuIdx()); } ).length; }
๋ง์ด์๋์์น๋นต ๊ฐ๊ฒฉ 5000 -> 4500, ๊ฟํ ์คํธ์๋นต ์ ๊ท๋ฑ๋ก
- ์๋ก๊ณ ์นจ ํด์ ์กฐํ๊ฐ ์๋๊ณ ,
- DB์๋ ๊ฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ฉ๋ ๋ชจ์ต
- S3์ ๋ํ ์ ๋ฐ์ ์ธ ์๋น์ค๋ฅผ ํ์ธํ ์ ์์๊ณ ,
- ์์ ์์๋ S3๋ฒํท์ ๊ฐ์ ๊ฐ์ ธ์์ ๋ค์ ์ ๋ ฅํ๋ ๊ฒ์ด ์๋๋ผ, ์๋ ๋ค์ด์๋ ๋ฒํท์ ํค๊ฐ์ ์ญ์ ํ๊ณ ์๋ก์ด ํ์ผ ์ด๋ฆ์ ๋ง๋ค์ด์ ๋ฒํท์ ์๋ก ๋ฑ๋กํ๋ ๋ฐฉ์์ผ๋ก ํ์๋ค.
- ์๋๋ฉด ์์ ํ๊ฒ๋๋ฉด, ์ด์ ์ด๋ฏธ์ง๋ ๋๋ฏธ๋ก ๋ฒํท์ ๋ค์ด์๊ฒ ๋๊ธฐ ๋๋ฌธ..
- ๊ฐ ์์ ์ ์ํด์ ์กฐํ์ ๋ฏธ๋ฆฌ ํด๋น ๋ฉ๋ด์ ๋ํ Idx๋ฅผ ์ฃผ๋ฉด์ ์์ ํ ์ค๋น๋ฅผ ๋ฏธ๋ฆฌ ํ๋๋ก ํจ!
- ์ด๋ฅผ ์ ์ดํดํ๋๋ก ๋ช ์ธ์์ ๋ช ์ํด์ ํ๋ก ํธ๋ ๊ฐ์ด ํ์๋ฅผ ์ ๋ง์น ์ ์์๋ค.
์ข๋ค