Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

예약대기 기능 추가 #247

Merged
merged 12 commits into from
Sep 7, 2023
Merged

예약대기 기능 추가 #247

merged 12 commits into from
Sep 7, 2023

Conversation

Monsteel
Copy link
Contributor

@Monsteel Monsteel commented Sep 6, 2023

안녕하세요.
특실/일반실 전석 매진 시 사용할 수 있는, 예약대기 신청 기능을 추가했습니다.

스크린샷 2023-09-06 오후 1 37 30

Copy link
Owner

@ryanking13 ryanking13 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

감사합니다~ mock response를 통해서 테스트가 가능하면 좋겠습니다만, 아직 해당 부분이 구현되어 있지 않네요 (#230) . 혹시 PR을 작성하는 과정에서 서버에서 응답하는 response를 확인하셨다면 해당 내용을 공유해주시면 리뷰에 도움이 될 것 같습니다.

@@ -347,6 +348,161 @@ def reserve(
# if ticket not found, it's an error
raise SRTError("Ticket not found: check reservation status")

def reserve_standby(
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

jobId를 제외하면 대부분의 내용이 reserve함수와 동일한 듯하니, 아래와 같이 공통된 부분을 따로 빼고 재사용하면 좋을 것 같습니다. 혹은 reserve 함수 자체에 파라미터로 추가하는 것도 방법이겠으나, 유저가 기대하는 결과가 다르니 지금처럼 두 개의 reserve, reserve_standby 함수를 가지는 것은 좋아보여요.

def reserve():
    self._reserve(reserve_jobid, ...)

def reserve_standby():
    self._reserve(reserve_standby_jobid, ...)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요 :)
피드백 감사합니다 👍

불필요한 파라미터가 흘러 들어가는게 우려되어 별도로 분리하였으나, 중복되는 코드에 대한 고민이 충분치 않았습니다.

실제 예매 페이지에서도 공통되는 파라미터가 포함된 상태로 요청이 들어가고 있음을 확인했고,
결과적으로는 의미가 크지 않을거라 판단되어, 말씀주신 방향대로 srt.py 파일 내 _reserve 함수로 분리하여, 공통된 코드를 일원화 했습니다.

아래는 웹페이지 예메 시 전송되는 요청별 파라미터입니다. 참고해주세요.

[1101] 개인 예매 요청 시 param

type: 1
jobId: 1101
jrnyTpCd: 11
jrnyTpCd1: 
jrnyTpCd2: 
jrnyCnt: 1
grpDv: 0
rtnDv: 0
stlbTrnClsfCd1: 17
stlbTrnClsfCd2: 05
stndFlg: N
jrnySqno1: 001
jrnySqno2: 
trnGpCd1: 300
trnGpCd2: 
trnGpNm1: 전체
trnGpNm2: 
dptRsStnCd1: 0551
dptRsStnCd2: 
dptRsStnCdNm1: 수서
dptRsStnCdNm2: 
arvRsStnCd1: 0015
arvRsStnCd2: 
arvRsStnCdNm1: 동대구
arvRsStnCdNm2: 
dptDt1: 20230906
dptTm1: 224000
dptDt2: 
dptTm2: 
arvDt1: 
arvTm1: 002500
arvTm2: 
dptDtTmNm1: 2023년 9월 6일(수)
back_dptDt1: 20230906
back_dptTm1: 000000
back_dptDtTmNm1: 2023년 9월 6일(수)
totPrnb: 1
totPrnbNm: 1명
psgGridcnt: 1
psgTpCd1: 1
psgInfoPerPrnb1: 1
psgTpCd2: 
psgInfoPerPrnb2: 0
psgTpCd3: 
psgInfoPerPrnb3: 0
psgTpCd4: 
psgInfoPerPrnb4: 0
psgTpCd5: 
psgInfoPerPrnb5: 0
infantCnt: 0
smkSeatAttCd1: 000
dirSeatAttCd1: 009
locSeatAttCd1: 000
rqSeatAttCd1: 015
etcSeatAttCd1: 000
seatAttNm1: 일반/기본
smkSeatAttCd2: 000
dirSeatAttCd2: 009
locSeatAttCd2: 000
rqSeatAttCd2: 015
etcSeatAttCd2: 000
seatAttNm2: 일반/기본
seatNo1_1: 
seatNo1_2: 
seatNo1_3: 
seatNo1_4: 
seatNo1_5: 
seatNo1_6: 
seatNo1_7: 
seatNo1_8: 
seatNo1_9: 
seatNo2_1: 
seatNo2_2: 
seatNo2_3: 
seatNo2_4: 
seatNo2_5: 
seatNo2_6: 
seatNo2_7: 
seatNo2_8: 
seatNo2_9: 
scarGridcnt1: 
scarGridcnt2: 
trnNo1: 00379
trnNo2: 
runDt1: 20230906
runDt2: 
scarNo1: 
scarNo2: 
psrmClCd1: 1
psrmClCd2: 
seatAttCd: 
dptStnConsOrdr1: 000001
dptStnConsOrdr2: 
arvStnConsOrdr1: 000015
arvStnConsOrdr2: 
dptStnRunOrdr1: 000001
dptStnRunOrdr2: 
arvStnRunOrdr1: 000006
arvStnRunOrdr2: 
choiceSeatCount: 
pnrNo: 
jrnySqno: 
JRNYLIST_KEY: 
arvDt: 
arvRsStnCd: 
arvTm: 
dlayAcptFlg: 
dptDt: 
dptRsStnCd: 
dptTm: 000000
lumpStlTgtNo: 
proyStlTgtFlg: 
stlbTrnClsfCd: 
totSeatNum: 
trnGpCd: 109
trnNo: 
rcvdAmt: 
tmpJobSqno1: 
tmpJobSqno2: 
dcntKndCd: 
seatNo1: 
seatNo2: 
chtnDvCd: 
msgTxt: 
ymsAplFlg: 
reserveType: 11
reserveObjId: https://app.srail.or.kr/ara/selectListAra10007_n.do? (뒤에 query param이 더 붙는데 생략합니다.)
mblPhone: 

[1102] 예약대기 요청 시 param

type: 1
jobId: 1102
jrnyTpCd: 11
jrnyTpCd1: 
jrnyTpCd2: 
jrnyCnt: 1
grpDv: 0
rtnDv: 0
stlbTrnClsfCd1: 17
stlbTrnClsfCd2: 05
stndFlg: N
jrnySqno1: 001
jrnySqno2: 
trnGpCd1: 300
trnGpCd2: 
trnGpNm1: 전체
trnGpNm2: 
dptRsStnCd1: 0551
dptRsStnCd2: 
dptRsStnCdNm1: 수서
dptRsStnCdNm2: 
arvRsStnCd1: 0015
arvRsStnCd2: 
arvRsStnCdNm1: 동대구
arvRsStnCdNm2: 
dptDt1: 20230909
dptTm1: 053000
dptDt2: 
dptTm2: 
arvDt1: 
arvTm1: 071100
arvTm2: 
dptDtTmNm1: 2023년 9월 6일(수)
back_dptDt1: 20230906
back_dptTm1: 000000
back_dptDtTmNm1: 2023년 9월 6일(수)
totPrnb: 1
totPrnbNm: 1명
psgGridcnt: 1
psgTpCd1: 1
psgInfoPerPrnb1: 1
psgTpCd2: 
psgInfoPerPrnb2: 0
psgTpCd3: 
psgInfoPerPrnb3: 0
psgTpCd4: 
psgInfoPerPrnb4: 0
psgTpCd5: 
psgInfoPerPrnb5: 0
infantCnt: 0
smkSeatAttCd1: 000
dirSeatAttCd1: 009
locSeatAttCd1: 000
rqSeatAttCd1: 015
etcSeatAttCd1: 000
seatAttNm1: 일반/기본
smkSeatAttCd2: 000
dirSeatAttCd2: 009
locSeatAttCd2: 000
rqSeatAttCd2: 015
etcSeatAttCd2: 000
seatAttNm2: 일반/기본
seatNo1_1: 
seatNo1_2: 
seatNo1_3: 
seatNo1_4: 
seatNo1_5: 
seatNo1_6: 
seatNo1_7: 
seatNo1_8: 
seatNo1_9: 
seatNo2_1: 
seatNo2_2: 
seatNo2_3: 
seatNo2_4: 
seatNo2_5: 
seatNo2_6: 
seatNo2_7: 
seatNo2_8: 
seatNo2_9: 
scarGridcnt1: 
scarGridcnt2: 
trnNo1: 00301
trnNo2: 
runDt1: 20230909
runDt2: 
scarNo1: 
scarNo2: 
psrmClCd1: 1
psrmClCd2: 
seatAttCd: 
dptStnConsOrdr1: 000001
dptStnConsOrdr2: 
arvStnConsOrdr1: 000015
arvStnConsOrdr2: 
dptStnRunOrdr1: 000001
dptStnRunOrdr2: 
arvStnRunOrdr1: 000005
arvStnRunOrdr2: 
choiceSeatCount: 
pnrNo: 
jrnySqno: 
JRNYLIST_KEY: 
arvDt: 
arvRsStnCd: 
arvTm: 
dlayAcptFlg: 
dptDt: 
dptRsStnCd: 
dptTm: 000000
lumpStlTgtNo: 
proyStlTgtFlg: 
stlbTrnClsfCd: 
totSeatNum: 
trnGpCd: 109
trnNo: 
rcvdAmt: 
tmpJobSqno1: 
tmpJobSqno2: 
dcntKndCd: 
seatNo1: 
seatNo2: 
chtnDvCd: 
msgTxt: 
ymsAplFlg: 
reserveType: 
reserveObjId: https://app.srail.or.kr/ara/selectListAra10007_n.do? (뒤에 query param이 더 붙는데 생략합니다.)
smsSndFlg: 
mblPhone: 010-****-**** (임의 마스킹처리)

# if ticket not found, it's an error
raise SRTError("Ticket not found: check reservation status")

def reserve_standby_option_settings(
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

예약대기를 하면 기본 알림 설정이 어떻게 되나요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아시다시피 해당 내용을 정확하게 파악하기 어려움이 있습니다 ㅠ

웹페이지 예약대기 프로세스 상 기준으로 작업했고, 아래와 같습니다.

예약대기 신청 -> 예약대기에 대한 설정(1: 일반실에 좌석이 없는 경우, 특실로 예약하기 | 2: 연락받을 전화번호)

기본적으로 실제 프로세스에서 예약대기 신청 이후, 진행하지 않은 경우에 따른 작동과 동일합니다.

이해를 돕기위해 간략히 프로세스에 대해 기록합니다.

1. 아래 이미지에서 예약하기 버튼을 클릭하면, 예약대기 신청(reserve_standby) 요청이 전송됩니다.

app srail or kr_ara_selectListAra10007_n do_jobId=1101 jrnyTpCd=11 jrnyCnt=1 grpDv=0 rtnDv=0 stlbTrnClsfCd1=05 stndFlg=N jrnySqno1=001 jrnySqno2= trnGpCd1=109 trnGpCd2= trnGpNm1=%EC%A0%84%EC%B2%B4 trnGpNm2= dptRsStnCd1=0551 dptRsStnCd2= (1)

2. 아래 이미지에서 동의버튼을 누르면, 네트워크 요청없이, 단순히 다음화면으로 진입합니다.

app srail or kr_ara_selectListAra10007_n do_jobId=1101 jrnyTpCd=11 jrnyCnt=1 grpDv=0 rtnDv=0 stlbTrnClsfCd1=05 stndFlg=N jrnySqno1=001 jrnySqno2= trnGpCd1=109 trnGpCd2= trnGpNm1=%EC%A0%84%EC%B2%B4 trnGpNm2= dptRsStnCd1=0551 dptRsStnCd2= (2)

3. 이전 화면에서 동의를 누른 경우, 전화번호가 자동으로 입력되며, 아니오를 누른 경우 전화번호는 비어있으며, textfield에 수동으로 입력이 불가합니다. | 신청하기 버튼을 누르면 예약대기 옵션(reserve_standby_option_settings)이 저장됩니다

app srail or kr_ard_selectListArd02017_n do_type=1 jobId=1102 jrnyTpCd=11 jrnyTpCd1= jrnyTpCd2= jrnyCnt=1 grpDv=0 rtnDv=0 stlbTrnClsfCd1=17 stlbTrnClsfCd2=05 stndFlg=N jrnySqno1=001 jrnySqno2= trnGpCd1=300 trnGpCd2= trnGpNm1=%EC%A0%84%EC%B2

@Monsteel
Copy link
Contributor Author

Monsteel commented Sep 6, 2023

@ryanking13
새롭게 추가된 두 요청에 대한 response 공유드립니다.

reserve_standby 에 대한 response

{
    "payListMap": [],
    "reservListMap": [
        {
            "proyStlTgtFlg": "",
            "totSeatNum": 1,
            "stlbTrnClsfCd": "17",
            "jrnyTpCd": "11",
            "lumpStlTgtNo": "20230906003289425712",
            "dptTm": "053000",
            "arvRsStnCd": "0015",
            "JRNYLIST_KEY": 0,
            "pnrNo": "320230929057048",
            "dptDt": "20230909",
            "trnNo": "301",
            "arvDt": "20230909",
            "dlayAcptFlg": "N",
            "trnGpCd": "300",
            "arvTm": "071100",
            "dptRsStnCd": "0551"
        }
    ],
    "resultMap": [
        {
            "tmpJobSqno1": 74161,
            "tmpJobSqno2": 0,
            "msgCd": "IRR000014",
            "sprmFare": 0,
            "totRcvdAmt": 54200,
            "jrnyCnt": 1,
            "wctNo": "81301",
            "alertMsg": "",
            "strResult": "SUCC",
            "msgTxt": "예약대기 가능합니다.",
            "uuid": "APP0906225605000140100001799192954",
            "cgPsId": "korail"
        }
    ],
    "commandMap": {
        "type": "1",
        "jobId": "1102",
        "jrnyTpCd": "11",
        "jrnyTpCd1": "",
        "jrnyTpCd2": "",
        "jrnyCnt": "1",
        "grpDv": "0",
        "rtnDv": "0",
        "stlbTrnClsfCd1": "17",
        "stlbTrnClsfCd2": "05",
        "stndFlg": "N",
        "jrnySqno1": "001",
        "jrnySqno2": "",
        "trnGpCd1": "300",
        "trnGpCd2": "",
        "trnGpNm1": "전체",
        "trnGpNm2": "",
        "dptRsStnCd1": "0551",
        "dptRsStnCd2": "",
        "dptRsStnCdNm1": "수서",
        "dptRsStnCdNm2": "",
        "arvRsStnCd1": "0015",
        "arvRsStnCd2": "",
        "arvRsStnCdNm1": "동대구",
        "arvRsStnCdNm2": "",
        "dptDt1": "20230909",
        "dptTm1": "053000",
        "dptDt2": "",
        "dptTm2": "",
        "arvDt1": "",
        "arvTm1": "071100",
        "arvTm2": "",
        "dptDtTmNm1": "2023년 9월 7일(목)",
        "back_dptDt1": "20230907",
        "back_dptTm1": "000000",
        "back_dptDtTmNm1": "2023년 9월 7일(목)",
        "totPrnb": "1",
        "totPrnbNm": "1명",
        "psgGridcnt": "1",
        "psgTpCd1": "1",
        "psgInfoPerPrnb1": "1",
        "psgTpCd2": "",
        "psgInfoPerPrnb2": "0",
        "psgTpCd3": "",
        "psgInfoPerPrnb3": "0",
        "psgTpCd4": "",
        "psgInfoPerPrnb4": "0",
        "psgTpCd5": "",
        "psgInfoPerPrnb5": "0",
        "infantCnt": "0",
        "smkSeatAttCd1": "000",
        "dirSeatAttCd1": "009",
        "locSeatAttCd1": "000",
        "rqSeatAttCd1": "015",
        "etcSeatAttCd1": "000",
        "seatAttNm1": "일반/기본",
        "smkSeatAttCd2": "000",
        "dirSeatAttCd2": "009",
        "locSeatAttCd2": "000",
        "rqSeatAttCd2": "015",
        "etcSeatAttCd2": "000",
        "seatAttNm2": "일반/기본",
        "seatNo1_1": "",
        "seatNo1_2": "",
        "seatNo1_3": "",
        "seatNo1_4": "",
        "seatNo1_5": "",
        "seatNo1_6": "",
        "seatNo1_7": "",
        "seatNo1_8": "",
        "seatNo1_9": "",
        "seatNo2_1": "",
        "seatNo2_2": "",
        "seatNo2_3": "",
        "seatNo2_4": "",
        "seatNo2_5": "",
        "seatNo2_6": "",
        "seatNo2_7": "",
        "seatNo2_8": "",
        "seatNo2_9": "",
        "scarGridcnt1": "",
        "scarGridcnt2": "",
        "trnNo1": "00301",
        "trnNo2": "",
        "runDt1": "20230909",
        "runDt2": "",
        "scarNo1": "",
        "scarNo2": "",
        "psrmClCd1": "2",
        "psrmClCd2": "",
        "seatAttCd": "",
        "dptStnConsOrdr1": "000001",
        "dptStnConsOrdr2": "",
        "arvStnConsOrdr1": "000015",
        "arvStnConsOrdr2": "",
        "dptStnRunOrdr1": "000001",
        "dptStnRunOrdr2": "",
        "arvStnRunOrdr1": "000005",
        "arvStnRunOrdr2": "",
        "choiceSeatCount": "",
        "pnrNo": "",
        "jrnySqno": "",
        "JRNYLIST_KEY": "",
        "arvDt": "",
        "arvRsStnCd": "",
        "arvTm": "",
        "dlayAcptFlg": "",
        "dptDt": "",
        "dptRsStnCd": "",
        "dptTm": "000000",
        "lumpStlTgtNo": "",
        "proyStlTgtFlg": "",
        "stlbTrnClsfCd": "",
        "totSeatNum": "",
        "trnGpCd": "109",
        "trnNo": "",
        "rcvdAmt": "",
        "tmpJobSqno1": "",
        "tmpJobSqno2": "",
        "dcntKndCd": "",
        "seatNo1": "",
        "seatNo2": "",
        "chtnDvCd": "",
        "msgTxt": "",
        "ymsAplFlg": "",
        "reserveType": "",
        "reserveObjId": "https://app.srail.or.kr/ara/selectListAra10007_n.do? (생략)",
        "smsSndFlg": "",
        "mblPhone": "010-****-**** (생략)"
    },
    "trainListMap": [
        {
            "rcvdAmt": 0,
            "scarNo": 0,
            "seatPrc": 0,
            "psrmClCd": "2",
            "rqSeatAttCd": "",
            "JRNYLIST_KEY": 0,
            "psgTpCd": "1",
            "SEATLIST_KEY": 0,
            "seatNo": "",
            "psgTpDvCd": "",
            "dcntKndCd": "",
            "dcntAmt": 0,
            "seatFare": 0
        }
    ]
}

reserve_standby_option_settings 에 대한 response

{
    "ERROR_MSG": "",
    "ERROR_CODE": "0",
    "dsResultMap": {
        "dsOutput": {
            "msgCd": "IRZ000003",
            "intgMsgCd": "IRZ000003",
            "strResult": "SUCC",
            "msgTxt": "정상적으로 수정 되었습니다."
        }
    }
}

Copy link
Owner

@ryanking13 ryanking13 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

감사합니다~

@ryanking13 ryanking13 merged commit fff1318 into ryanking13:master Sep 7, 2023
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants