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.

79 lines
1.9 KiB

class API {
_fetch = (...all) => fetch(...all)
constructor() {
this.base_url = typeof window !== 'undefined' ? APP_BASE_PATH.replace('/app/', '/api/v1/') : '/api/v1/'
}
async get_status() {
return this.get_request('status')
}
async get_standings() {
return this.get_request('league-standings')
}
async get_matchups() {
return this.get_request('matchups')
}
async get_available_draft_players() {
return this.get_request('draft-board/available')
}
async draft_player(player_id) {
return this.post_request('draft-board/draft-player', { player_id })
}
async save_my_team(team_data) {
return this.post_request('my-team', team_data)
}
async get_my_team() {
return this.get_request('my-team')
}
async get_my_team_players() {
return this.get_request('my-team/players')
}
async get_my_team_current_lineup() {
return this.get_request('my-team/lineup')
}
async save_my_team_lineup(lineup_data) {
return this.post_request('my-team/lineup', lineup_data)
}
async post_request(parts, data = {}) {
if ( !Array.isArray(parts) ) parts = [parts]
const url = this.build_url(...parts)
const result = await this._fetch(url, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
return (await result.json()).data
}
async get_request(...parts) {
const url = this.build_url(...parts)
const result = await this._fetch(url)
return (await result.json()).data
}
build_url(...parts) {
let url = parts.join('/')
if ( url.startsWith('/') ) url = url.slice(1)
return `${this.base_url}${url}`
}
}
const api = new API()
export { api }