41 lines
1.9 KiB
JavaScript
41 lines
1.9 KiB
JavaScript
const API_BASE = `${location.protocol}//${location.hostname}/api`
|
|
|
|
async function request(path, options = {}) {
|
|
const url = API_BASE + path
|
|
const res = await fetch(url, {
|
|
headers: { 'Content-Type': 'application/json', ...options.headers },
|
|
...options,
|
|
})
|
|
if (res.status === 204) return null
|
|
if (!res.ok) {
|
|
const err = await res.json().catch(() => ({}))
|
|
throw { status: res.status, body: err }
|
|
}
|
|
return res.json()
|
|
}
|
|
|
|
// Categories
|
|
export const getCategories = () => request('/categories')
|
|
export const getCategory = (id) => request(`/categories/${id}`)
|
|
export const createCategory = (data) => request('/categories', { method: 'POST', body: JSON.stringify(data) })
|
|
export const updateCategory = (id, data) => request(`/categories/${id}`, { method: 'PUT', body: JSON.stringify(data) })
|
|
export const deleteCategory = (id) => request(`/categories/${id}`, { method: 'DELETE' })
|
|
|
|
// Schemas
|
|
export const getSchemas = () => request('/schemas')
|
|
export const getSchema = (id) => request(`/schemas/${id}`)
|
|
export const createSchema = (data) => request('/schemas', { method: 'POST', body: JSON.stringify(data) })
|
|
export const updateSchema = (id, data) => request(`/schemas/${id}`, { method: 'PUT', body: JSON.stringify(data) })
|
|
export const deleteSchema = (id, deleteTasks = false) => {
|
|
const params = deleteTasks ? '?deleteTasks=1' : ''
|
|
return request(`/schemas/${id}${params}`, { method: 'DELETE' })
|
|
}
|
|
|
|
// Tasks
|
|
export const getTasks = () => request('/tasks')
|
|
export const getTask = (id) => request(`/tasks/${id}`)
|
|
export const createTask = (data) => request('/tasks', { method: 'POST', body: JSON.stringify(data) })
|
|
export const updateTask = (id, data) => request(`/tasks/${id}`, { method: 'PUT', body: JSON.stringify(data) })
|
|
export const deleteTask = (id) => request(`/tasks/${id}`, { method: 'DELETE' })
|
|
export const toggleTask = (id) => request(`/tasks/${id}/toggle`, { method: 'PATCH' })
|