Files
GNX-WEB/frontEnd/lib/api/aboutService.ts
Iliyan Angelov 366f28677a update
2025-11-24 03:52:08 +02:00

326 lines
6.7 KiB
TypeScript

import { API_BASE_URL } from '../config/api';
// Types for About Us data
export interface AboutStat {
number: string;
label: string;
order: number;
}
export interface AboutSocialLink {
platform: string;
url: string;
icon: string;
aria_label: string;
order: number;
}
export interface AboutBanner {
id: number;
title: string;
subtitle: string;
description: string;
badge_text: string;
badge_icon: string;
cta_text: string;
cta_link: string;
cta_icon: string;
image_url: string | null;
is_active: boolean;
stats: AboutStat[];
social_links: AboutSocialLink[];
created_at: string;
updated_at: string;
}
export interface AboutFeature {
title: string;
description: string;
icon: string;
order: number;
}
export interface AboutService {
id: number;
title: string;
subtitle: string;
description: string;
badge_text: string;
badge_icon: string;
image_url: string | null;
cta_text: string;
cta_link: string;
is_active: boolean;
features: AboutFeature[];
created_at: string;
updated_at: string;
}
export interface AboutProcessStep {
step_number: string;
title: string;
description: string;
order: number;
}
export interface AboutProcess {
id: number;
title: string;
subtitle: string;
description: string;
badge_text: string;
badge_icon: string;
image_url: string | null;
cta_text: string;
cta_link: string;
is_active: boolean;
steps: AboutProcessStep[];
created_at: string;
updated_at: string;
}
export interface AboutMilestone {
year: string;
title: string;
description: string;
order: number;
}
export interface AboutJourney {
id: number;
title: string;
subtitle: string;
description: string;
badge_text: string;
badge_icon: string;
image_url: string | null;
cta_text: string;
cta_link: string;
is_active: boolean;
milestones: AboutMilestone[];
created_at: string;
updated_at: string;
}
export interface AboutPageData {
banner: AboutBanner;
service: AboutService;
process: AboutProcess;
journey: AboutJourney;
}
class AboutServiceAPI {
private baseUrl = `${API_BASE_URL}/api/about`;
/**
* Get all about page data in one request
*/
async getAboutPageData(): Promise<AboutPageData> {
try {
const response = await fetch(`${this.baseUrl}/page/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
throw error;
}
}
/**
* Get all about banners
*/
async getBanners(): Promise<AboutBanner[]> {
try {
const response = await fetch(`${this.baseUrl}/banner/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data.results || data;
} catch (error) {
throw error;
}
}
/**
* Get a specific about banner by ID
*/
async getBanner(id: number): Promise<AboutBanner> {
try {
const response = await fetch(`${this.baseUrl}/banner/${id}/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
throw error;
}
}
/**
* Get all about services
*/
async getServices(): Promise<AboutService[]> {
try {
const response = await fetch(`${this.baseUrl}/service/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data.results || data;
} catch (error) {
throw error;
}
}
/**
* Get a specific about service by ID
*/
async getService(id: number): Promise<AboutService> {
try {
const response = await fetch(`${this.baseUrl}/service/${id}/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
throw error;
}
}
/**
* Get all about processes
*/
async getProcesses(): Promise<AboutProcess[]> {
try {
const response = await fetch(`${this.baseUrl}/process/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data.results || data;
} catch (error) {
throw error;
}
}
/**
* Get a specific about process by ID
*/
async getProcess(id: number): Promise<AboutProcess> {
try {
const response = await fetch(`${this.baseUrl}/process/${id}/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
throw error;
}
}
/**
* Get all about journeys
*/
async getJourneys(): Promise<AboutJourney[]> {
try {
const response = await fetch(`${this.baseUrl}/journey/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data.results || data;
} catch (error) {
throw error;
}
}
/**
* Get a specific about journey by ID
*/
async getJourney(id: number): Promise<AboutJourney> {
try {
const response = await fetch(`${this.baseUrl}/journey/${id}/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
throw error;
}
}
}
// Export a singleton instance
export const aboutService = new AboutServiceAPI();
export default aboutService;