[로직] 주문창 - 결제할 게임의 정보

서현서현·2022년 5월 30일
0

서블릿 & JSP

목록 보기
25/26

1. 쟁점

결제api를 사용하기위해 주문창에서 결제할 금액을 띄우려는중 문제 발생

[주문창에 접속하는 방법]
- 단건결제 : 게임 상세페이지에서 결제하기로 접속
- 장바구니결제 : 장바구니에 담겨있는 모든 게임을 결제

따라서 원래 계획은 CART테이블에 있는 해당 사용자의 모든 장바구니정보를 가져오려는 것이었으나, 이경우 단건결제로 접속해도 장바구니의 모든게임을 구매해야 하는 문제점이 발생한다

2. 해결법

[방법1] 파라미터 존재여부를 확인하여 분기문으로 처리

- 단건결제 : req에 memId, gameId가 포함되어있니까 그것만 받아서 처리
- 장바구니결제 : req에 memId만 있으니까 그걸로 장바구니 조회해 처리
[ 원하는 key값이 req에 파라미터로 존재하는지 찾는 내장함수 ]
- boolean값임에 유의해서 작성!
if (req.getParameterMap().containsKey("username")) {
 String username = req.getParameter("username"); 
}

3. 진행

1. 두가지 경로로 주문창(OrderController → orderDetail) 들어와서 
	주문할 게임목록(1or多) 출력 + 결제방법 선택후(일단 카카오페이 고정) 
	주문하기 버튼으로 이동

2. KakaoPay(Controller)→kakaoApi.jsp로 접속하게됨 
	이때 다음 정보가 필요하다 (name, email, phone, ****totalPrice****)

즉.. 주문창 서블릿에서 두 경로를 고려한 분기문을 통해 필요한 정보(게임id)를 List변수에 담아 setAttribute하고 jsp로 쏴서 새 변수에 그걸 getAttribute로 담고 꺼내서 표시해주기!

그리고 주문하기 누르면 kakaoPay로 넘어가는데… 이때 필요한 네가지 요소는.. 어케 넣어주지?

일단 세션이 살아있으니 memId를 그대로 name에 넣어주고

email과 phone은 member테이블에서 서치해와서 setAttribute해놓고 꺼내주면 될것같고

제일 문제인 totalPice는………. 주문창에서 넘겨주는게 베스트

2. 쟁점

회원 장바구니에 있는 모든 게임ID들을 List에 담는 메소드

@Override
	public List<GameVO> getGamesInfo(List<GameVO> gamesIdList) {
		// 쿼리결과(각id마다의 vo객체들)의 리스트를 담을 객체 생성
		List<GameVO> gameInfoList = new ArrayList<GameVO>();
		
		try {
			
			for(int i=0; i<gamesIdList.size(); i++) {
				String gameId = gamesIdList.get(i).getGame_id();
				**gameInfoList = (List<GameVO>) smc.queryForList("orders.getGameInfo",gameId);**
			}

				} catch (SQLException ex) {
					ex.printStackTrace();
					throw new RuntimeException("회원의 장바구니에 있는 모든 게임 조회중 예외 발생!",ex);
				}
		
		return gameInfoList;
	}

이러면 마지막에 들어간 id에 대한 정보만 VO리스트로 들어간다….

⇒ List = List2면 아예 리스트 내용 전체가 고쳐지는거잖아

그래서 위는 List가 마지막 내용만으로 아예 교체되어 버린것!

@Override
	public List<GameVO> getGamesInfo(List<GameVO> gamesIdList) {
		// 쿼리결과(각id마다의 vo객체들)의 리스트를 담을 객체 생성
		List<GameVO> gameInfoList = new ArrayList<GameVO>();
		GameVO vo = new GameVO();
		try {
			System.out.println(gamesIdList.size());
			for(int i=0; i<gamesIdList.size(); i++) {
				String gameId = gamesIdList.get(i).getGame_id();
				**vo = (GameVO) smc.queryForObject("orders.getGameInfo",gameId);**
				gameInfoList.add(vo);
			}

				} catch (SQLException ex) {
					ex.printStackTrace();
					throw new RuntimeException("회원의 장바구니에 있는 모든 게임 조회중 예외 발생!",ex);
				}
		
		return gameInfoList;
	}

List.add()메소드를 이용해서 해결!

0개의 댓글