文字游戏
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
2.4 KiB

2 weeks ago
import axios from 'axios'
const API_BASE_URL = '/api'
const API_GOD_URL = '/api/god'
const instance = axios.create({
baseURL: API_BASE_URL,
timeout: 10000,
headers: {
'Content-Type': 'application/json'
}
})
instance.interceptors.request.use(
(config) => {
const token = localStorage.getItem('auth_token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
(error) => Promise.reject(error)
)
instance.interceptors.response.use(
(response) => response.data,
(error) => {
if (error.response?.status === 401) {
localStorage.removeItem('auth_token')
localStorage.removeItem('user')
window.location.href = '/login'
}
return Promise.reject(error.response?.data || error.message)
}
)
export interface CharacterDto {
id: number
name: string
levelName: string
levelId: number
maxHP: number
attack: number
professionName?: string
money: number
currentExp: number
trainingOn?: string
nextLevelName?: string
nextLevelMinExp?: number
breakthroughRate: number
canBreakthrough: boolean
lastLogin: string
createdOn: string
}
export interface ProfessionDto {
id: number
name: string
description: string
attackRate: number
defendRate: number
healthRate: number
criticalRate: number
}
export interface CreateCharacterRequest {
name: string
professionId: number
}
export const characterApi = {
getCharacterList: (): Promise<CharacterDto[]> => {
return instance.get('/character/list')
},
createCharacter: (data: CreateCharacterRequest): Promise<boolean> => {
return instance.post('/character/register', data)
},
deleteCharacter: (characterId: number): Promise<boolean> => {
return instance.delete(`/character/${characterId}`)
},
selectCharacter: (characterId: number): Promise<boolean> => {
return instance.post(`/character/select/${characterId}`)
},
getProfessions: (): Promise<ProfessionDto[]> => {
return instance.get(`/profession/all`)
},
startTraining: (characterId: number): Promise<boolean> => {
return instance.post(`/character/${characterId}/training/start`)
},
stopTraining: (characterId: number): Promise<number> => {
return instance.post(`/character/${characterId}/training/stop`)
},
breakthrough: (characterId: number): Promise<boolean> => {
return instance.post(`/character/${characterId}/breakthrough`)
}
}
export default instance