import { Injectable } from '@angular/core'; import {HttpClient, HttpParams} from '@angular/common/http'; import { Observable, throwError } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; import { UnidadOrganizativa } from '../model/model'; @Injectable({ providedIn: 'root' }) export class DataService { baseUrl: string = import.meta.env.NG_APP_BASE_API_URL; private apiUrl = `${this.baseUrl}/organizational-units?page=1&itemsPerPage=1000`; private clientsUrl = `${this.baseUrl}/clients?page=1&itemsPerPage=1000`; constructor(private http: HttpClient) {} getOrganizationalUnits(search: string = ''): Observable { let url = `${this.apiUrl}&type=organizational-unit`; if (search) { url += `&name=${encodeURIComponent(search)}`; } return this.http.get(url).pipe( map(response => { if (response['hydra:member'] && Array.isArray(response['hydra:member'])) { return response['hydra:member']; } else { throw new Error('Unexpected response format'); } }), catchError(error => { console.error('Error fetching unidades organizativas', error); return throwError(error); }) ); } getChildren(id: string): Observable { return this.http.get(`${this.apiUrl}&parent.id=${id}`).pipe( map(response => { if (response['hydra:member'] && Array.isArray(response['hydra:member'])) { return response['hydra:member'] } else { throw new Error('Unexpected response format'); } }), catchError(error => { console.error('Error fetching children', error); return throwError(error); }) ); } getClients(id: string): Observable { return this.http.get(`${this.clientsUrl}&organizationalUnit.id=${id}`).pipe( map(response => { if (response['hydra:member'] && Array.isArray(response['hydra:member'])) { return response['hydra:member'] } else { throw new Error('Unexpected response format'); } }), catchError(error => { console.error('Error fetching clients', error); return throwError(error); }) ); } getHardwareProfiles(): Observable { const url = `${this.baseUrl}/hardware-profiles`; return this.http.get(url).pipe( map(response => { if (response['hydra:member'] && Array.isArray(response['hydra:member'])) { return response['hydra:member'] } else { throw new Error('Unexpected response format'); } }), catchError(error => { console.error('Error fetching clients', error); return throwError(error); }) ); } getOgLives(): Observable { const url = `${this.baseUrl}/og-lives`; return this.http.get(url).pipe( map(response => { if (response['hydra:member'] && Array.isArray(response['hydra:member'])) { return response['hydra:member'] } else { throw new Error('Unexpected response format'); } }), catchError(error => { console.error('Error fetching clients', error); return throwError(error); }) ); } getRepositories(): Observable { const url = `${this.baseUrl}/image-repositories`; return this.http.get(url).pipe( map(response => { if (response['hydra:member'] && Array.isArray(response['hydra:member'])) { return response['hydra:member'] } else { throw new Error('Unexpected response format'); } }), catchError(error => { console.error('Error fetching clients', error); return throwError(error); }) ); } deleteElement(uuid: string, type: string): Observable { const url = type === 'client' ? `${this.baseUrl}/clients/${uuid}` : `${this.baseUrl}/organizational-units/${uuid}`; console.log('DELETE URL:', url); // Depuración return this.http.delete(url).pipe( catchError(error => { console.error('Error deleting element', error); return throwError(error); }) ); } changeParent(uuid: string): Observable { const url = `${this.baseUrl}/organizational-units/${uuid}/change-parent`; // @ts-ignore return this.http.post(url).pipe( catchError(error => { console.error('Error deleting element', error); return throwError(error); }) ); } getFilteredResults(filter1: string, filter2: string, filterName: string, filterIP: string, filterMAC: string, page: number, pageSize: number): Observable { let params = new HttpParams(); if (filter2 && filter2 !== 'none') { params = params.set('type', filter2); } if (filterName) { params = params.set('name', filterName); } if (filterIP) { params = params.set('ip', filterIP); } if (filterMAC) { params = params.set('mac', filterMAC); } params = params.set('page', page.toString()); params = params.set('itemsPerPage', pageSize.toString()); const url = filter1 === 'client' ? this.clientsUrl : this.apiUrl; return this.http.get(url, { params }).pipe( map(response => { if (response['hydra:member'] && Array.isArray(response['hydra:member'])) { return { results: response['hydra:member'], total: response['hydra:totalItems'] || response['hydra:member'].length }; } else { throw new Error('Unexpected response format'); } }), catchError(error => { console.error('Error fetching data', error); return throwError(error); }) ); } getFilters(): Observable { return this.http.get(`${this.baseUrl}/views?page=1&itemsPerPage=30`).pipe( map(response => { if (response['hydra:member'] && Array.isArray(response['hydra:member'])) { return response['hydra:member']; } else { throw new Error('Unexpected response format'); } }), catchError(error => { console.error('Error fetching filters', error); return throwError(error); }) ); } getFilter(id: string): Observable { return this.http.get(`${this.baseUrl}/views/` + id).pipe( map(response => { if (response.name && response.filters) { return response; } else { throw new Error('Unexpected response format'); } }), catchError(error => { console.error('Error fetching filters', error); return throwError(error); }) ); } getOrganizationalUnitById(id: string): Observable { const url = `${this.baseUrl}/organizational-units/${id}`; return this.http.get(url).pipe( catchError(error => { console.error('Error fetching organizational unit', error); return throwError(error); }) ); } }