79 lines
2.5 KiB
TypeScript
79 lines
2.5 KiB
TypeScript
import { Injectable } from '@angular/core';
|
|
import { HttpClient } from '@angular/common/http';
|
|
import { Observable } from 'rxjs';
|
|
import { map } from 'rxjs/operators';
|
|
import { environment } from '../../environments/environment';
|
|
import { HeroImage } from '../model/hero-image.model';
|
|
import { CustomHttpResponse } from '../dto/custom-http-response';
|
|
|
|
@Injectable({
|
|
providedIn: 'root'
|
|
})
|
|
export class HeroImageService {
|
|
private host = environment.apiUrl;
|
|
|
|
constructor(private http: HttpClient) {}
|
|
|
|
public addHeroImage(formData: FormData): Observable<HeroImage> {
|
|
return this.http.post<any>(`${this.host}/hero`, formData).pipe(
|
|
map(img => this.transformHeroImage(img))
|
|
);
|
|
}
|
|
|
|
public updateHeroImage(id: number, formData: FormData): Observable<HeroImage> {
|
|
return this.http.put<any>(`${this.host}/hero/${id}`, formData).pipe(
|
|
map(img => this.transformHeroImage(img))
|
|
);
|
|
}
|
|
|
|
public getActiveHeroImage(): Observable<HeroImage> {
|
|
return this.http.get<any>(`${this.host}/hero/active`).pipe(
|
|
map(img => this.transformHeroImage(img))
|
|
);
|
|
}
|
|
|
|
public getHeroImageById(id: number): Observable<HeroImage> {
|
|
return this.http.get<any>(`${this.host}/hero/${id}`).pipe(
|
|
map(img => this.transformHeroImage(img))
|
|
);
|
|
}
|
|
|
|
public getAllHeroImages(): Observable<HeroImage[]> {
|
|
return this.http.get<any[]>(`${this.host}/hero`).pipe(
|
|
map(images => images.map(img => this.transformHeroImage(img)))
|
|
);
|
|
}
|
|
|
|
public deleteHeroImage(id: number): Observable<CustomHttpResponse> {
|
|
return this.http.delete<CustomHttpResponse>(`${this.host}/hero/${id}`);
|
|
}
|
|
|
|
public setActiveHeroImage(id: number): Observable<HeroImage> {
|
|
return this.http.put<any>(`${this.host}/hero/${id}/activate`, {}).pipe(
|
|
map(img => this.transformHeroImage(img))
|
|
);
|
|
}
|
|
|
|
// Transform backend response to match frontend model
|
|
private transformHeroImage(img: any): HeroImage {
|
|
return {
|
|
...img,
|
|
isActive: img.isActive !== undefined ? img.isActive : img.active
|
|
};
|
|
}
|
|
|
|
// Local storage methods
|
|
public addHeroImagesToLocalStorage(heroImages: HeroImage[]): void {
|
|
localStorage.setItem('heroImages', JSON.stringify(heroImages));
|
|
}
|
|
|
|
public getHeroImagesFromLocalStorage(): HeroImage[] {
|
|
const heroImages = localStorage.getItem('heroImages');
|
|
return heroImages ? JSON.parse(heroImages) : [];
|
|
}
|
|
|
|
public getActiveHeroImageFromLocalStorage(): HeroImage | null {
|
|
const heroImages = this.getHeroImagesFromLocalStorage();
|
|
return heroImages.find(img => img.isActive) || null;
|
|
}
|
|
} |