import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { ApiConfigService } from '../../../core/services/api-config.service'; import { Payee1099ListItem, Payee1099, SavePayee1099Request, } from '../models/payee1099.model'; @Injectable({ providedIn: 'root' }) export class Payee1099ApiService { private readonly endpoint: string; constructor(private http: HttpClient, apiConfig: ApiConfigService) { this.endpoint = apiConfig.getApiUrl('payee-1099'); } getAll(includeInactive = false): Observable { return this.http.get(this.endpoint, { params: { includeInactive: String(includeInactive) }, }); } getById(id: number): Observable { return this.http.get(`${this.endpoint}/${id}`); } create(req: SavePayee1099Request): Observable<{ id: number }> { return this.http.post<{ id: number }>(this.endpoint, req); } update(id: number, req: SavePayee1099Request): Observable { return this.http.put(`${this.endpoint}/${id}`, req); } delete(id: number): Observable { return this.http.delete(`${this.endpoint}/${id}`); } revealTin(id: number): Observable<{ tin: string | null }> { return this.http.get<{ tin: string | null }>(`${this.endpoint}/${id}/tin`); } uploadW9(id: number, file: File): Observable { const form = new FormData(); form.append('file', file); return this.http.post(`${this.endpoint}/${id}/w9`, form); } /** * Fetches the stored W-9 as a Blob via HttpClient so the auth interceptor attaches * the JWT. A plain window.open on the API URL would be an unauthenticated browser * navigation and the API's permission gate would reject it. */ downloadW9(id: number): Observable { return this.http.get(`${this.endpoint}/${id}/w9`, { responseType: 'blob' }); } }