PageSourceSearch

https://www.ciudaddelaluz.com/services/PressService.js

js ciudaddelaluz.com collected 2026-09-25 00:46:27 UTC 6,232 bytes, 174 lines download raw bytes

1// services/PressService.js
2import { apiClient } from './core/ApiClient.js';
3import { PressMock } from '../data/mocks/PressMock.js';
4import { AppConfig } from '../config/AppConfig.js';
5import { sanitizerService } from "./SanitizerService.js";
6import { renderBlock } from '../htmlrenderer/htmlrenderer.js';
7import { i18n } from "./I18nService.js";
8import { mediaService } from './MediaService.js';
9
10class PressService {
11
12    /**
13     * Helper privado para obtener la rama del mock según el idioma actual.
14     */
15    _getLocalizedMock() {
16        const lang = i18n.getCurrentLocale();
17        return PressMock[lang] || PressMock['es'];
18    }
19
20    /**
21     * Obtiene todos los datos de la sección de prensa (Notas, Clipping, Contacto, Kit).
22     */
23    async getPressData() {
24        const localizedMock = this._getLocalizedMock();
25
26        if (AppConfig.USE_REMOTE_API) {
27            try {
28                let response = await apiClient.get('/api/press/overview', localizedMock);
29                let data = response.data ? response.data : response;
30
31                data = sanitizerService.sanitizeResponse(data);
32
33                // Procesar las notas de prensa si vienen en formato de bloques (Strapi)
34                if (data.releases) {
35                    data.releases = data.releases.map(pr => {
36                        if (pr.content && Array.isArray(pr.content)) {
37                            pr.content = renderBlock(pr.content);
38                        }
39                        return pr;
40                    });
41                }
42
43                return data;
44            } catch (error) {
45                console.error("Error API Press, usando mock como fallback", error);
46                return localizedMock;
47            }
48        } else {
49            return Promise.resolve(localizedMock);
50        }
51    }
52
53    async getPressReleases(queryString = '') {
54        const localizedMock = this._getLocalizedMock().releases;
55
56        if (AppConfig.USE_REMOTE_API) {
57            try {
58                let response = await apiClient.get(`/api/press-releases?filters[sourceType][$eq]=internal&${queryString}`, localizedMock);
59                // let data = response.data ? response.data : response;
60
61                response.data = sanitizerService.sanitizeResponse(response.data);
62
63                // Procesar las notas de prensa si vienen en formato de bloques (Strapi)
64                if (response.data) {
65                    response.data = response.data.map(pr => {
66                        if (pr.content && Array.isArray(pr.content)) {
67                            pr.content = renderBlock(pr.content);
68                        }
69                        return pr;
70                    });
71                }
72
73                return response;
74            } catch (error) {
75                console.error("Error API Press, usando mock como fallback", error);
76                return localizedMock;
77            }
78        } else {
79            return Promise.resolve(localizedMock);
80        }
81    }
82
83    /**
84     * Obtiene el detalle de una nota de prensa específica.
85     */
86    async getPressReleaseDetail(id) {
87        const localizedMock = this._getLocalizedMock();
88        const mockDetail = localizedMock.releases.data.find(r => r.id == id);
89
90        if (AppConfig.USE_REMOTE_API) {
91            try {
92                let response = await apiClient.get(`/api/press-releases/${id}`, mockDetail);
93                let data = response.data ? response.data : response;
94
95                data = sanitizerService.sanitizeResponse(data);
96
97                // Si el contenido viene de Strapi (bloques), lo renderizamos a HTML
98                if (data.content && Array.isArray(data.content)) {
99                    data.content = renderBlock(data.content);
100                }
101
102                return data;
103            } catch (error) {
104                console.error(`Error obteniendo nota de prensa ${id}, usando mock`, error);
105                return mockDetail;
106            }
107        } else {
108            return Promise.resolve(mockDetail);
109        }
110    }
111
112    async getClipping(queryString = "") {
113        const localizedMock = this._getLocalizedMock().clipping;
114
115        if (AppConfig.USE_REMOTE_API) {
116            try {
117                let response = await apiClient.get(`/api/press-releases?filters[sourceType][$eq]=clipping&${queryString}`, localizedMock);
118
119                response.data = sanitizerService.sanitizeResponse(response.data);
120
121                return response;
122            } catch (error) {
123                console.error("Error API Press, usando mock como fallback", error);
124                return localizedMock;
125            }
126        } else {
127            return Promise.resolve(localizedMock);
128        }
129    }
130
131    async getDossier() {
132        const localizedMock = this._getLocalizedMock().dossier;
133        
134        if (AppConfig.USE_REMOTE_API) {
135            try {
136                let response = await apiClient.get(`/api/dossier`, localizedMock);
137                let data = response.data ? response.data : response;
138
139                data = sanitizerService.sanitizeResponse(data);
140                if (data.url) data.url = mediaService.getImageUrl(data.url);
141
142                return data;
143            } catch (error) {
144                console.error(`Error obteniendo dossier, usando mock`, error);
145                return localizedMock;
146            }
147        } else {
148            return Promise.resolve(localizedMock);
149        }
150    }
151
152    async getGreenBook() {
153        const localizedMock = this._getLocalizedMock().green_book;
154
155        if (AppConfig.USE_REMOTE_API) {
156            try {
157                let response = await apiClient.get(`/api/green-book`, localizedMock);
158                let data = response.data ? response.data : response;
159
160                data = sanitizerService.sanitizeResponse(data);
161                if (data.url) data.url = mediaService.getImageUrl(data.url);
162
163                return data;
164            } catch (error) {
165                console.error(`Error obteniendo green book, usando mock`, error);
166                return localizedMock;
167            }
168        } else {
169            return Promise.resolve(localizedMock);
170        }
171    }
172}
173
174export const pressService = new PressService();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.