import type { ISiteData, ISiteLanguageItem, ISiteLanguagesResponse, ISiteNicheItem, ISiteNichesResponse, ISiteResponse } from '../types'; /** Класс для работы с данными сайта */ export class SiteDataService { private static readonly _serviceName = 'SiteDataService'; private static siteData: ISiteData = {} as ISiteData; private static updated: string; public static getServiceName() { return this._serviceName; } /** Метод для получения списка антиадблок доменов из админки */ public static getAntiAdblokDomains(): Array { return SiteDataService.siteData?.siteData?.antiAdblockDomains || []; } /** Метод для флага из админки */ public static isSiteEnabled(): boolean { return this.siteData.siteData.enabled; } /** Метод для флага из админки */ public static getSiteLanguages(): Array { return this.siteData.languages || []; } /** Метод для флага из админки */ public static getSiteNiches(): Array { return this.siteData.niches || []; } /** Метод для получения данных в сервис */ public static async fetchSiteData() { const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN; const xDomain = process.env.NUXT_PUBLIC_X_DOMAIN || ''; try { const fetchOptions = { method: 'GET' as const, headers: { 'X-Domain': xDomain }, responseType: 'json' as const, }; const [siteData, languagesResponse, nichesResponse] = await Promise.all([ $fetch<{ data: ISiteResponse }>(`${apiUrl}/v1/site`, fetchOptions).then(r => r.data), $fetch<{ data: ISiteLanguagesResponse }>(`${apiUrl}/v1/site/languages`, fetchOptions).then(r => r.data), $fetch<{ data: ISiteNichesResponse }>(`${apiUrl}/v1/site/niches`, fetchOptions).then(r => r.data), ]); SiteDataService.siteData = { siteData: siteData, languages: languagesResponse?.items || [], niches: nichesResponse?.items || [], }; } catch (e) { console.error('Failed to fetch site data: ', e); } } /** Метод для получения данных о времени последнего обновления */ public static getLastUpdate() { return this.updated; } }