| | | 1 | | using MechanicsSoftware.Application.Abstractions; |
| | | 2 | | using MechanicsSoftware.Application.UseCases.Services.Commands; |
| | | 3 | | using MechanicsSoftware.Domain.Entities; |
| | | 4 | | using MechanicsSoftware.Domain.Exceptions; |
| | | 5 | | using MechanicsSoftware.Domain.ValueObjects; |
| | | 6 | | using Microsoft.EntityFrameworkCore; |
| | | 7 | | |
| | | 8 | | namespace MechanicsSoftware.Application.UseCases.Services.Handlers; |
| | | 9 | | |
| | 4 | 10 | | public sealed class CreateServiceHandler(IAppDbContext db) |
| | | 11 | | { |
| | | 12 | | public async Task<ServiceResponse> ExecuteAsync( |
| | | 13 | | CreateServiceCommand command, CancellationToken cancellationToken = default) |
| | 4 | 14 | | { |
| | 4 | 15 | | var nameExists = await db.Services |
| | 4 | 16 | | .AnyAsync(s => s.Name == command.Name.Trim(), cancellationToken); |
| | | 17 | | |
| | 4 | 18 | | if (nameExists) |
| | 2 | 19 | | throw new DomainException($"A service named '{command.Name}' already exists."); |
| | | 20 | | |
| | 2 | 21 | | var service = Service.Create( |
| | 2 | 22 | | Guid.NewGuid(), |
| | 2 | 23 | | command.Name, |
| | 2 | 24 | | command.Description, |
| | 2 | 25 | | new Money(command.BasePriceInCents), |
| | 2 | 26 | | command.EstimatedMinutes); |
| | | 27 | | |
| | 2 | 28 | | db.Services.Add(service); |
| | 2 | 29 | | await db.SaveChangesAsync(cancellationToken); |
| | | 30 | | |
| | 2 | 31 | | return ServiceResponse.From(service); |
| | 2 | 32 | | } |
| | | 33 | | } |