Delete Example
Overview
This document demonstrates the complete Delete flow using the DeleteShipping feature from the EBusiness application. The flow starts with a DELETE request to the controller and ends with event publishing and subscriber processing.
Complete Flow Architecture
DELETE Request → Controller → Service → PreBus Plugins → Command Handler → RESTClient → External System
↓
Response ← Controller ← Service ← Command Handler ← RESTClient ← External SystemDetailed Flow Breakdown
1. DELETE Request
↓
2. Controller (API Entry Point)
↓
3. Service Layer (Business Orchestration)
↓
4. PreBus Processing (Validation Pipeline)
├── DeleteShippingSequence (Plugin Registration)
├── DeleteShippingDataPacket (Validation Context)
└── IsValidShipping 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_DeleteShipping.cs
What Happens:
HTTP Method:
DELETE /api/Shipping/DeleteShipping/{id}Input: Shipping ID from URL parameter
DTO Creation: Creates
DeleteShippingDtowith the IDAction: Calls the service layer to process the shipping deletion
Response: HTTP 200 OK with success status
2. Service Layer - Business Orchestration
File: ProcessShippingService_DeleteShipping.cs
What Happens:
PreBus Processing: Executes business rule sequences (plugins)
Validation: Processes business rule sequences
ID Generation: Generates unique key for tracking
Command Creation: Creates
DeleteShippingCommandwith DTOCommand Processing: Calls the command handler
Result: Returns success status
2.1. PreBus Business Rule Sequence - Validation Pipeline
File: DeleteShippingSequence.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: DeleteShippingDataPacket.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: IsValidShipping.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
3. Command Handler - RESTClient Integration
File: DeleteShippingHandler.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. Domain Model - Business Logic
File: Shipping/DeleteShipping.cs
What Happens:
Validation: Guards against null commands
ID Assignment: Sets the shipping ID from DTO
State Management: Marks entity as deleted (soft delete)
Child Objects: Processes child object deletions
5. NServiceBus Handler - Message Processing
File: DeleteShippingNsbHandler.cs
What Happens:
Message Reception: Receives
DeleteShippingCommandfrom 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: ShippingDeletedEvent (if implemented)
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. Event Subscribers - Side Effects
File: NotifyLogisticsOnShippingDeleted.cs (if implemented)
What Happens:
Event Reception: Receives
ShippingDeletedEventfrom message busSide Effects: Executes business logic (logistics updates, notifications, etc.)
Additional Events: Can fire more events if needed
Data Transfer Objects (DTOs)
Input DTO: DeleteShippingDto
DeleteShippingDtoCommand: DeleteShippingCommand
DeleteShippingCommandKey Differences from Insert/Update Flow
Delete-Specific Characteristics
URL Parameter: ID comes from URL path instead of request body
DTO Creation: Controller creates DTO with ID from URL
Soft Delete: Uses
SetDeleted()instead ofSetAdded()orSetModified()State Management: Marks entity as deleted (soft delete pattern)
HTTP Method: Uses
DELETEinstead ofPOSTorPUTMinimal Data: Only requires ID for deletion
PreBus Validation Focus
IsValidShipping: Validates shipping exists and can be deleted
Business Rules: Ensures shipping can be removed (not delivered, not in transit)
Data Integrity: Validates deletion doesn't violate business constraints
Soft Delete Pattern
Database: Entity is marked as deleted, not physically removed
Queries: Soft-deleted entities are filtered out of normal queries
Recovery: Deleted entities can be restored if needed
Audit Trail: Maintains complete history of deletions
Flow Summary
Synchronous Flow (Immediate Response)
DELETE Request → Controller receives request with ID
Service Processing → Business orchestration and PreBus validation
PreBus Plugins → Sequential validation of business rules
Command Handler → Data processing and soft delete
Domain Logic → Business rules and state management
Response → HTTP 200 OK with success status
Asynchronous Flow (Event Processing)
Event Publishing → ShippingDeletedEvent published to message bus
Subscriber Processing → NotifyLogisticsOnShippingDeleted executes
Side Effects → Logistics updates, carrier notifications, analytics
Key Benefits
Data Safety: Soft delete preserves data for recovery
Business Rules: Validates deletion is allowed
Audit Trail: Tracks who deleted what and when
Event-Driven: Notifies other systems of deletions
Testable: Each component can be tested independently
Maintainable: Clear separation of concerns
This DeleteShipping example demonstrates how FlexBase enables clean, maintainable, and scalable delete operations with proper validation, soft delete patterns, and event-driven architecture! 🚀
Last updated