1. Work Order Creation Flow
public async Task<WorkOrderFormResponse?> WorkOrderSaveAsDraft(WorkOrderCreateRequest workOrderCreateRequest)
{
using var transaction = await _dbContext.Database.BeginTransactionAsync();
try
{
// 1. Validate registration data
await _workOrderValidationService.ValidateRegistrationRequest(workOrderCreateRequest.RegistrationCreateRequest);
// 2. Create work order entity
var workOrder = await _workOrderMapperService.MapperWorkOrder(workOrderCreateRequest.RegistrationCreateRequest);
_dbContext.WorkOrder.Add(workOrder);
await _dbContext.SaveChangesAsync();
// 3. Create related entities (Location, Payers, Utilization, etc.)
// ... complex entity creation logic
await _dbContext.SaveChangesAsync();
await transaction.CommitAsync();
return await GetWorkOrderForm(workOrderID);
}
catch (Exception)
{
await transaction.RollbackAsync();
throw;
}
}
Key Technical Aspects:
• Transactional Integrity: Uses database transactions to ensure data consistency
• Complex Object Mapping: Multiple related entities created in sequence
• Validation Pipeline: Multi-layer validation before persistence
• Error Handling: Automatic rollback on failures
2. External System Integration
Scenario: Sending work order data to external grid company systems via SOAP/XML.
public async Task<WorkOrderFormResponse?> TransmitWorkOrder(WorkOrderFormResponse workOrderForm)
{
try
{
var content = JsonContent.Create(workOrderForm);
var httpClient = _httpClientFactory.CreateClient("integrationserviceapi");
var response = await httpClient.PostAsync("api/SendWorkOrderForm", content);
if (!response.IsSuccessStatusCode)
{
var errorDetails = await response.Content.ReadAsStringAsync();
throw new NotFoundException($"Error: {response.StatusCode}, Details: {errorDetails}");
}
// Update work order status
var workOrder = await _dbContext.WorkOrder.FindAsync(workOrderForm.ID);
workOrder.WorkOrderStatusID = (int)Enums.WorkOrderStatus.RegistrationSent;
await _dbContext.SaveChangesAsync();
return workOrderForm;
}
catch (Exception ex)
{
throw new NotFoundException($"Error: {ex.Message}, WorkOrderFormID: {workOrderForm.ID}");
}
}
Key Technical Aspects:
• Service-to-Service Communication: HTTP client communication between microservices
• Status Management: Automatic status updates based on integration success
• Error Propagation: Detailed error information for troubleshooting
3. PDF Generation and Email Delivery