Files
planner.sori.studio/src/lib/plannerApi.js

60 lines
1.4 KiB
JavaScript

import { buildApiUrl, toUserFacingApiError } from './apiBase'
function buildHeaders(token, hasBody) {
return {
...(hasBody ? { 'Content-Type': 'application/json' } : {}),
...(token ? { Authorization: `Bearer ${token}` } : {}),
}
}
async function request(path, { method = 'GET', token, body } = {}) {
const hasBody = body !== undefined
const response = await fetch(buildApiUrl(path), {
method,
headers: buildHeaders(token, hasBody),
body: hasBody ? JSON.stringify(body) : undefined,
})
const data = await response.json().catch(() => ({}))
if (!response.ok) {
throw new Error(toUserFacingApiError(data, '플래너 데이터를 처리하지 못했습니다.'))
}
return data
}
export async function fetchPlannerEntries(token, range = {}) {
const searchParams = new URLSearchParams()
if (range.from) {
searchParams.set('from', range.from)
}
if (range.to) {
searchParams.set('to', range.to)
}
const query = searchParams.toString()
return request(`/api/planner${query ? `?${query}` : ''}`, {
token,
})
}
export async function savePlannerEntry(token, entryDate, payload) {
return request(`/api/planner/${entryDate}`, {
method: 'PUT',
token,
body: {
payload,
},
})
}
export async function deletePlannerEntry(token, entryDate) {
return request(`/api/planner/${entryDate}`, {
method: 'DELETE',
token,
})
}