namespace DocuMed.Repository.Handlers.Patients; public class CreatePatientCommandHandler(IRepositoryWrapper repositoryWrapper , UserManager userManager) : IRequestHandler { public async Task Handle(CreatePatientCommand request, CancellationToken cancellationToken) { var user = await userManager.Users.FirstOrDefaultAsync(u => u.NationalId == request.NationalId, cancellationToken); if (user == null) { user = new ApplicationUser { UserName = request.NationalId, NationalId = request.NationalId, FirstName = request.FirstName, LastName = request.LastName, SignUpStatus = SignUpStatus.StartSignUp }; var result = await userManager.CreateAsync(user); if (!result.Succeeded) throw new AppException(string.Join('|', result.Errors)); } var section = await repositoryWrapper.SetRepository
() .TableNoTracking .FirstOrDefaultAsync(f => f.Id == request.SectionId, cancellationToken); if (section == null) throw new BaseApiException(ApiResultStatusCode.NotFound, "Section not found"); var patient = Patient.Create( request.UnitNumber, request.Room, request.Bed, request.AdmissionAt, request.SectionId, user.Id, section.HospitalId ); repositoryWrapper.SetRepository() .Add(patient); await repositoryWrapper.SaveChangesAsync(cancellationToken); return patient.Id; } }