feat. FX_PREREGIST_01 템플릿 제작
This commit is contained in:
242
layers/composables/usePreregist.ts
Normal file
242
layers/composables/usePreregist.ts
Normal file
@@ -0,0 +1,242 @@
|
||||
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 promotion = ref({
|
||||
id: 'preregist',
|
||||
title: '사전등록 프로모션',
|
||||
link: '/#preregist',
|
||||
startDate: '2025-07-09 10:00:00',
|
||||
endDate: '2025-12-31 23:59:59',
|
||||
}) // 사전 등록 프로모션 정보
|
||||
const preregistDate = ref(Date.now()) // 사전 등록일
|
||||
|
||||
// [Setter] 사전등록 - 사전 등록일 세팅
|
||||
const setPreregistDate = (newPreregistDate: number) => {
|
||||
preregistDate.value = newPreregistDate
|
||||
}
|
||||
|
||||
// 프로모션 기간 여부
|
||||
const isPromotionPeriod = computed(() => {
|
||||
if (
|
||||
!promotion.value ||
|
||||
!promotion.value.startDate ||
|
||||
!promotion.value.endDate
|
||||
) {
|
||||
return false
|
||||
}
|
||||
// return isBetweenPeriod(
|
||||
// kstStringToTimestamp(promotion.value.startDate),
|
||||
// kstStringToTimestamp(promotion.value.endDate)
|
||||
// )
|
||||
})
|
||||
// 국가 번호 조회
|
||||
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 {
|
||||
promotion,
|
||||
isKorea,
|
||||
isTaiwanHongKongMacau,
|
||||
isNorthAmerica,
|
||||
countryCode,
|
||||
isPromotionPeriod,
|
||||
countryDialingCode,
|
||||
preregistDate,
|
||||
checkCountryByIp,
|
||||
getPreregist,
|
||||
setPreregist,
|
||||
}
|
||||
}
|
||||
|
||||
export { usePreregist }
|
||||
Reference in New Issue
Block a user