Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Services/
├── WorkOrder/
│   ├── ApiServices/
│   │   ├── WorkOrderApiService.cs
│   │   └── Interfaces/
│   │       └── IWorkOrderApiService.cs
│   ├── ValidationServices/
│   │   ├── WorkOrderValidationService.cs
│   │   └── Interfaces/
│   │       └── IWorkOrderValidationService.cs
│   └── MapperServices/
│       ├── WorkOrderMapperService.cs
│       └── Interfaces/
│           └── IWorkOrderMapperService.cs


  • Constructor Dependency Injection


public class WorkOrderApiService : IWorkOrderApiService
{
    private readonly DatabaseContext _dbContext;
    private readonly IWorkOrderValidationService _workOrderValidationService;
    private readonly IWorkOrderMapperService _workOrderMapperService;
    private readonly IHttpClientFactory _httpClientFactory;

    public WorkOrderApiService(
        DatabaseContext dbContext,
        IWorkOrderValidationService workOrderValidationService,
        IWorkOrderMapperService workOrderMapperService,
        IHttpClientFactory httpClientFactory)
    {
        _dbContext = dbContext;
        _workOrderValidationService = workOrderValidationService;
        _workOrderMapperService = workOrderMapperService;
        _httpClientFactory = httpClientFactory;
    }
}



  • Async/Await Pattern

All service methods must be asynchronous:


// ✅ Good - Consistent async pattern
public async Task<WorkOrderFormResponse?> CreateWorkOrder(WorkOrderCreateRequest request)
{
    await _workOrderValidationService.ValidateRegistrationRequest(request.RegistrationCreateRequest);
    var workOrder = await _workOrderMapperService.MapperWorkOrder(request.RegistrationCreateRequest);
    _dbContext.WorkOrder.Add(workOrder);
    await _dbContext.SaveChangesAsync();
    return await GetWorkOrderForm(workOrder.ID);
}

// ❌ Bad - Mixing sync and async
public WorkOrderFormResponse CreateWorkOrder(WorkOrderCreateRequest request)
{
    var result = ValidateRegistrationRequest(request.RegistrationCreateRequest).Result;
    // Causes deadlocks and blocking
}