Files
dog_training/static/js/api.js

149 lines
5.3 KiB
JavaScript

import DOM from './dom.js';
export default class API {
static getCsrfToken() {
return document.querySelector(idCSRFToken).getAttribute('content');
}
static async request(hashEndpoint, method = 'GET', data = null, params = null) {
const url = API.getUrlFromHash(hashEndpoint, params);
const csrfToken = API.getCsrfToken();
const options = {
method,
headers: {
'Content-Type': 'application/json',
[flagCsrfToken]: csrfToken,
}
};
if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {
data = {
...data,
[flagCsrfToken]: csrfToken,
};
options.body = JSON.stringify(data);
}
try {
const response = await fetch(url, options);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('API request failed:', error);
throw error;
}
}
static getUrlFromHash(hash, params = null) {
if (hash == null) hash = hashPageHome;
let url = API.parameteriseUrl(_pathHost + hash, params);
return url;
}
static parameteriseUrl(url, params) {
if (params) {
url += '?' + new URLSearchParams(params).toString();
}
return url;
}
static goToUrl(url) {
window.location.href = url;
}
static goToHash(hash, params = null) {
const url = API.getUrlFromHash(hash, params);
API.goToUrl(url);
}
// specific api calls
/* Example:
getUsers: () => request('/users'),
getUserById: (id) => request(`/users/${id}`),
createUser: (userData) => request('/users', 'POST', userData),
updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),
deleteUser: (id) => request(`/users/${id}`, 'DELETE'),
*/
static async loginUser() {
let callback = {};
callback[flagCallback] = DOM.getHashPageCurrent();
return await API.request(hashPageUserLogin, 'POST', callback);
}
// dog
// Command categories
static async saveCommandCategories(commandCategories, formFilters, comment) {
let dataRequest = {};
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
dataRequest[flagCommandCategory] = commandCategories;
dataRequest[flagComment] = comment;
return await API.request(hashSaveDogCommandCategory, 'POST', dataRequest);
}
// Commands
static async saveCommands(commands, formFilters, comment) {
let dataRequest = {};
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
dataRequest[flagCommand] = commands;
dataRequest[flagComment] = comment;
return await API.request(hashSaveDogCommand, 'POST', dataRequest);
}
// Dog Command Links
static async saveDogCommandLinks(dogCommandLinks, formFilters, comment) {
let dataRequest = {};
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
dataRequest[flagDogCommandLink] = dogCommandLinks;
dataRequest[flagComment] = comment;
return await API.request(hashSaveDogDogCommandLink, 'POST', dataRequest);
}
// Locations
static async saveLocations(locations, formFilters, comment) {
let dataRequest = {};
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
dataRequest[flagLocation] = locations;
dataRequest[flagComment] = comment;
return await API.request(hashSaveDogLocation, 'POST', dataRequest);
}
// Button Icons
static async saveButtonIcons(buttonIcons, formFilters, comment) {
let dataRequest = {};
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
dataRequest[flagButtonIcon] = buttonIcons;
dataRequest[flagComment] = comment;
return await API.request(hashSaveDogButtonIcon, 'POST', dataRequest);
}
// Command Button Links
static async saveCommandButtonLinks(links, formFilters, comment) {
let dataRequest = {};
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
dataRequest[flagCommandButtonLink] = links;
dataRequest[flagComment] = comment;
return await API.request(hashSaveDogCommandButtonLink, 'POST', dataRequest);
}
// Assessments
static async saveAssessments(assessments, formFilters, comment) {
let dataRequest = {};
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
dataRequest[flagAssessment] = assessments;
dataRequest[flagComment] = comment;
return await API.request(hashSaveDogAssessment, 'POST', dataRequest);
}
// Assessments
static async saveAssessmentsDistractionsAndResponses(assessments, formFilters, comment) {
let filtersJson = DOM.convertForm2JSON(formFilters);
filtersJson[attrIdAssessment] = null;
let dataRequest = {};
dataRequest[flagFormFilters] = filtersJson;
dataRequest[flagAssessment] = assessments;
dataRequest[flagComment] = comment;
return await API.request(hashSaveDogAssessmentDistractionAndResponse, 'POST', dataRequest);
}
}