All files / services providedDocumentsApi.ts

71.42% Statements 5/7
100% Branches 0/0
60% Functions 3/5
71.42% Lines 5/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58                                                                1x 1x     3x 2x                                     1x  
// src/services/providedDocumentsApi.ts
//
// Investor-facing view of documents an admin has provided to them (FSC-57).
// The admin write surface lives in adminDocumentsApi.ts.
import {api} from './api';
 
// ============================================================================
// Types
// ============================================================================
 
/** A document an admin attached for the investor to download. */
export interface ProvidedDocument {
	providedDocumentId: number;
	investorId: number;
	title: string;
	description: string | null;
	originalFilename: string;
	mimeType: string;
	sizeBytes: number;
	/** Username of the admin who provided it — null if that user was removed. */
	uploadedByName: string | null;
	createdAt: string;
}
 
export interface ProvidedDocumentsResponse {
	documents: ProvidedDocument[];
}
 
// ============================================================================
// Endpoints
// ============================================================================
 
export const providedDocumentsApi = api.injectEndpoints({
	endpoints: (builder) => ({
		/** Documents an admin has provided to the authenticated investor. */
		listMyProvidedDocuments: builder.query<ProvidedDocumentsResponse, void>({
			query: () => '/investor/provided-documents',
			transformResponse: (response: {data: ProvidedDocumentsResponse}) => response.data,
			providesTags: ['ProvidedDocument']
		}),
 
		/** Download a provided document as a blob. */
		downloadMyProvidedDocument: builder.mutation<Blob, number>({
			query: (providedDocumentId) => ({
				url: `/investor/provided-documents/${String(providedDocumentId)}/file`,
				method: 'GET',
				responseHandler: (response) => response.blob(),
				cache: 'no-store'
			})
		})
	})
});
 
export const {
	useListMyProvidedDocumentsQuery,
	useDownloadMyProvidedDocumentMutation
} = providedDocumentsApi;