import { HttpClient } from '@angular/common/http'; import { inject, Injectable } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; import { IUser } from '../model/interface/user.interface'; import { IKey } from '../model/interface/key.interface'; import { ICylinder } from '../model/interface/cylinder.interface'; import { HotToastService } from '@ngxpert/hot-toast'; @Injectable({ providedIn: 'root' }) export class ApiService { private http: HttpClient = inject(HttpClient); private toast: HotToastService = inject(HotToastService); public keys: BehaviorSubject = new BehaviorSubject([]); public cylinders: BehaviorSubject = new BehaviorSubject([]); constructor() { } getAllUsers(): Observable { return this.http.get('/api/user'); } saveUser(user: IUser) { return this.http.post('/api/user', user); } getRoles(): Observable<{id: string, name: string}[]> { return this.http.get<{id: string, name: string}[]>('/api/role'); } private getKeys(): Observable { return this.http.get('api/key') } refreshKeys(): void{ this.getKeys().subscribe({ next: keys => { this.keys.next(keys); }, error: () => { this.toast.error('Fehler beim Laden der Schlüssel') } }) } getLostKeys(): Observable { return this.http.get('api/key/lost') } updateKey(key: IKey): Observable { return this.http.put('api/key', key); } createKey(key: any) { return this.http.post('api/key', key); } createSystem(keySystem: any) { return this.http.post('api/system', keySystem); } getSystems(): Observable { return this.http.get('api/system'); } getSystemManagers(id: string): Observable { return this.http.get(`api/system/${id}/manager`); } handoverKey(data: any) { return this.http.post(`api/key/${data.key.id}/handover`, data); } getHandovers(keyID: string): Observable { return this.http.get(`api/key/${keyID}/handover`); } createCustomer(data: { name: string, system: any}) { return this.http.post('api/customer', data); } getCustomers(): Observable { return this.http.get('api/customer') } deleteKey(id: string) { return this.http.delete(`api/key/${id}`); } getKeyArchive(): Observable { return this.http.get('api/key/archive'); } restoreKey(id: string) { return this.http.put(`api/key/${id}/restore`, null); } private getCylinders(): Observable { return this.http.get('api/cylinder'); } /** * Aktualisiert die Zylinder im Behaviour Subject * cylinders * @returns Promise wenn geladen */ refreshCylinders(): Promise { return new Promise(resolve => { this.getCylinders().subscribe({ next: data => { this.cylinders.next(data); }, error: () => { this.toast.error('Fehler beim Laden der Zylinder') }, complete: () => resolve() }) }) } deleteCylinder(cylinder: ICylinder): Observable { return this.http.delete(`api/cylinder/${cylinder.id}`) } deleteUser(id: string) { return this.http.delete(`api/user/${id}`) } addManager(systemID: string, email: string): Observable { return this.http.post(`api/system/${systemID}/manager`, { email, action: 'add' }); } removeManager(systemID: string, email: string): Observable { return this.http.post(`api/system/${systemID}/manager`, { email, action: 'remove' }); } getStats(): Observable<{ keys: number, cylinders: number, systems: number, handedOut: number }> { return this.http.get<{ keys: number, cylinders: number, systems: number, handedOut: number }>('api/user/stats'); } getActivities(): Observable { return this.http.get('api/user/activities'); } createCylinder(data: any) { return this.http.post('api/cylinder', data); } getSettings(): Observable { return this.http.get('api/user/settings') } updateSettings(settings: any): Observable { return this.http.post('api/user/settings', settings) } }