import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { BehaviorSubject, catchError, map, Observable, of, tap } from 'rxjs'; import Transaction from '@model/transaction' import { SendRequest, SendResponse } from '@message/Send'; @Injectable({ providedIn: 'root', }) export class APIService { private apiUrl = '/api'; private isAuthenticatedSubject = new BehaviorSubject(false); isAuthenticated$ = this.isAuthenticatedSubject.asObservable(); constructor(private http: HttpClient){} login(username: string, password: string): Observable{ return this.http.post(`${this.apiUrl}/auth/login`,{ 'username': username, 'password': password}); } logout(): Observable{ return this.http.post(`${this.apiUrl}/auth/logout`, {}); } checkAuthStatus(): Observable { return this.http.get(`${this.apiUrl}/auth/status`).pipe( map(() => true), catchError(() => of(false)), tap({ next: () => this.isAuthenticatedSubject.next(true), error: () => this.isAuthenticatedSubject.next(false), }) ); } getTransactions(): Observable{ return this.http.get(`${this.apiUrl}/transactions`); } send(amount: number, recipientID: string, reference: string = ""): Observable{ let request: SendRequest = {amount, recipientID, reference}; return this.http.post(`${this.apiUrl}/send`, request); } }