service.js 7.99 KB
// Import Axios HTTP Library
import axios from 'axios';
import createHistory from 'history/createBrowserHistory'
import {toast} from 'react-toastify';

const history = createHistory();

// esporto il base Url per poterlo utilizzare in altri files
export const baseURLName = "http://localhost:3001";

// Public class exported globally
class LemaApi {    
    constructor() { 
        //this.productOptionsUrl = "profilation/GetProductOptions"; 
        //this.jobsOptionsUrl = "profilation/GetJobsOptions"; 
        this.webClientConfigDataUrl = "profilation/GetWebClientConfigData"; 
        this.activationFileDataUrl = "activation/SaveSessionFile"; 
        this.createThumbnailsUrl = "activation/GetThumbnail"; 
        this.activationDataUrl = "activation/SaveActivationData";
        this.deleteFileDataUrl = "activation/DeleteSessionFile"; 
        this.subscriptionSessionUrl = "profilation/GetSubscriptionSession";
        this.profilationDataUrl = "profilation/SaveProfilationData"; 
        this.getProfilationDataUrl = "profilation/GetProfilationData";   
        this.saveContactDataUrl = "contact/SaveContactData";
        this.savePrivacyInfoUrl = "activation/SavePrivacyData";
        this.checkIbanUrl = "activation/CheckIban";        
        this.getConsumptionEstimateUrl = "activation/ConsumptionsEstimate";
        this.checkActivationCodeUrl = "activation/CheckActivationCode";
        this.checkPartitaIvaUrl = "activation/CheckPiva";       
        this.qrCodeUrl =  "activation/qrcodeLink";       

        // Axios singleton instance 
        this._axios = axios.create({
            withCredentials: true,
            baseURL: baseURLName + '/api/',            
            timeout: 60000, 
            headers: {
                'Content-Type': 'application/json'  // i dati sono nel body della request in formato Json                
            }
        });        

        // Interceptor  
        this._axios.interceptors.response.use(function (response) {
            // Do something with response data            
            return response;  

        }, function (error) {            
            console.log(error.config);

            if(typeof error.response == "undefined") {
                toast.error("Il server remoto non è raggiungibile. Controllare il servizio LeMA.Choso!" +
                "Server: " + baseURLName, {position: toast.POSITION.BOTTOM_CENTER});

                // esco immediatamente
                return Promise.reject("Server Error");
            }
        
            if (error.response.status === 500) 
            {
                toast.error("Errore dal server remoto", {position: toast.POSITION.BOTTOM_CENTER});
            }
            
            return Promise.reject(error.response);
        });
    }

    // Post dei dati di privacy
    savePrivacyInfo(request) {            
        return this._axios.post(this.savePrivacyInfoUrl, request);
    }
    
    loadWebClientConfigData() {        
        return  this._axios.get(this.webClientConfigDataUrl)
            .then(response => {
                // Salvo i dati nel local storage
                localStorage.setItem("CONFIG_DATA", JSON.stringify(response.data));    
                
                // ritorno una promise risolta
                return Promise.resolve('Data loaded successfully');                
            }
        );
    }

    // Lista dei prodotti
    static getProductOptions() {
        
        let data = JSON.parse(localStorage.getItem("CONFIG_DATA")) || {};         
        return data.productOptions;  
    };

    // Lista dei settori merceologici
    static getBusinessDescriptions() {
        
        let data = JSON.parse(localStorage.getItem("CONFIG_DATA")) || {};           
        return data.businessDescriptions          
    };

    // Lista dei tipi jobs
    static getJobTypes(){
        
        let data = JSON.parse(localStorage.getItem("CONFIG_DATA")) || {};           
        return data.jobTypes
    }

    // Lista dei tipi jobs
    static getAtecoCodes(){
        
        let data = JSON.parse(localStorage.getItem("CONFIG_DATA")) || {};           
        return data.atecoOptions
    }

    getSubscriptionSession() {
        return this._axios.get(this.subscriptionSessionUrl);
    }

    // Controlla che esista un iban, e nel caso restituisce info inerenti
    checkIban(iban) {                        
        // Debug
        
        return this._axios.get(this.checkIbanUrl + "/?iban=" + iban);
    }

    // Check della partita iva
    checkPIva(piva) {    
        return this._axios.get(this.checkPartitaIvaUrl + "/" + piva);
    }
    
    getConsumptionEstimate(ee_amount, gas_amount, period, expend) {
        return this._axios.get(this.getConsumptionEstimateUrl + "/?ee_amount=" + ee_amount + "&gas_amount=" + gas_amount + "&period=" + period + "&expend=" + expend);
    }

    checkActivationCode(code) {        
        return this._axios.get(this.checkActivationCodeUrl + "/"+code);
    }

    // Post dei dati di contatti
    saveContactData(request) {    
        // Debug
        
        
        return this._axios.post(this.saveContactDataUrl, request)
            .then(response => {
                
            })
            .catch(err => {

                // TODO: segnalare all'utente errori nel salvataggio
                console.error(err);
            }
        );        
    }

    // Post dei files di attivazione al server
    saveActivationFiles(repowerCode, request, fileKind) {                
        
        
        return this._axios.post(this.activationFileDataUrl + "/" + repowerCode + "/" +fileKind, request)
            .then(response => response.data)
            .catch(err => {

                // TODO: segnalare all'utente errori nel salvataggio
                console.error(err);
            }
        );        
    }

    // Creazione thumbnails a seguito della creazione di un file
    createThumbnails(request) {                
        
        
        return this._axios.post(this.createThumbnailsUrl, request)
            .then(response => response.data)
            .catch(err => {

                // TODO: segnalare all'utente errori nel salvataggio
                console.error(err);
            }
        );        
    }

    // Post dei dati di attivazione al server
    saveActivationData(request) {                
        
        
        return this._axios.post(this.activationDataUrl, request)
            .then(response => {
                
            })
            .catch(err => {

                // TODO: segnalare all'utente errori nel salvataggio
                console.error(err);
            }
        );        
    }

    // Post dei files di attivazione al server
    deleteActivationFiles(idFile) {                
        
        
        return this._axios.delete(this.deleteFileDataUrl + "/" + idFile)
            .then(response => {
                
            })
            .catch(err => {

                // TODO: segnalare all'utente errori nel salvataggio
                console.error(err);
            }
        );        
    }

    saveProfilationData(request) {                              
        return this._axios.post(this.profilationDataUrl, request);        
    }


    getProfilationData() {                        
        
                
        return this._axios.get(this.getProfilationDataUrl)
            .then(response => {
                

                 // ritorno una promise risolta contenente i dati di profilazione
                 return Promise.resolve(response.data);   
            })
            .catch(err => {
                console.error(err);
            }
        );        
    }

    getQrCodeLink(repowerCode, linkKind) {
        return this._axios.get(this.qrCodeUrl + "/" + repowerCode + "/" + linkKind);        
    }
}

// Export singleton Service Class
export default LemaApi;