File Upload Service
Service managing file uploads, downloads, archival, and deletion for policy-related documents across Claims, Policy, and Quote contexts.
Service Supporting Service
Overview
The File Upload Service is a supporting domain service within the Capstone PAS responsible for managing the complete lifecycle of file uploads. It provides secure file storage using AWS S3 and supports both direct upload (base64) and pre-signed URL upload patterns.
Architecture
- Event Sourcing: File state changes are persisted as events
- CQRS: Separate read and write models for optimized queries
- S3 Integration: Direct integration with AWS S3 for file storage
- Pre-signed URLs: Secure, time-limited URLs for direct S3 access
- Kinesis Publishing: Domain events published to Kinesis streams with Avro serialization
Infrastructure
AWS Lambda Handlers
| Handler | Trigger | Purpose |
|---|---|---|
| UploadFileLambdaHandler | API Gateway | Direct file upload with base64 content |
| GeneratePreSignedUrlLambdaHandler | API Gateway | Generate pre-signed URL for S3 upload |
| S3FileUploadCompletedEventLambdaHandler | S3 Event | Process upload completion from S3 |
| GetFileLambdaHandler | API Gateway | Retrieve file metadata |
| GetBinaryStreamLambdaHandler | API Gateway | Download file content |
| DeleteFileLambdaHandler | API Gateway | Delete a file |
| ArchiveFileLambdaHandler | API Gateway | Archive a file |
| SetFileOriginationLambdaHandler | API Gateway | Update file origination |
| GetFileUploadCommandStatusQueryLambdaHandler | API Gateway | Check command status |
Event Publishing
Events are serialized using Avro format and published to Kinesis:
- Registry: AWS Glue Schema Registry (
sft-capstone-file-upload-event-stream-registry) - Stream:
sft-capstone-file-upload-{env}-event-stream
Capabilities
File Upload
- Upload files via base64 encoded content (UploadFile command)
- Generate pre-signed URLs for direct S3 uploads (GeneratePreSignedUrl command)
- Support for multiple file types: PDF, DOC, DOCX, XLS, XLSX, JPEG, PNG
- File size validation enforced (DomainConstants.MAX_FILE_SIZE_KB)
File Retrieval
- Retrieve file metadata by file ID (GetFile query)
- Download file binary content as stream (GetBinaryStream query)
- Generate pre-signed download URLs
File Lifecycle
- Archive files based on retention policy (ArchiveFile command)
- Delete files permanently (DeleteFile command)
- Track file status through lifecycle states: NEW -> UPLOADED -> ARCHIVED/DELETED
Origination Management
- Associate files with business contexts: CLAIMS, POLICY, QUOTE
- Update file origination post-upload (SetFileOrigination command)
- Emit FileOriginationSetEventV1 for downstream processing
Event Flow
Direct Upload Flow
UploadFile Command -> FileAggregateRoot -> FileUploadedEventV1 -> KinesisPre-signed URL Upload Flow
GeneratePreSignedUrl -> File (NEW) -> S3 Upload -> S3Event ->FileUploadCompletedEvent -> FileAggregateRoot -> FileUploadedEventV1 -> KinesisFile Status Lifecycle
NEW ---------> UPLOADED ---------> ARCHIVED | +--------------> DELETEDIntegration Points
Receives From
- AWS S3: S3Event notifications when pre-signed URL uploads complete
- API Gateway: REST commands and queries from clients
Publishes To
- Kinesis Stream: Domain events for downstream consumers
- Policy Service: Document attachments for policies
- Quote Service: Supporting documents during quoting
- Claims Service: Claim evidence and documentation