integration new apis
This commit is contained in:
@@ -2,35 +2,48 @@ import { HttpInterceptorFn } from '@angular/common/http';
|
||||
import { inject } from '@angular/core';
|
||||
import { LocationService } from '../services/location.service';
|
||||
import { LanguageService } from '../services/language.service';
|
||||
import { AuthService } from '../services/auth.service';
|
||||
import { environment } from '../../environments/environment';
|
||||
|
||||
/**
|
||||
* Interceptor that attaches X-Region and X-Language headers
|
||||
* to every outgoing request aimed at our API.
|
||||
*
|
||||
* The backend reads these headers to:
|
||||
* - filter catalog by region
|
||||
* - return translated content in the requested language
|
||||
*/
|
||||
/** Map internal language codes to API header values */
|
||||
const LANG_HEADER_MAP: Record<string, string> = {
|
||||
'ru': 'RU',
|
||||
'en': 'EN',
|
||||
'hy': 'AM',
|
||||
};
|
||||
|
||||
/** Map region IDs to API header values */
|
||||
const REGION_HEADER_MAP: Record<string, string> = {
|
||||
'moscow': 'Moscow',
|
||||
'spb': 'ST. Petersburg',
|
||||
'yerevan': 'Yerevan',
|
||||
};
|
||||
|
||||
export const apiHeadersInterceptor: HttpInterceptorFn = (req, next) => {
|
||||
// Only attach headers to our own API requests
|
||||
if (!req.url.startsWith(environment.apiUrl)) {
|
||||
return next(req);
|
||||
}
|
||||
|
||||
const locationService = inject(LocationService);
|
||||
const languageService = inject(LanguageService);
|
||||
const authService = inject(AuthService);
|
||||
|
||||
const regionId = locationService.regionId(); // '' when global
|
||||
const lang = languageService.currentLanguage(); // 'ru' | 'en' | 'hy'
|
||||
const regionId = locationService.regionId();
|
||||
const lang = languageService.currentLanguage();
|
||||
const currency = languageService.currentCurrency();
|
||||
const session = authService.session();
|
||||
|
||||
let headers = req.headers;
|
||||
|
||||
if (regionId) {
|
||||
headers = headers.set('X-Region', regionId);
|
||||
headers = headers.set('X-Region', REGION_HEADER_MAP[regionId] ?? regionId);
|
||||
}
|
||||
if (lang) {
|
||||
headers = headers.set('X-Language', lang);
|
||||
headers = headers.set('X-Language', LANG_HEADER_MAP[lang] ?? lang.toUpperCase());
|
||||
}
|
||||
headers = headers.set('Currency', currency || 'RUB');
|
||||
if (session?.sessionId) {
|
||||
headers = headers.set('WebSessionID', session.sessionId);
|
||||
}
|
||||
|
||||
return next(req.clone({ headers }));
|
||||
|
||||
@@ -167,6 +167,22 @@ const MOCK_ITEMS: any[] = [
|
||||
],
|
||||
tags: ['new', 'featured', 'apple'],
|
||||
badges: ['new', 'bestseller'],
|
||||
colour: 'Натуральный титан',
|
||||
size: '',
|
||||
names: [
|
||||
{ language: 'ru', value: 'iPhone 15 Pro Max' },
|
||||
{ language: 'en', value: 'iPhone 15 Pro Max' },
|
||||
{ language: 'hy', value: 'iPhone 15 Pro Max' }
|
||||
],
|
||||
descriptions: [
|
||||
{ language: 'ru', value: 'Новейший iPhone с титановым корпусом и чипом A17 Pro' },
|
||||
{ language: 'en', value: 'Latest iPhone with titanium body and A17 Pro chip' }
|
||||
],
|
||||
attributes: [
|
||||
{ key: 'Цвет', value: 'Натуральный титан' },
|
||||
{ key: 'Память', value: '256 ГБ' },
|
||||
{ key: 'Процессор', value: 'A17 Pro' }
|
||||
],
|
||||
simpleDescription: 'Новейший iPhone с титановым корпусом и чипом A17 Pro',
|
||||
description: [
|
||||
{ key: 'Цвет', value: 'Натуральный титан' },
|
||||
@@ -230,6 +246,20 @@ const MOCK_ITEMS: any[] = [
|
||||
],
|
||||
tags: ['new', 'android', 'samsung'],
|
||||
badges: ['new', 'sale'],
|
||||
colour: 'Титановый серый',
|
||||
size: '',
|
||||
names: [
|
||||
{ language: 'ru', value: 'Samsung Galaxy S24 Ultra' },
|
||||
{ language: 'en', value: 'Samsung Galaxy S24 Ultra' }
|
||||
],
|
||||
descriptions: [
|
||||
{ language: 'ru', value: 'Премиальный флагман Samsung с S Pen' },
|
||||
{ language: 'en', value: 'Premium Samsung flagship with S Pen' }
|
||||
],
|
||||
attributes: [
|
||||
{ key: 'Память', value: '512 ГБ' },
|
||||
{ key: 'ОЗУ', value: '12 ГБ' }
|
||||
],
|
||||
simpleDescription: 'Премиальный флагман Samsung с S Pen',
|
||||
description: [
|
||||
{ key: 'Цвет', value: 'Титановый серый' },
|
||||
|
||||
Reference in New Issue
Block a user