[Spring Legacy] 리뷰 작성 로직

won·2023년 7월 12일
0

개요

리뷰 작성 로직을 만든다

  • 리뷰는 마이페이지 작성가능 리뷰란에서 작성가능 하다.
  • 작성한 리뷰는 작성한 리뷰 란에서 볼 수 있다.
  • 신청 1건당 1개의 리뷰를 적을 수 있다.
  • 적은 리뷰는 수정이 가능하다.
  • 적은 리뷰는 삭제하면 다시 되돌리거나 재작성할 수 없다.
  • 리뷰를 작성하면 해당 파티의 파티장의 칭찬온도가 0.5도 올라가거나 내려간다.
  • 리뷰를 수정할 때 만족도를 수정하면 파티장의 온도도 변한다.

DB

  • application 테이블에 a_review 컬럼을 CHAR(1)의 자료형으로 둔다.-
    - 신청을 할 때 기본값은 F이다
    - 리뷰를 적으면 T로 변경된다.
  • a_review값이 F인 신청건은 작성 가능 리뷰 란에,
    a_review값이 T인 신청 건은 작성한 리뷰 란에 들어간다.

Mapper

reviewDao.xml

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.lgy.shallweshare.review.dao.ReviewDao">
	<insert id="reviewWrite" parameterType="hashmap">
		insert into REVIEW(review_id,a_id,p_id, u_id, review_u_id, review_satisfy, review_content, review_created) 
		values( NVL((select max (review_id)from review),0)+1,#{a_id},#{p_id}, #{u_id}, #{review_u_id}, #{review_satisfy}, #{review_content}, SYSDATE)
		
	</insert>

	<select id="getReviewInfo" parameterType="hashmap" resultType="com.lgy.shallweshare.review.dto.ReviewDto">
		select 
			review_id,
			u_id, 
			review_u_id,
			p_id,
			review_satisfy,
			review_content,
			review_created from
		REVIEW where review_id=#{review_id}
	</select>

	<update id="reviewModify" parameterType="hashmap">
		update review set
			review_satisfy = #{review_satisfy},
			review_content = #{review_content},
			review_created = SYSDATE
		where review_id = #{review_id}
	</update>
	
	<delete id="reviewDelete" parameterType="hashmap">
		delete from review
		 where review_id=#{review_id}
	</delete>
	
	<update id="updateTemperatureUp" parameterType="hashmap">
		update users set
			u_temperature = u_temperature + 0.5
		where
			u_id = #{review_u_id,jdbcType=VARCHAR}
	</update>
	
	<update id="updateTemperatureDown" parameterType="hashmap">
		update users set
			u_temperature = u_temperature - 0.5
		where
			u_id = #{review_u_id,jdbcType=VARCHAR}
	</update>
</mapper>

MyPageDao.xml

<select id="getWritableApplicationList" resultType="com.lgy.shallweshare.mypage.dto.ApplicationPartyDto">
		select
		    a.a_id
			,a.u_id
			,a.p_id
			,p.p_title
			,a.a_price
			,a.a_created
			,a.a_payment
			,a.a_completed
			,a.a_review
		from application a, party p
		where a.u_id= #{u_id, jdbcType=VARCHAR}
		and a.p_id=p.p_id
		and a_completed = 'T'
		and a_review = 'F'
	</select>
	
	<update id="updateReviewAvailability" parameterType="hashmap">
		update application set 
			a_review = 'T'
		where a_id= #{a_id, jdbcType = VARCHAR}
	</update>

Dao

MyPageDao.java

 getWritableApplicationList(HashMap<String, String> param);
	

ReviewDao.java

public interface ReviewDao {
	public void reviewWrite(HashMap<String, String> param);
	public ReviewDto getReviewInfo(String review_id);
	public void reviewModify(HashMap<String, String> param);
	public void reviewDelete(HashMap<String, String> param);
	public ArrayList<ReviewDto> getPersonalReviewList(HashMap<String, String> param);
	public void updateTemperatureDown(HashMap<String, String> param);
	public void updateTemperatureUp(HashMap<String, String> param);
}

Service

ReviewService


public interface ReviewService {
	public void reviewWrite(HashMap<String, String> param);
	public ReviewDto getReviewInfo(String review_id);
	public void reviewModify(HashMap<String, String> param);
	public void reviewDelete(HashMap<String, String> param);

	public void updateTemperatureDown(HashMap<String, String> param);
	public void updateTemperatureUp(HashMap<String, String> param);
}

MyPageService

public ArrayList<ReviewDto> getWrittenReviewList(HashMap<String, String> param);
	public ArrayList<ApplicationPartyDto> getWritableApplicationList(HashMap<String, String> param);

ServiceImpl

ReviewServiceImpl

@Slf4j
@Service("ReviewService")
public class ReviewServiceImpl implements ReviewService {

	@Autowired
	private SqlSession sqlSession;

	@Override
	public void reviewWrite(HashMap<String, String> param) {
		log.info("@# ReviewServiceImpl.write() start");
		ReviewDao dao = sqlSession.getMapper(ReviewDao.class);
		dao.reviewWrite(param);
		log.info("@# ReviewServiceImpl.write() end");
	}

	@Override
	public ReviewDto getReviewInfo(String review_id) {
		log.info("@# ReviewServiceImpl.contentView() start");
		ReviewDao dao = sqlSession.getMapper(ReviewDao.class);
		ReviewDto dto = dao.getReviewInfo(review_id);
		log.info("@# ReviewServiceImpl.contentView() end");
		return dto;
	}

	@Override
	public void reviewModify(HashMap<String, String> param) {
		log.info("@# ReviewServiceImpl.modify() start");
		ReviewDao dao = sqlSession.getMapper(ReviewDao.class);
		dao.reviewModify(param);
	}

	@Override
	public void reviewDelete(HashMap<String, String> param) {
		log.info("@# ReviewServiceImpl.delete() start");
		ReviewDao dao = sqlSession.getMapper(ReviewDao.class);
		dao.reviewDelete(param);
		log.info("@# ReviewServiceImpl.delete() end");
	}
	
	@Override
	public void updateTemperatureDown(HashMap<String, String> param) {
		ReviewDao dao = sqlSession.getMapper(ReviewDao.class);
		dao.updateTemperatureDown(param);
	}
	@Override
	public void updateTemperatureUp(HashMap<String, String> param) {
		// TODO Auto-generated method stub
		ReviewDao dao = sqlSession.getMapper(ReviewDao.class);
		dao.updateTemperatureUp(param);
	}
}

MyPageServiceImpl

@Override
	public ArrayList<ApplicationPartyDto> getWritableApplicationList(HashMap<String, String> param) {
		MyPageDao dao = sqlSession.getMapper(MyPageDao.class);
		return dao.getWritableApplicationList(param);
	}

Controller

ReviewController


@Controller
@Slf4j
public class ReviewController {

	@Autowired
	private ReviewService reviewService;
	
	@Autowired
	private UsersService usersService;

	@Autowired
	private MyPageService myPageService;
	
	@Autowired
	private PartyService partyService;
	
	/** 리뷰 쓰기 페이지 **/
	@RequestMapping("review/write")
	public String write_view(@RequestParam HashMap<String, String> param,Model model) {
		log.info("@# Controller:review/write");
		int u_id = partyService.getPartyInfo(param).getU_id();
		UsersDto master = usersService.getUserInfo(u_id);
		model.addAttribute("master",master);
		
		PartyDto party = partyService.getPartyInfo(param);
		model.addAttribute("party",party);
		return "review/reviewWrite_view";
	}

	/** 리뷰 쓰기 로직 **/
	@RequestMapping("review/write_process")
	public String write(@RequestParam HashMap<String, String> param, HttpServletRequest request) {
		HttpSession session = request.getSession();
		
		log.info("@# Controller: reviewWrite");
		reviewService.reviewWrite(param);
		myPageService.updateReviewAvailability(param);
		log.info(param.get("review_satisfy"));
		if(param.get("review_satisfy").equals("T")){
			reviewService.updateTemperatureUp(param);
		}else if(param.get("review_satisfy").equals("F")){
			reviewService.updateTemperatureDown(param);
		}
		return "redirect:../mypage/writable-reviews?u_id="+session.getAttribute("u_id");
	}

	/******************* 리뷰 수정 페이지 ***************************/
	@RequestMapping("review/modify")
	public String content_view(@RequestParam HashMap<String, String> param, Model model) {
		ReviewDto dto = reviewService.getReviewInfo(param.get("review_id"));
		model.addAttribute("review", dto);
		
		
		UsersDto master  = usersService.getUserInfo(Integer.parseInt(dto.getReview_u_id()));
		model.addAttribute("master",master);
		PartyDto party = partyService.getPartyInfo(dto.getP_id());
		model.addAttribute("party",party);
		return "review/reviewModifyView";
	}

	/******************* 리뷰 수정 로직 ***************************/
	@RequestMapping("review/modify_process")
	public String modify(@RequestParam HashMap<String, String> param,HttpServletRequest request) {
		log.info("@@@###modify start");
		ReviewDto originalReview =  reviewService.getReviewInfo(param.get("review_id"));
		log.info(originalReview.getReview_satisfy());
		log.info(param.get("review_satisfy"));
		HttpSession session = request.getSession();
		reviewService.reviewModify(param);
		
		if(!originalReview.getReview_satisfy().equals(param.get("review_satisfy"))){
			if(param.get("review_satisfy").equals("T")){
				reviewService.updateTemperatureUp(param);
			}else if(param.get("review_satisfy").equals("F")){
				reviewService.updateTemperatureDown(param);
			}
		}
		return "redirect:../mypage/written-reviews?u_id="+session.getAttribute("u_id");
	}

	/******************* 리뷰 삭제 페이지 ***************************/
	@RequestMapping("review/delete_process")
	public String delete(@RequestParam HashMap<String, String> param,HttpServletRequest request) {
		log.info("@@@###delete");
		HttpSession session = request.getSession();
		reviewService.reviewDelete(param);
		return "redirect:../mypage/written-reviews?u_id="+session.getAttribute("u_id");
	}

	/** 개별 리뷰 페이지 **/
	@RequestMapping("review/review_list")
	public String myReview(@RequestParam HashMap<String, String> param, HttpSession session, Model model) {
		UsersDto usersdto = usersService.getUserInfo(Integer.parseInt(param.get("u_id")));
		model.addAttribute("users", usersdto);
		
		ArrayList<ReviewDto> list = reviewService.getPersonalReviewList(param);
		model.addAttribute("list", list);
		
		return "review/review_list";
	}
	
	@RequestMapping("review/party_list")
	public String reviewview(@RequestParam  HashMap<String, String> param, HttpSession session, Model model) {
		UsersDto usersdto = usersService.getUserInfo(Integer.parseInt(param.get("u_id")));
		model.addAttribute("users", usersdto);
		
		ArrayList<PartyDto> partyList =  new ArrayList<PartyDto>();
		partyList= myPageService.getMyPartyList(param);
		model.addAttribute("party",partyList);
		return "review/party_list";
	}
}

MyPageController

//	=============== 작성 가능한 리뷰 ===============
	@RequestMapping("writable-reviews")
	public String writable_reviews(HttpServletRequest request, @RequestParam HashMap<String, String> param,
			Model model) {
		log.info("@# Controller: writable-reviews");
		if (request.getSession().getAttribute("u_id") != null) {
			paramPutU_id(request, param);
			ArrayList<ApplicationPartyDto> writableList = mService.getWritableApplicationList(param);
			model.addAttribute("writableApplicationList", writableList);
		}
		return "mypage/writable-reviews";

	}

//	=============== 작성한 리뷰 ===============
	@RequestMapping("written-reviews")
	public String written_reviews(HttpServletRequest request, @RequestParam HashMap<String, String> param,
			Model model) {
		log.info("@# Controller: written-reviews");
		if (request.getSession().getAttribute("u_id") != null) {
			paramPutU_id(request, param);
			
			ArrayList<ReviewDto> writtenReviewList = mService.getWrittenReviewList(param);
			model.addAttribute("written", writtenReviewList);

			ArrayList<PartyDto> partyInfo = new ArrayList<PartyDto>();
			for (int i = 0; i < writtenReviewList.size(); i++) {
				partyInfo.add(partyService.getPartyInfo(writtenReviewList.get(i).getP_id()));
			}

			model.addAttribute("partyInfo", partyInfo);
		}
		return "mypage/written-reviews";

	}

결과

profile
뭐라도 하자

0개의 댓글