๊ตฌ๋งค์ ๋๋ฉ์ธ์ ๊ธฐ๋ฅ์ด ๋ฐ์ํ๋ฉด ํ ์คํธ๋ฅผ ์๋ํ๋๋ก ํ๊ฒ ๋ค..
- ๊ตฌ๋งค์๊ฐ ์ฃผ๋ฌธ์ ๋ํ ๋ฆฌ๋ทฐ๋ฅผ ๋จ๊ธธ ๋, ๋ฆฌ๋ทฐ์ ํ์ ๋ ๊ฐ์ด DB์ ์ ์ฅ๋๋๋ก ํ์๋ค!
- ๊ฐ๊ฒ ๋ด์ ์ ํจํ ๋ฆฌ๋ทฐ์ ๋ณ ํ์ ์ด ์ผ๋ง์ธ์ง ํ๊ท ์ ๋ด์ด์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ด.
- ํ๊ท ๋ฟ๋ง ์๋๋ผ ๊ฐ ๋ณ์ ํ์ ํผ์ผํฐ์ง๋ ๊ฐ์ด ์กฐํํ๊ฒ๋๋ค.
- ์๋ต ๋ฐ๋
StarCountRatio(์ด๋ค๋ณ์ , ๋ณ์ ๊ฐ์, ๋ณ์ ๋น์จ)
- ReviewController.java
- ReviewService.java
public GetReviewStarTotalRes reviewStarTotal(int sellerIdx) throws BaseException { // 1) ์ฌ์ฉ์ ๊ฐ๊ฒ ์กฐํ int storeIdx; try { storeIdx = storeDao.storeIdxBySellerIdx(sellerIdx); } catch (Exception e) { throw new BaseException(POST_STORES_NOT_REGISTERD); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. } // 2)๋ฆฌ๋ทฐ ๊ฐ์,๋ณ์ ํ๊ท ,๋ณ์ ๊ฐ์ง๊ณ ์ค๊ธฐ try{ GetReviewStarRes reviewStar = reviewDao.reviewStarTotal(storeIdx); List<StarCountRatio> starCountRatios = new ArrayList<>(); starCountRatios.add(new StarCountRatio("๋ณ 5๊ฐ", reviewStar.getStar5(), (int) (reviewStar.getStar5() * 1.0 / reviewStar.getReviews_total() * 100))); starCountRatios.add(new StarCountRatio("๋ณ 4๊ฐ", reviewStar.getStar4(), (int) (reviewStar.getStar4() * 1.0 / reviewStar.getReviews_total() * 100))); starCountRatios.add(new StarCountRatio("๋ณ 3๊ฐ", reviewStar.getStar3(), (int) (reviewStar.getStar3() * 1.0 / reviewStar.getReviews_total() * 100))); starCountRatios.add(new StarCountRatio("๋ณ 2๊ฐ", reviewStar.getStar2(), (int) (reviewStar.getStar2() * 1.0 / reviewStar.getReviews_total() * 100))); starCountRatios.add(new StarCountRatio("๋ณ 1๊ฐ", reviewStar.getStar1(), (int) (reviewStar.getStar1() * 1.0 / reviewStar.getReviews_total() * 100))); return new GetReviewStarTotalRes(storeIdx, reviewStar.getStar_average(), reviewStar.getReviews_total(), starCountRatios); }catch (Exception e){ throw new BaseException(DATABASE_ERROR); } }
JWTํ ํฐ์ ์กด์ฌํ๋ ์ฌ์ฉ์ ์๋ณ์๋ก ๊ฐ๊ฒ Idx๋ฅผ ์กฐํํ ํ, ๊ฐ๊ฒ์ ๋ฆฌ๋ทฐ๋ฅผ ์กฐํํ์ฌ ๊ณ์ฐ
- ReviewDao.java
public GetReviewStarRes reviewStarTotal(int storeIdx){ String query ="SELECT\n" + " ROUND(AVG(star),1) AS star_average,\n" + " COUNT(*) AS reviews_total,\n" + " COUNT(CASE WHEN star = 1 THEN 1 END) AS star1_count,\n" + " COUNT(CASE WHEN star = 2 THEN 1 END) AS star2_count,\n" + " COUNT(CASE WHEN star = 3 THEN 1 END) AS star3_count,\n" + " COUNT(CASE WHEN star = 4 THEN 1 END) AS star4_count,\n" + " COUNT(CASE WHEN star = 5 THEN 1 END) AS star5_count\n" + " FROM Review\n" + "WHERE storeIdx = ? AND status != 'D'"; return this.jdbcTemplate.queryForObject(query, (rs, rowNum) -> new GetReviewStarRes( storeIdx, rs.getDouble("star_average"), rs.getInt("reviews_total"), rs.getInt("star1_count"), rs.getInt("star2_count"), rs.getInt("star3_count"), rs.getInt("star4_count"), rs.getInt("star5_count") ) ,storeIdx); }
๊ฐ๊ฒ Id ๊ธฐ์ค ๋ณ์ ์ ์ง๊ณ ํ๊ท ์ผ๋ก ์กฐํํ๊ณ , ๊ฐ ๋ณ์ ์ ๋ํด์ ๊ฐ์๋ฅผ ์นด์ดํธํ๋ค.
์นด์ดํธํ ๋ณ์ ์ ๊ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ฒด ๊ฐ์์์ ์ผ๋งํผ์ ๋น์จ์ ๊ฐ์ง๋์ง ์ฐ์ฐํ์ฌ ๋ฐํํ ์ค๋น๋ฅผ ํ๊ธฐ ์ํด ์ฟผ๋ฆฌ๋ฅผ ์์ฑํจ
- ๊ฐ ๋ฆฌ๋ทฐ๋ ๋๊ฐ ์์ฑํ์๋์ง, ํด๋น ๋ฆฌ๋ทฐ์ ํ์ , ์ด๋ค ๋ฉ๋ด๋ฅผ ๋ช๊ฐ ๊ตฌ๋งคํ๋์ง, ๋ฆฌ๋ทฐ ๊ธ, ์ฌ์ง์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
- ํด๋น ๋ถ๋ถ์ ์กฐํํ๊ธฐ ์ํด ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์๊ณ , ๋ฆฌ๋ทฐ ์กฐํ ์ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ธํ์๋ค.
- ๋ฆฌ๋ทฐ์ ์ํ์๋ ์ผ๋ฐ('A'), ์ ๊ณ ๋('R'), ์ญ์ ๋('D') 3๊ฐ์ง๊ฐ ์กด์ฌํด์, ์ ๊ณ ๋์๋๋ผ๋ ์์ง ๊ด๋ฆฌ์๊ฐ ์ญ์ ๋ฅผ ํ์ง ์์ ์ํ๋ผ๋ฉด ์กฐํ๋ฅผ ํ ์ ์๋๋ก ํจ.
- ์๋ต ๋ฐ๋
- ์ปจํธ๋กค๋ฌ
- ์๋น์ค
- jwt ๋ด ์กด์ฌํ๋ userIdx๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ์ ๊ฐ๊ฒ Idx ์กฐํ ํ, ์ด์ฉํ์ฌ ๊ฐ๊ฒ์ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ์กฐํ
๋ฆฌ๋ทฐ์ ๋ธ๋ฆฐ ๋ฉ๋ด๋ ์ถ๊ฐ๋ก ์กฐํํด์ผ ํ๊ธฐ ๋๋ฌธ์, orderIdx๋ ๊ฐ์ด ์กฐํํ์๋ค.public GetReviewRes getReview(int sellerIdx) throws BaseException { // 1) ์ฌ์ฉ์ ๊ฐ๊ฒ ์กฐํ int storeIdx; try { storeIdx = storeDao.storeIdxBySellerIdx(sellerIdx); } catch (Exception e) { throw new BaseException(POST_STORES_NOT_REGISTERD); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. } // 2) ๋ฆฌ๋ทฐ ์กฐํ List<ReviewItems> reviewItems; try { reviewItems = reviewDao.reviewItems(storeIdx); } catch (Exception e) { throw new BaseException(BaseResponseStatus.RESPONSE_ERROR); // ๋ฆฌ๋ทฐ ์กฐํ์ ์คํจํ์์ต๋๋ค. }
- ๋ฆฌ๋ทฐ ๋ด์ ์กด์ฌํ๋ ๋ฆฌ๋ทฐ ์ฌ์ง์ s3 ์๋น์ค๋ฅผ ์ด์ฉํ์ฌ url์ ๊ฐ์ ธ์ค๊ณ ,
๋ฆฌ๋ทฐ ์ฃผ๋ฌธ ๋ด์ ๋ฉ๋ด ๋ชฉ๋ก์ ์ฃผ๋ฌธ Idx๋ฅผ ๊ธฐ์ค์ผ๋ก ์กฐํํ๊ธฐ// ๋ฆฌ๋ทฐ์ ์ฌ์ง ์ ๋ณด ์์ผ๋ฉด s3์์ url ๊ฐ์ ธ์ค๊ธฐ try{ for (ReviewItems item : reviewItems) { if(item.getReview_url() != null ) item.setReview_url(""+s3Client.getUrl(bucketName, item.getReview_url())); } }catch (Exception e) { throw new BaseException(BaseResponseStatus.RESPONSE_ERROR); // ๋ฆฌ๋ทฐ ์ด๋ฏธ์ง url ์คํจํ์์ต๋๋ค. } // 3) ๋ฆฌ๋ทฐ ์ฃผ๋ฌธ ๋ด์ ๋ฉ๋ด ๋ชฉ๋ก ์กฐํ try { for (ReviewItems item : reviewItems) { item.setOrderTodayMenu(reviewDao.orderTodayMenus(storeIdx, item.getOrderIdx())); } return new GetReviewRes(storeIdx, reviewItems); } catch (Exception e) { //System.out.println("exception2: " + e); throw new BaseException(BaseResponseStatus.RESPONSE_ERROR); // ๋ฆฌ๋ทฐ ์กฐํ์ ์คํจํ์์ต๋๋ค. } }
- Dao
// ๋ฆฌ๋ทฐ ๋ชฉ๋ก์ ์กฐํ -> ์ฃผ๋ฌธIdx, ๋ฆฌ๋ทฐIdx, ๊ตฌ๋งค์, ๋ฆฌ๋ทฐํ์ , ๋ฆฌ๋ทฐ๋ด์ฉ, ๋ฆฌ๋ทฐ๋ต๊ธ, ๋ฆฌ๋ทฐ์ด๋ฏธ์งURL public List<ReviewItems> reviewItems(int storeIdx) { String query = "SELECT\n" + " O.orderIdx,\n" + " R.reviewIdx,\n" + " C.name,\n" + " R.star ,\n" + " R.contents, R.comment, R.review_url\n" + "FROM Orders O\n" + "JOIN Review R on O.orderIdx = R.orderIdx\n" + "JOIN Customers C ON R.customerIdx = C.customerIdx\n" + "WHERE\n" + " R.storeIdx = ?\n" + " AND O.status = 'A'\n" + " AND R.status <> 'D'\n" + "ORDER BY reviewIdx;"; // 23.07.13 ์ํ๊ฐ ๊ณ ๊ฐ์ด์ด ๋ฆฌ๋ทฐ ์ ๋ณด ์์ผ๋ฏ๋ก ์์ ํ์ return this.jdbcTemplate.query(query, (rs, rowNum) -> new ReviewItems( rs.getInt("orderIdx"), rs.getInt("reviewIdx"), rs.getString("name"), rs.getInt("star"), rs.getString("contents"), rs.getString("comment") == null? "" : rs.getString("comment"), rs.getString("review_url"), null ), storeIdx); }
- ๋ฆฌ๋ทฐ ์กฐํ์ ์๋ต์ผ๋ก ๋ณด๋ด์คฌ๋ reviewIdx์ ํ๋งค์๊ฐ ๋จ ๋ต๊ธ์ ๋ฐ๋๋ก ๋ฐ์์,
- ํด๋น ๋ฆฌ๋ทฐ๊ฐ ๋ต๊ธ์ ๋ฌ ์ ์๋ ์ฌ๋ฐ๋ฅธ ํ์์ ๋ฆฌ๋ทฐ์ธ์ง ๊ฒ์ฆ์ ํ๊ณ ,
- DB์ Review ํ ์ด๋ธ์ comment ์นผ๋ผ์ ๊ฐ์ ์ฑ์์ฃผ๋ ๋์์ ์ํํจ,
- ๋ฆฌ๋ทฐ ์กฐํ์ ์๋ต์ผ๋ก ๋ณด๋ด์คฌ๋ reviewIdx์ ํ๋งค์๊ฐ ๋จ ๋ต๊ธ์ ๋ฐ๋๋ก ๋ฐ์์,
- DB Reviewํ ์ด๋ธ์ ํด๋น ํ์ ์ํ๊ฐ์ 'R'๋ก ๋ฐ๊ฟ์ค
ํ์ ๊ด๋ฆฌ์์์, ์ ๊ณ ๋ ๋ฆฌ๋ทฐ๋ฅผ ์๋ณํ๊ธฐ ์ํ ์ํ๊ฐ