- ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ์ ๋ณด๋ฉด ์ฅ๋ฐ๊ตฌ๋์๋ ๋ฐ๋์ ๊ฐ์ ๊ฐ๊ฒ์ ๋ฉ๋ด๋ง ๋ด์ ์ ์๋ค๊ณ ๋ฌ๋ค.
- ๊ทธ๋์ ๋๊ฐ์ด ๋ฉ๋ด๋ฅผ ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ ๋, ํ์ฌ ๊ตฌ๋งค์์ ์ฅ๋ฐ๊ตฌ๋ ์ํ๋ฅผ ํ์ธํ๊ณ ๊ฐ์ ๊ฐ๊ฒ์ ๋ฉ๋ด๋ง ๋ด์ ์ ์๋๋ก ํ์ธ์ ํ๊ธฐ๋ก ํจ.
- ์์ฒญ๋ฐ๋
: storeIdx (๊ฐ๊ฒ Idx) -> ๋จ์ด ๋ฉ๋ด์ ํ ๋น๋ ๊ฐ๊ฒ์ Idx
- ์ปจํธ๋กค๋ฌ
- ์๋น์ค
public BasketStoreCheckRes storeCheck(int customerIdx, BasketStoreCheckReq checkReq) throws BaseException { // 1) ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ฒจ์๋์ง ๋จผ์ ์กฐํ // ๊ฐ์ ๊ฐ๊ฒ๋ง ์ฅ๋ฐ๊ตฌ๋ ๋ด์ ์ ์๋๋ก ํ๊ธฐ ์ํจ. List<BasketExist> basketExist; try{ basketExist = basketDao.checkBaketAlreadyExists(customerIdx); } catch (Exception e){ throw new BaseException(DATABASE_ERROR); // ์ฅ๋ฐ๊ตฌ๋ ์กฐํ ์คํจ } // 2) ์ฅ๋ฐ๊ตฌ๋ ์ถ๊ฐ ๋ฐฉ์ ์ค์ // 2-1) ํ์ฌ ๋ด์๋์ ์ฅ๋ฐ๊ตฌ๋๊ฐ ์์ ๋ if (basketExist.size() == 0){ // sameStoreCheck = 0 ์ด๋ฉด ๊ทธ๋ฅ ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ ๊ฐ๋ฅ return new BasketStoreCheckRes(0, 0); } // 2-2) ํ์ฌ ๋ด์๋์ ์ฅ๋ฐ๊ตฌ๋๊ฐ ์์ ๋ else{ // 2-2-1) ๊ฐ์ ๊ฐ๊ฒ ๋ฉ๋ด๋ฅผ ์ฅ๋ฐ๊ตฌ๋์ ๋ด์๋ if(basketExist.get(0).getStoreIdx() == checkReq.getStoreIdx()){ // sameStoreCheck = 0 ์ด๋ฉด ๊ทธ๋ฅ ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ ๊ฐ๋ฅ return new BasketStoreCheckRes(basketExist.get(0).getStoreIdx(), 0); } // 2-2-2) ๋ค๋ฅธ ๊ฐ๊ฒ ๋ฉ๋ด๋ฅผ ์ฅ๋ฐ๊ตฌ๋์ ๋ด์๋ else { // sameStoreCheck = 1 ์ด๋ฉด ๊ฐ์ ๊ฐ๊ฒ๋ง ๋ด๊ธฐ ๊ฐ๋ฅํ๋ค๊ณ ์๋ฆผ return new BasketStoreCheckRes(basketExist.get(0).getStoreIdx(), 1); } } }
- ๊ตฌ๋งค์์ ํ์ฌ ์ฅ๋ฐ๊ตฌ๋ ์ํ๋ฅผ ์กฐํ.
(์ฒ์๋ถํฐ ๋ฌด์กฐ๊ฑด ๊ฐ์ ๊ฐ๊ฒ์ ๋ฉ๋ด๋ง ๋ด์ ์ ์๋๋ก ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ํด๋์ ์ฅ๋ฐ๊ตฌ๋์ ์์ ์๋ก๋ค๋ฅธ๊ฐ๊ฒ์ ๋ฉ๋ด๊ฐ ์กด์ฌํ๋์ผ์ X)- ํ์ฌ ๋ด์ ๋์ ์ฅ๋ฐ๊ตฌ๋๊ฐ ์์ ๋๋ ์ถ๊ฐ ๊ฐ๋ฅ์ํ.
- ํ์ฌ ๋ด์๋์ ์ฅ๋ฐ๊ตฌ๋๊ฐ ์์๋ ๋ด๊ธด ๋ฉ๋ด์ ๋ด์ ๋ฉ๋ด์ ๊ฐ๊ฒ๊ฐ ๊ฐ๋ค๋ฉด ๋ด๊ธฐ ๋ถ๊ฐ๋ฅ.
- Dao
// ํ์ฌ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ๋ฉ๋ด๋ฅผ ํ์ธ (status != 'A' : ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ฒผ๋ค๊ฐ ์ฌ๋ผ์ง ๋ฉ๋ด๋ค) public List<BasketExist> checkBaketAlreadyExists(int customerIdx) { String query = "SELECT * FROM Basket WHERE customerIdx = ? AND status = 'A'"; return this.jdbcTemplate.query(query, (rs, rowNum) -> new BasketExist( rs.getInt("basketIdx"), rs.getInt("storeIdx"), rs.getInt("todaymenuIdx"), rs.getInt("cnt"), rs.getString("status") ), customerIdx); }
ํ์ฌ ์ฌ์ฉ์๋ ์ฅ๋ฐ๊ตฌ๋๋ฅผ ๋ด์๊ฒ ์์ด์ ๋ชจ๋ 0์ด๋ผ๋ ์ํ๊ฐ์ด ๋ฐํ
- ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ผ๋ ค๋ ๋ฉ๋ด๊ฐ
- ์ฅ๋ฐ๊ตฌ๋๊ฐ ๋น์ด์๊ฑฐ๋,
- ์ฅ๋ฐ๊ตฌ๋๊ฐ ๊ฐ์ ๊ฐ๊ฒ์ ๋ฉ๋ด๋ก ์ฐจ์๊ฑฐ๋,
- ์ฅ๋ฐ๊ตฌ๋๊ฐ ๋ค๋ฅธ ๊ฐ๊ฒ์ ๋ฉ๋ด๋ก ์ฐจ์์ ๋
์ด ์ธ๊ฐ์ง๋ก ๊ตฌ๋ถ๋๋๋ฐ, ๋ค๋ฅธ ๊ฐ๊ฒ์ ๋ฉ๋ด๋ก ์ฐจ์๋ ๊ฒฝ์ฐ์๋ ์ฅ๋ฐ๊ตฌ๋๋ฅผ ๋น ์ฅ๋ฐ๊ตฌ๋์ ์๋ก ๋ด๋ ๋ก์ง์ ๊ตฌํํ์๋ค.
- ์์ฒญ ๋ฐ๋
- sameStoreCheck ๋ [POST] /jat/app/basket/same-store ์์ ๋ฐํ๋ฐ์ ํ์ฌ ์ฅ๋ฐ๊ตฌ๋์ ๋ํ ์ํ๋ฅผ ๋ํ๋ธ๋ค.
- ์ปจํธ๋กค๋ฌ
- ์๋น์ค
@Transactional(rollbackFor = BaseException.class) public PostBasketRes postBasket(int customerIdx, PostBasketReq basketReq) throws BaseException { int basketIdx = 0; try{ if (basketReq.getSameStoreCheck() == 1){ basketDao.renewBasket(customerIdx); // ์๋ ๋ด์๋จ๋ ์ฅ๋ฐ๊ตฌ๋ ์ญ์ } basketIdx = basketDao.postBasket(customerIdx, basketReq); }catch (Exception e){ throw new BaseException(DATABASE_ERROR); // ์ฅ๋ฐ๊ตฌ๋์ ๋ฉ๋ด ๋ด๊ธฐ๋ฅผ ์คํจํ์์ต๋๋ค. } return new PostBasketRes(basketIdx); }
- ํ์ธํ ์ฅ๋ฐ๊ตฌ๋ ์ํ๊ฐ ์ด๋ฏธ ๋ค๋ฅธ ๊ฐ๊ฒ์ ๋ฉ๋ด๊ฐ ๋ด๊ฒจ์๋ค๋ฉด, ํ์ฌ ์ฅ๋ฐ๊ตฌ๋๋ฅผ ๋ชจ๋ ์ญ์ ํ๊ณ ,
- ๊ทธ ๋ค์ ์ฅ๋ฐ๊ตฌ๋์ ๋ฉ๋ด๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ๋ก์ง์ ๊ตฌํํ์๋ค.
- Dao
// ์ฅ๋ฐ๊ตฌ๋ ์ด๊ธฐํ public void renewBasket(int customerIdx) { String query = "UPDATE Basket\n" + " SET status = 'D'\n" + "WHERE customerIdx = ? \n" + "AND status <> 'D'"; this.jdbcTemplate.update(query, customerIdx); }
// ์ฅ๋ฐ๊ตฌ๋์ ๋จ์ด๋ฉ๋ด ๋ด๊ธฐ public int postBasket(int customerIdx, PostBasketReq basketReq) { String query = "INSERT INTO Basket(storeIdx, customerIdx, todaymenuIdx, cnt)\n" + "VALUES(?, ?, ?, ?)"; Object[] params = new Object[]{ basketReq.getStoreIdx(), customerIdx, basketReq.getTodaymenuIdx(), basketReq.getCount() }; this.jdbcTemplate.update(query, params); String lastInsertIdQuery = "select last_insert_id()"; return this.jdbcTemplate.queryForObject(lastInsertIdQuery,int.class); }
- ์ฅ๋ฐ๊ตฌ๋์ ๋จ์ด๋ฉ๋ด๋ฅผ ๋ด์์ผ๋ ํ์ธ๋ ํด์ผํ๋ค.
- ์ฃผ๋ฌธ ์ ๋จ๊ณ๋ค
- ์๋ต ๋ฐ๋
- ์ปจํธ๋กค๋ฌ
- ์๋น์ค
public GetBasketRes getBasket(int customerIdx) throws BaseException{ // 1. ์ฅ๋ฐ๊ตฌ๋ ์กฐํ List<BasketItemFromDao> basketItemsDao; try{ basketItemsDao = basketDao.getBasket(customerIdx); }catch (Exception e){ throw new BaseException(DATABASE_ERROR); // ์ฅ๋ฐ๊ตฌ๋์ ์กฐํ์คํจ. } // API ์๋ต ํํ๋ก ์ ํ // ์ด ๋ฉ๋ด ๋ฐ ๊ฐ๊ฒฉ ๋ง๋ค๊ธฐ List<BasketItem> basketItems = new ArrayList<>(); int totalMenuCount = 0, totalMenuPrice = 0; try{ if(basketItemsDao.size() != 0){ for (BasketItemFromDao basketItem :basketItemsDao){ totalMenuCount += 1; // ๋ฉ๋ด ์ข ๋ฅ ๊ฐ์ totalMenuPrice += basketItem.getTodayPrice() * basketItem.getCount(); // ์ด ์ฃผ๋ฌธ ๊ฐ๊ฒฉ basketItems.add( new BasketItem(basketItem.getStoreIdx(), basketItem.getTodaymenuIdx(), basketItem.getBaksetIdx(), basketItem.getMenuUrl(), basketItem.getMenuName(), basketItem.getCount(), basketItem.getPrice(), basketItem.getDiscount(), basketItem.getTodayPrice()) ); } } }catch (Exception e){ throw new BaseException(DATABASE_ERROR); // ์ฅ๋ฐ๊ตฌ๋ ๋ฐํ ์คํจ } // menu url ๊ฐ์ ธ์ค๊ธฐ try{ if(basketItems.size() != 0){ for(BasketItem basketItem : basketItems){ if (basketItem.getMenuUrl() != null && !basketItem.getMenuUrl().equals("")){ basketItem.setMenuUrl(""+s3Client.getUrl(bucketName, basketItem.getMenuUrl())); } } } }catch (Exception e){ throw new BaseException(DATABASE_ERROR); // ๋ฉ๋ด ์ฌ์ง ์กฐํ ์คํจ } // ๊ฐ๊ฒ url ๊ฐ์ ธ์ค๊ธฐ String storeUrl; try{ storeUrl = basketDao.getStoreUrl(basketItemsDao.get(0).getStoreIdx()); storeUrl = ""+s3Client.getUrl(bucketName, storeUrl); }catch (Exception e){ throw new BaseException(DATABASE_ERROR); // ๋ฉ๋ด ์ฌ์ง ์กฐํ ์คํจ } try{ GetBasketRes basketRes = new GetBasketRes(0, null, null, 0,0, null); if(basketItemsDao.size() != 0){ basketRes.setStoreIdx(basketItemsDao.get(0).getStoreIdx()); basketRes.setStoreName(basketItemsDao.get(0).getStoreName()); basketRes.setStoreUrl(storeUrl); basketRes.setTotalMenuCount(totalMenuCount); basketRes.setTotalMenuPrice(totalMenuPrice); basketRes.setBasketItems(basketItems); } return basketRes; }catch (Exception e){ throw new BaseException(DATABASE_ERROR); // ์ฅ๋ฐ๊ตฌ๋ ๊ฒฐ๊ณผ ์๋ฌ } }
- ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ๋จ์ด ๋ฉ๋ด๋ค์ ๊ธฐ๋ณธ์ ๋ณด๋ฅผ ์กฐํ
- ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ๋จ์ด ๋ฉ๋ด๋ค์ ์ด ํฉ ๊ฐ๊ฒฉ์ ์์ฑ
- ์ฅ๋ฐ๊ตฌ๋ ํ๋ฉด์์ ๋ณผ ๋จ์ด ๋ฉ๋ด์ ์ด๋ฏธ์ง URL ์ ์์ฑ
- ์ฅ๋ฐ๊ตฌ๋ ํ๋ฉด์ ๋ณด์ด๋ ๊ฐ๊ฒ์ ์์ ๊ฐ๊ฒ์ฌ์ง์ ์ฑ์ธ ์ด๋ฏธ์ง URL ์์ฑ
- ์์ฑํ ๋ฐ์ดํฐ๋ค์ ์๋ต๊ฐ์ผ๋ก ๋ฐํ
- Dao
// ์ฅ๋ฐ๊ตฌ๋์์ ๊ธฐ๋ณธ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ (๊ฐ๊ฒ Id, ๊ฐ๊ฒ ์ด๋ฆ, ๋จ์ด๋ฉ๋ดId, ์ฅ๋ฐ๊ตฌ๋id, ์ฅ๋ฐ๊ตฌ๋ ๋ด์๊ฐ์, ๊ฐ๊ฒฉ, s3๊ฐ์ฒดํค, ๋ฉ๋ด์ด๋ฆ, ๋จ์ด๋ฉ๋ด ๊ฐ๊ฒฉ, ๋จ์ด๋ฉ๋ด ํ ์ธ์จ) public List<BasketItemFromDao> getBasket(int customerIdx) { String query ="" + "SELECT\n" + " B.storeIdx, store_name,\n" + " B.todaymenuIdx, B.basketIdx, B.cnt,\n" + " M.price as originPrice,\n" + " M.menu_url, M.menu_name,\n" + " TM.price as discountedPrice,\n" + " TM.discount\n" + "FROM Basket B\n" + "LEFT JOIN TodayMenu TM on B.todaymenuIdx = TM.todaymenuIdx\n" + "LEFT JOIN Menu M on TM.menuIdx = M.menuIdx AND M.status != 'D'\n" + "LEFT JOIN Stores S on B.storeIdx = S.storeIdx AND S.status = 'A'\n" + "WHERE customerIdx = ?\n" + " AND B.status = 'A'"; return this.jdbcTemplate.query(query, (rs, rowNum) -> new BasketItemFromDao( rs.getInt("storeIdx"), rs.getString("store_name"), rs.getInt("todaymenuIdx"), rs.getInt("basketIdx"), rs.getString("menu_url"), rs.getString("menu_name"), rs.getInt("cnt"), rs.getInt("originPrice"), rs.getInt("discount"), rs.getInt("discountedPrice") ), customerIdx); }
์๊น ๋ฉ๋ด ๋ด๊ธฐ์์ ๋ด์ ๋จ์ด๋ฉ๋ด 240 ๋ฒ์ธ ์๊ธ ๋ฒํฐ๋กค์ด ์ ๋ค์ด๊ฐ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- ์๋ต๋ฐ๋
- ์ปจํธ๋กค๋ฌ
- ์๋น์ค
- Dao
๊ฐ๋จํ๊ฒ ๊ฐ์๋ฅผ ์ง๊ณํจ์๋ก ๊ฐ์ ธ์ด
์ฅ๋ฐ๊ตฌ๋์ ๋จ์ด ๋ฉ๋ด๋ฅผ ๋ด์ ๋, ๊ฐ์ ๊ฐ๊ฒ์ ๋ฉ๋ด์ธ์ง ๋ค๋ฅธ๊ฐ๊ฒ์ ๋ฉ๋ด์ธ์ง ํ๋ณํ๋ ๋ก์ง์ ์ฒ์์ ๋ ์ฌ๋ฆฌ๊ธฐ ํ๋ค์๋ค.
์ฒ์์๋ ๋ด์ ๋์ ๊ฐ์ ๊ฐ๊ฒ์ ๋ฉ๋ด์ธ์ง ํ๋ณํ๋ ๊ฒ์ ํ๋์ ๊ธฐ๋ฅ์ผ๋ก ์๊ฐํด api๋ฅผ ํ๋๋ก ๋ง๋ค์์ง๋ง ๊ตฌํํ๋ ๋ก์ง์์ ์กฐ๊ฑด๋ฌธ์ด ๋๋ฌด ๊ธธ๊ณ ๋๋ฌ์์ ธ์ ๋๋ก ๋๋๊ฒ ๋จ.