Files
web-temp/layers/composables/usePreregist.ts
2025-11-07 12:55:00 +09:00

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 runtimeConfig = useRuntimeConfig()
const stoveApiBaseUrl = runtimeConfig.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 runtimeConfig = useRuntimeConfig()
const stoveApiBaseUrl = runtimeConfig.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 }