본문 바로가기
Team Project (국비)/Team Project 메모

최종프로젝트 쿠폰 기능 관련 코드 (추천인 기능)

by Hwanii_ 2023. 9. 16.
728x90

추천인 쿠폰

 

1)

어플리케이션 웹사이트 신규 가입시,
유효한 추천인 (기존 웹사이트 회원) 을 입력할 경우,
추천인과 신규 회원 모두 추천인 할인 쿠폰을 부여 받기.

 

2)
Model

쿠폰 상세 테이블에 회원의 PK의 정보가 담겨있는 추천인 할인 쿠폰을 저장 하기 위한
Create 쿼리문을 작성 하기.

 

 

3)
View

-
유효한 추천인 인지를 확인 하기 위해서, 추천인을 입력할 input 태그를 만들고,
비동기처리로 기능을 구현 하기.

-
유효한 추천인 이면 추천인의 값을 담는 데이터를 보내주고,
유효하지 않은 추천인 이면 추천인의 값을 담지 않고 빈값으로 보내주기.

 

signup.jsp

 

 

[ signupJavascript.js ]

 

//  회원가입 페이지 추천인 유효성 검사.

console.log("log 11111 : recommendationValue : " + recommendationValue);

$(document).ready(function () {

    var successMsg = "유효한 추천인 입니다.";
    var failMsg = "유효 하지 않은 추천인 입니다.."

    //  추천인 확인 버튼 클릭 이벤트 처리 하기.
    $("#recommendationValueCheck").click(function () {

        const recommendationValue = $("#recommendationValue").val();

        console.log("log 22222 : recommendationValue : " + recommendationValue);

        $.ajax({
            type: "POST",
            url: "recommendationVaildity.do",
            data: {tmpmID: recommendationValue},    //  추천인 정보 전송 하기.
            success: function (jdata) {

                console.log('success OK');
                console.log('jdata : ' + jdata);

                if (jdata === "fail") {  //  유효하지 않은 추천인 일 경우.
                    $('#recommendationResultMessage')
                        .removeClass("vaildity") // 유효한 추천인 일 경우 뜨는 스타일 클래스 제거 하기.
                        .addClass("fail")   //  유효하지 않은 추천인 일 경우 뜨는 스타일 클래스 생성 하기.
                        .text(failMsg);
                } else {  //  유효한 추천인 일 경우.
                    $('#recommendationResultMessage')
                        .removeClass("fail")    // 유효하지 않은 추천인 일 경우 뜨는 스타일 클래스 제거 하기.
                        .addClass("vaildity")    // 유효한 추천인 일 경우 뜨는 스타일 클래스 생성 하기.
                        .text(successMsg);
                    $('#recommendationtmpmID').val(recommendationValue);    //  유효한 추천인 이면 hidden 값으로 submit 하기.
                }

                //  메세지가 있는 경우 active 라는 이름의 클래스를 추가 하고, 메세지가 없는 경우 active 라는 이름의 클래스 제거 하기.
                if ($('#recommendationResultMessage').text().trim() !== "") {
                    $('#recommendationResultMessage').addClass("active");
                } else {
                    $('#recommendationResultMessage').removeClass("active");
                }
            },
            error: function (error) {
                console.log('error [' + error + ']');
            }
        });
    });
});

//  =============================================================================================

 

제이쿼리 문법을 사용해서, 동적으로 클래스 속성을 add하고 remove 하면서 css를 처리.

 

[ signupExpansion.css ]

 

/* 메시지가 있을 때 표시 */
#recommendationResultMessage.active {
    display: block;
}

/* 유효한 회원 일 때 */
.vaildity {
    background-color: #5CB85C; 
    color: white; 
}

/* 유효하지 않은 회원 일 때 */
.fail {
    background-color: #FF4D63;
    color: white;
}

 

 

 

 

4)
Controller


View 에서 입력한 추천인 값을 받고,
Model의 유효한 회원인지를 확인 하기 위해서,
Read 쿼리문에 해당하는 selectOne() 메서드를 통해,
유효한 회원인지 아닌지를 구별하여 View 에게 값을 보내주기. (비동기처리)

-
View 에서 입력한 추천인의 값을, 유효한지 아닌지를 확인 해서,
유효한 추천인 이라면, Create 쿼리문에 해당하는 insert() 메서드를 통해,
추천인 할인 쿠폰을 지급 하기.

 

 

@ResponseBody 어노테이션을 사용해서, ViewResolver의 작동을 우회하고,

회원의 정보가 담긴 객체 데이터를 보내기.

 

이슈 :

유효하지 않은 회원일 경우, selectOne() 메서드의 반환 결과값이 0 이라서,

jdbcTemplate의 queryForObject() 메서드가 예외를 반환.

queryForObject() 메서드는 반환 결과값이 반드시 1개 여야 하기 때문에, 해당 이슈 발생.

try-catch 를 사용 해서 예외를 잡아 이슈를 해결.

 

 

유효한 회원이라면,

커맨드 객체인 MemberVO mVO가

View 에서 보내준 mVO 객체의 프로퍼티와 같은 이름의 데이터를 자동으로 set 한다.

 

첫번째 insert() 으로 신규 회원에게 쿠폰 데이터를 삽입하고,

 

hidden 값으로 보내준 추천인으로 사용된 기존 회원의 데이터인 tmpmID 를 set 해서,

두번째 insert() 으로 기존 회원에게 쿠폰 데이터를 삽입.

반응형