@vulog/aima-document
Version:
Document management module for the AIMA platform. This module provides functionality to manage user documents, including creation, updates, and status management.
218 lines (173 loc) • 5.77 kB
Markdown
# @vulog/aima-document
Document management module for the AIMA platform. This module provides functionality to manage user documents, including creation, updates, and status management.
## Installation
```bash
npm install @vulog/aima-client @vulog/aima-core @vulog/aima-document
```
## Usage
### Initialize Client
```javascript
import { getClient } from '@vulog/aima-client';
import { createOrUpdateDocument, getUserDocuments, updateDocumentStatus } from '@vulog/aima-document';
const client = getClient({
apiKey: 'your-api-key',
baseUrl: 'https://your-api-base-url',
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
fleetId: 'your-fleet-id',
});
```
## API Reference
### createOrUpdateDocument
Create a new document or update an existing one for a user.
```javascript
const document = await createOrUpdateDocument(client, {
entityId: 'user-uuid-here',
documentType: 'DRIVER_LICENSE',
fileData: 'base64-encoded-file-data',
fileName: 'license.pdf',
mimeType: 'application/pdf'
});
```
**Parameters:**
- `client`: AIMA client instance
- `payload`: Document configuration object
- `entityId`: User UUID
- `documentType`: Type of document (e.g., 'DRIVER_LICENSE', 'ID_CARD', 'PASSPORT')
- `fileData`: Base64 encoded file data
- `fileName`: Name of the file
- `mimeType`: MIME type of the file
### getUserDocuments
Retrieve all documents for a specific user.
```javascript
const documents = await getUserDocuments(client, 'user-uuid-here');
```
**Parameters:**
- `client`: AIMA client instance
- `entityId`: User UUID
**Returns:** Array of user documents
### updateDocumentStatus
Update the status of a document.
```javascript
const updatedDocument = await updateDocumentStatus(client, {
documentId: 'document-id-here',
status: 'APPROVED',
notes: 'Document verified successfully'
});
```
**Parameters:**
- `client`: AIMA client instance
- `payload`: Status update configuration
- `documentId`: Document identifier
- `status`: New status ('PENDING', 'APPROVED', 'REJECTED')
- `notes`: Optional notes about the status change
## Types
### Document
```typescript
interface Document {
id: string;
entityId: string;
documentType: string;
fileName: string;
mimeType: string;
fileSize: number;
status: 'PENDING' | 'APPROVED' | 'REJECTED';
uploadDate: string;
lastModified: string;
notes?: string;
}
```
### DocumentType
Common document types include:
- `DRIVER_LICENSE`: Driver's license
- `ID_CARD`: National ID card
- `PASSPORT`: Passport
- `INSURANCE`: Insurance document
- `REGISTRATION`: Vehicle registration
## Error Handling
All functions include validation and will throw appropriate errors if:
- Required parameters are missing
- Invalid document types are provided
- File data is invalid
- User or document not found
## Examples
### Complete Document Management Workflow
```javascript
import { getClient } from '@vulog/aima-client';
import { createOrUpdateDocument, getUserDocuments, updateDocumentStatus } from '@vulog/aima-document';
import fs from 'fs';
const client = getClient({
apiKey: 'your-api-key',
baseUrl: 'https://your-api-base-url',
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
fleetId: 'your-fleet-id',
});
async function documentWorkflow() {
try {
// Read and encode a file
const fileBuffer = fs.readFileSync('path/to/license.pdf');
const base64Data = fileBuffer.toString('base64');
// Create a new document
const document = await createOrUpdateDocument(client, {
entityId: 'user-uuid-here',
documentType: 'DRIVER_LICENSE',
fileData: base64Data,
fileName: 'license.pdf',
mimeType: 'application/pdf'
});
console.log('Document created:', document);
// Get all user documents
const documents = await getUserDocuments(client, 'user-uuid-here');
console.log('User documents:', documents);
// Update document status
const updatedDocument = await updateDocumentStatus(client, {
documentId: document.id,
status: 'APPROVED',
notes: 'License verified and approved'
});
console.log('Document status updated:', updatedDocument);
} catch (error) {
console.error('Document management error:', error);
}
}
```
### File Upload Helper
```javascript
import { createOrUpdateDocument } from '@vulog/aima-document';
import fs from 'fs';
async function uploadDocument(client, filePath, documentType, entityId) {
try {
// Read file
const fileBuffer = fs.readFileSync(filePath);
const base64Data = fileBuffer.toString('base64');
// Get file info
const stats = fs.statSync(filePath);
const fileName = filePath.split('/').pop();
const mimeType = getMimeType(fileName);
// Upload document
return await createOrUpdateDocument(client, {
entityId,
documentType,
fileData: base64Data,
fileName,
mimeType
});
} catch (error) {
console.error('File upload error:', error);
throw error;
}
}
function getMimeType(fileName) {
const ext = fileName.split('.').pop().toLowerCase();
const mimeTypes = {
'pdf': 'application/pdf',
'jpg': 'image/jpeg',
'jpeg': 'image/jpeg',
'png': 'image/png',
'doc': 'application/msword',
'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
};
return mimeTypes[ext] || 'application/octet-stream';
}
```