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'), */ // User // user static async loginUser() { let callback = {}; callback[flagCallback] = DOM.getHashPageCurrent(); return await API.request(hashPageUserLogin, 'POST', callback); } static async saveUsers(users, formFilters, comment) { let dataRequest = {}; dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters); dataRequest[flagUser] = users; dataRequest[flagComment] = comment; return await API.request(hashSaveUserUser, 'POST', dataRequest); } // company static async saveCompanies(companies, formFilters, comment) { let dataRequest = {}; dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters); dataRequest[flagCompany] = companies; dataRequest[flagComment] = comment; return await API.request(hashSaveUserCompany, 'POST', dataRequest); } // 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); } }