@vulog/aima-document
Version:
55 lines (47 loc) • 1.91 kB
text/typescript
import { Client } from '@vulog/aima-client';
import { z } from 'zod';
import {
DocumentSummary,
PersonalInformationDocument,
PersonalInformationDocumentType,
personalInformationDocumentTypeSchema,
} from './types';
const schema = z.object({
userId: z.string().trim().nonempty().uuid(),
types: z.array(personalInformationDocumentTypeSchema).min(0).optional(),
});
export const getUserDocuments = async (
client: Client,
userId: string,
types?: PersonalInformationDocumentType[] // optional parameter
): Promise<DocumentSummary> => {
const result = schema.safeParse({ userId, types });
if (!result.success) {
throw new TypeError('Invalid args', {
cause: result.error.issues,
});
}
const docSumary: DocumentSummary = await client
.get<DocumentSummary>(`/boapi/proxy/user/fleets/${client.clientOptions.fleetId}/users/${userId}/documents`)
.then(({ data }) => data);
if (docSumary && docSumary.documents?.length > 0 && result.data.types && result.data.types.length > 0) {
const piTypes = result.data.types.join(',');
docSumary.documents = await Promise.all(
docSumary.documents.map(async (doc) => {
const pi: PersonalInformationDocument = await client
.get<PersonalInformationDocument>(
`/boapi/proxy/user/fleets/${client.clientOptions.fleetId}/users/${userId}/documents/${doc.id}/pi?types=${piTypes}`
)
.then(({ data }) => data);
if (pi?.documentNumber1) {
return {
...doc, // Copy the original
documentNumber: pi.documentNumber1, // update the documentNumber field
};
}
return doc;
})
);
}
return docSumary;
};