Insert Example
Overview
This document demonstrates the complete Insert flow using the AddToShipping feature from the EBusiness application. The flow starts with a POST request to the controller and ends with event publishing and subscriber processing.
Complete Flow Architecture
POST Request → Controller → Service → PreBus Plugins → Command Handler → RESTClient → External System
↓
Response ← Controller ← Service ← Command Handler ← RESTClient ← External SystemDetailed Flow Breakdown
1. POST Request
↓
2. Controller (API Entry Point)
↓
3. Service Layer (Business Orchestration)
↓
4. PreBus Processing (Validation Pipeline)
├── AddToShippingSequence (Plugin Registration)
├── AddToShippingDataPacket (Validation Context)
└── ValidateShipping Plugin (Business Rules)
↓
5. Command Handler (RESTClient Integration)
├── Internal DTO → Request DTO Mapping
├── RESTClient Call to External System
└── Response DTO Processing
↓
6. Event Publishing (Asynchronous Processing)
↓
7. Subscribers (Side Effects)Step-by-Step Implementation
1. API Controller - The Entry Point
File: ShippingController_AddToShipping.cs
What Happens:
HTTP Method:
POST /api/Shipping/AddToShippingInput:
AddToShippingDtofrom request bodyAction: Calls the service layer to process the shipping
Response: HTTP 201 Created with shipping ID
2. Service Layer - Business Orchestration
File: ProcessShippingService_AddToShipping.cs
What Happens:
PreBus Processing: Executes business rule sequences (plugins)
Validation: Processes business rule sequences
ID Generation: Generates unique shipping ID
Command Creation: Creates
AddToShippingCommandwith DTOCommand Processing: Calls the command handler
Result: Returns success with generated shipping ID
2.1. PreBus Business Rule Sequence - Validation Pipeline
File: AddToShippingSequence.cs
What Happens:
Plugin Registration: Registers validation plugins in execution order
Sequential Processing: Executes plugins one by one
Error Collection: Collects validation errors from all plugins
Early Exit: Stops processing if any plugin fails
2.2. PreBus Data Packet - Validation Context
File: AddToShippingDataPacket.cs
What Happens:
Context Container: Holds DTO and application context
Error Collection: Collects validation errors from plugins
Data Sharing: Allows plugins to share data during validation
Logging: Provides logging capabilities for plugins
2.3. PreBus Validation Plugin - Business Rules
File: ValidateShipping.cs
What Happens:
Business Rule Validation: Implements specific validation logic
Database Access: Can access repository for data validation
Error Reporting: Adds errors to the data packet if validation fails
Async Support: Supports asynchronous validation operations
Dependency Injection: Receives logger and repository factory
2.4. PreBus Plugin Benefits
Modular Validation: Each plugin handles one validation concern
Reusable Rules: Plugins can be reused across different features
Testable: Each plugin can be unit tested independently
Configurable: Plugins can be enabled/disabled per feature
Extensible: Easy to add new validation rules
Ordered Execution: Plugins execute in defined sequence
3. Command Handler - RESTClient Integration
File: AddToShippingHandler.cs
What Happens:
DTO Mapping: Converts internal DTO to Request DTO for external system
RESTClient Call: Calls external shipping service via RESTClient
Response Processing: Handles success/failure responses from external system
Logging: Logs success/failure of external service call
Event Publishing: Fires events based on external service result
4. NServiceBus Handler - Message Processing
File: AddToShippingNsbHandler.cs
What Happens:
Message Reception: Receives
AddToShippingCommandfrom message busLogging: Logs handler execution
Delegation: Calls the actual command handler
Context Bridge: Converts NServiceBus context to FlexBase context
6. Event Publishing - Asynchronous Processing
Event: ShippingAddedEvent
What Happens:
Event Creation: FlexBase creates event with shipping data
Message Bus: Event is published to message bus
Subscriber Notification: All subscribers are notified
7. RESTClient Integration - External Communication
File: ShippingRESTClient_AddToShipping.cs
What Happens:
HTTP Client: Creates HTTP client for external communication
Serialization: Converts Request DTO to JSON
HTTP Request: Sends POST to external shipping system
Response Handling: Processes HTTP response from external system
7.1. Request DTO - External Contract
File: AddToShippingRequestDto.cs
What Happens:
External Contract: Designed for external system consumption
Serialization: Optimized for JSON serialization
Validation: May include external system specific validation
7.2. Response DTO - External Contract
File: AddToShippingResponseDto.cs
What Happens:
External Contract: Designed for external system responses
Deserialization: Optimized for JSON deserialization
External Fields: May include external system specific fields
7.3. Mapping Configuration - DTO Transformation
File: ShippingRESTClientMapperProfile.cs
What Happens:
Request Mapping: Converts internal DTO to external request format
Response Mapping: Converts external response to internal DTO format
Field Transformation: Handles different field names and types
Business Logic: Applies business rules during mapping
8. Event Subscribers - Side Effects
File: NotifyLogisticsOnShippingAdded.cs
What Happens:
Event Reception: Receives
ShippingAddedEventfrom message busSide Effects: Executes business logic (emails, notifications, etc.)
Additional Events: Can fire more events if needed
Data Transfer Objects (DTOs)
Internal DTOs - Application Contracts
Input DTO: AddToShippingDto
AddToShippingDtoCommand: AddToShippingCommand
AddToShippingCommandExternal DTOs - External System Contracts
Request DTO: AddToShippingRequestDto
AddToShippingRequestDtoResponse DTO: AddToShippingResponseDto
AddToShippingResponseDtoDTO Mapping Relationships
Flow Summary
Synchronous Flow (Immediate Response)
POST Request → Controller receives request
Service Processing → Business orchestration and PreBus validation
PreBus Plugins → Sequential validation of business rules
Command Handler → RESTClient integration
Internal DTO → Request DTO mapping
External system API call
Response DTO processing
Response → HTTP 201 with shipping ID
Asynchronous Flow (Event Processing)
Event Publishing → ShippingAddedEvent published to message bus
Subscriber Processing → NotifyLogisticsOnShippingAdded executes
Side Effects → Emails, notifications, inventory updates
Additional Events → Can trigger more business processes
External Communication Flow
Internal DTO → Request DTO mapping
RESTClient Call → HTTP request to external system
External Response → Response DTO from external system
Response Mapping → Response DTO to Internal DTO
Data Integration → External data integrated with internal data
Key Benefits
Separation of Concerns: Each layer has a single responsibility
Testability: Each component can be tested independently
Scalability: Asynchronous processing handles high loads
Maintainability: Clear, readable code structure
Event-Driven: Loose coupling between components
This AddToShipping example demonstrates how FlexBase enables clean, maintainable, and scalable insert operations with proper separation of concerns and event-driven architecture! 🚀
Last updated