interceptor.js 2.37 KB
angular.module('focaConfiguracion')
    .factory("RequestHeadersInterceptor", [ '$injector',
        function($injector) {

            function reintentarRequest(httpConfig) {

                var $timeout = $injector.get('$timeout');

                $timeout(function() {

                    var $http = $injector.get('$http');
                    return $http(httpConfig.config);
                }, 5000);

                return getDataSqlite(httpConfig);
            }

            function updateDataSqlite(request) {

                var sqliteService = $injector.get('focaSqliteService');

                sqliteService.updateQuery(
                    request.config.url,
                    JSON.stringify(request.config.data),
                    request.config.method,
                    JSON.stringify(request.data))
            }

            function getDataSqlite(request) {
                return new Promise(function(resolve) {

                    var sqliteService = $injector.get('focaSqliteService');

                    sqliteService.getQuery(
                        request.config.url,
                        JSON.stringify(request.config.data),
                        request.config.method,
                        respuesta);

                        function respuesta(config) {

                            var request = {
                                data: JSON.parse(config),
                                status: 200
                            };

                            console.log(request);

                            if (config) {
                                resolve(request);
                            }
                        }
                });
            }

            var request = {
                responseError: async function(config) {

                    if (config.status === -1) {

                        var data = await reintentarRequest(config);

                        config.data = data.data;

                        return config;

                    } else {
                        return config;
                    }
                },
                response: function(response) {

                    if (typeof response.data !== 'string') {
                        updateDataSqlite(response);
                    }
                    return response;
                }
            }

            return request;
        }
    ]);