import { Injectable, inject } from '@angular/core'; import { Observable } from 'rxjs'; import { ApiService, UploadProgress } from '../../../core/services/api.service'; import { DocumentResponseDto, DocumentVersionResponseDto, DownloadUrlResponseDto, DocumentType, } from '../../../api/models'; @Injectable({ providedIn: 'root', }) export class DocumentService { private readonly api = inject(ApiService); getDocuments(requestId: string): Observable { return this.api.get(`/requests/${requestId}/documents`); } getDocument(requestId: string, documentId: string): Observable { return this.api.get(`/requests/${requestId}/documents/${documentId}`); } getDocumentVersions( requestId: string, documentId: string ): Observable { return this.api.get( `/requests/${requestId}/documents/${documentId}/versions` ); } uploadDocument( requestId: string, file: File, docType: DocumentType, description?: string ): Observable { const formData = new FormData(); formData.append('file', file); formData.append('docType', docType); if (description) { formData.append('description', description); } return this.api.upload(`/requests/${requestId}/documents`, formData); } /** * Upload document with progress tracking */ uploadDocumentWithProgress( requestId: string, file: File, docType: DocumentType, description?: string ): Observable> { const formData = new FormData(); formData.append('file', file); formData.append('docType', docType); if (description) { formData.append('description', description); } return this.api.uploadWithProgress(`/requests/${requestId}/documents`, formData); } updateDocument( requestId: string, documentId: string, file: File ): Observable { const formData = new FormData(); formData.append('file', file); return this.api.upload( `/requests/${requestId}/documents/${documentId}`, formData ); } deleteDocument(requestId: string, documentId: string): Observable { return this.api.delete(`/requests/${requestId}/documents/${documentId}`); } getDownloadUrl(requestId: string, documentId: string): Observable { return this.api.get( `/requests/${requestId}/documents/${documentId}/download` ); } verifyDocument(requestId: string, documentId: string): Observable<{ verified: boolean }> { return this.api.get<{ verified: boolean }>( `/requests/${requestId}/documents/${documentId}/verify` ); } }