220 lines
7.2 KiB
TypeScript
220 lines
7.2 KiB
TypeScript
import type {
|
|
ReqPreorderSelectEvent,
|
|
ResPreorderSelectEvent,
|
|
ReqPreorderReserveDataUpdate,
|
|
ResPreorderReserveDataUpdate,
|
|
} from '#layers/types/PreregistType'
|
|
|
|
import { DEFAULT_LOCALE_CODE } from '@/i18n.config'
|
|
import { countryDialingCodes } from '#layers/assets/data/countryData'
|
|
|
|
/**
|
|
* 프로모션 - 사전등록
|
|
*/
|
|
const usePreregist = () => {
|
|
const preregistDate = ref(Date.now()) // 사전 등록일
|
|
|
|
// [Setter] 사전등록 - 사전 등록일 세팅
|
|
const setPreregistDate = (newPreregistDate: number) => {
|
|
preregistDate.value = newPreregistDate
|
|
}
|
|
|
|
// 국가 번호 조회
|
|
const countryDialingCode = computed(() => {
|
|
return countryDialingCodes[countryCode.value.toUpperCase()]
|
|
})
|
|
|
|
// 사전 등록 - 특정 국가 여부 조회 (IP 기반)
|
|
const {
|
|
isKorea,
|
|
isTaiwanHongKongMacau,
|
|
isNorthAmerica,
|
|
countryCode,
|
|
checkCountryByIp,
|
|
} = useGds()
|
|
|
|
// 사전 등록 - (등록 여부) 조회
|
|
const getPreregist = async (req: ReqPreorderSelectEvent) => {
|
|
let res: ResPreorderSelectEvent = {} as ResPreorderSelectEvent
|
|
try {
|
|
const config = useRuntimeConfig()
|
|
const stoveApiBaseUrl = config.public.stoveApiUrl
|
|
|
|
const url = `${stoveApiBaseUrl}/pub-comm/v1.0/Preorder/SelectEvent`
|
|
const headers = {
|
|
Authorization: `Bearer ${req.accessToken}`,
|
|
}
|
|
const body = {
|
|
event_code: req.event_code,
|
|
lang: req.lang || DEFAULT_LOCALE_CODE,
|
|
terms_type: req.terms_type,
|
|
}
|
|
res = (await commonFetch('POST', url, {
|
|
headers,
|
|
body,
|
|
})) as ResPreorderSelectEvent
|
|
if (res != null) {
|
|
if (res.code === 0) {
|
|
setPreregistDate(res.value?.terms_time_long || Date.now())
|
|
} else if (res.code === -1) {
|
|
//= 조회 된 데이터가 없습니다. -> 최초
|
|
} else if (res.code === -90002) {
|
|
//= 사전 등록 기간이 아닙니다.
|
|
} else if (`${res.code}`.startsWith('401')) {
|
|
//= [01] 로그인 후 이용하실 수 있습니다.
|
|
res = { code: -90028, message: res.message || '' } // 401은 -90028로 처리
|
|
} else if (res.code === -90028) {
|
|
//= [01] 로그인 후 이용하실 수 있습니다.
|
|
} else {
|
|
// [-90003] 점검 진행 중
|
|
res = { code: res.code, message: res.message || '' }
|
|
console.log(
|
|
'[Failure] /composables/promotion/usePreregist.getPreregist: ',
|
|
res
|
|
)
|
|
res.code = -99999 // else 알럿 띄우기 용 세팅
|
|
}
|
|
} else {
|
|
res = { code: -99999, message: '' }
|
|
console.log(
|
|
'[Failure] /composables/promotion/usePreregist.getPreregist: ',
|
|
res
|
|
)
|
|
res.code = -99999 // else 알럿 띄우기 용 세팅
|
|
}
|
|
} catch (e) {
|
|
console.error(
|
|
'[Exception] /composables/promotion/usePreregist.getPreregist: ',
|
|
e
|
|
)
|
|
res = {
|
|
code: -99999,
|
|
message: `${e}`,
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
// 사전 등록 - 저장
|
|
const setPreregist = async (req: ReqPreorderReserveDataUpdate) => {
|
|
let res: ResPreorderReserveDataUpdate = {} as ResPreorderReserveDataUpdate
|
|
try {
|
|
const config = useRuntimeConfig()
|
|
const stoveApiBaseUrl = config.public.stoveApiUrl
|
|
|
|
const url = `${stoveApiBaseUrl}/pub-comm/v1.0/Preorder/ReserveDataUpdate`
|
|
const headers = {
|
|
Authorization: `Bearer ${req.accessToken}`,
|
|
}
|
|
const body = {
|
|
necessary_consent1: req.necessary_consent1,
|
|
necessary_consent2: req.necessary_consent2,
|
|
necessary_consent3: req.necessary_consent3,
|
|
event_code: req.event_code,
|
|
terms_type: req.terms_type,
|
|
c_num: req.c_num,
|
|
lang_code: req.lang_code,
|
|
hp: req.hp,
|
|
email: req.email,
|
|
metric_seq: req.metric_seq, //= mcode
|
|
g_server: req.g_server,
|
|
world_id: req.world_id,
|
|
game_unique_num: req.game_unique_num,
|
|
event_info1: req.event_info1, // 각 이벤트 필요할때 사용
|
|
event_info2: req.event_info2, // 각 이벤트 필요할때 사용
|
|
event_info3: req.event_info3, // 각 이벤트 필요할때 사용
|
|
event_info4: req.event_info4, // 각 이벤트 필요할때 사용
|
|
under14_terms: req.under14_terms, // 14세미만 진행 하는 구분값
|
|
device_type: req.device_type, // 접속 기기 pc / mobile
|
|
country_code: req.country_code,
|
|
country_dialing_code: req.country_dialing_code, // 국가 번호
|
|
birth_date: req.birth_date, // 생년월일 - 북미(미국, 캐나다)의 경우
|
|
}
|
|
|
|
res = (await commonFetch('POST', url, {
|
|
headers,
|
|
body,
|
|
})) as ResPreorderReserveDataUpdate
|
|
|
|
if (res != null) {
|
|
if (res.code === 0) {
|
|
//= [08] [사전 등록 완료 레이어] 노출
|
|
if (
|
|
res.message != null &&
|
|
res.message !== '' &&
|
|
isNumeric(res.message)
|
|
) {
|
|
// 사전 등록일이 숫자면 날짜로 변환
|
|
setPreregistDate(Number(res.message))
|
|
} else {
|
|
setPreregistDate(Date.now())
|
|
}
|
|
} else if (`${res.code}`.startsWith('401')) {
|
|
//= [01] 로그인 후 이용하실 수 있습니다.
|
|
res = { code: -90028, message: res.message || '' } // 401은 -90028로 처리
|
|
} else if (res.code === -90028) {
|
|
//= [01] 로그인 후 이용하실 수 있습니다.
|
|
} else if (res.code === -90002) {
|
|
//= [02] 사전 등록 기간이 아닙니다.
|
|
} else if (res.code === -90018) {
|
|
//= [04] 생년 월일을 입력해 주세요.
|
|
} else if (res.code === -90022) {
|
|
//= [05] 사전 등록 가능한 연령이 아닙니다.
|
|
} else if (res.code === -90000) {
|
|
//= [06] 필수 약관을 모두 선택해 주세요.
|
|
} else if (res.code === -90023) {
|
|
//= [07] 이미 사전 등록이 완료된 계정입니다.
|
|
if (
|
|
res.message != null &&
|
|
res.message !== '' &&
|
|
isNumeric(res.message)
|
|
) {
|
|
// 사전 등록일이 숫자면 날짜로 변환
|
|
setPreregistDate(Number(res.message))
|
|
} else {
|
|
setPreregistDate(Date.now())
|
|
}
|
|
} else {
|
|
//= [03] 오류가 발생했습니다.\n계속 오류가 발생하면 고객센터로 문의해 주세요.
|
|
res = { code: res.code, message: res.message || '' }
|
|
console.log(
|
|
'[Failure] /composables/promotion/usePreregist.setPreregist: ',
|
|
res
|
|
)
|
|
res.code = -99999 // else 알럿 띄우기 용 세팅
|
|
}
|
|
} else {
|
|
res = { code: -99999, message: '' }
|
|
console.log(
|
|
'[Failure] /composables/promotion/usePreregist.setPreregist: ',
|
|
res
|
|
)
|
|
}
|
|
} catch (e) {
|
|
console.error(
|
|
'[Exception] /composables/promotion/usePreregist.setPreregist: ',
|
|
e
|
|
)
|
|
res = {
|
|
code: -99999,
|
|
message: `${e}`,
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
return {
|
|
isKorea,
|
|
isTaiwanHongKongMacau,
|
|
isNorthAmerica,
|
|
countryCode,
|
|
countryDialingCode,
|
|
preregistDate,
|
|
checkCountryByIp,
|
|
getPreregist,
|
|
setPreregist,
|
|
}
|
|
}
|
|
|
|
export { usePreregist }
|