public async Task <TerminatePolicyResult> Handle(TerminatePolicyCommand request, CancellationToken cancellationToken)
            {
                Policy policy = await this._policyRepository.WithNumber(request.PolicyNumber);

                PolicyTerminationResult terminationResult = policy.Terminate(request.TerminationDate);

                await this._policyRepository.SaveChangesAsync();

                this._eventPublisher.PublishMessage(this._mapper.Map <PolicyTerminatedEvent>(terminationResult));

                return(this._mapper.Map <TerminatePolicyResult>(terminationResult));
            }
 private PolicyTerminated PolicyTerminated(PolicyTerminationResult terminationResult)
 {
     return(new PolicyTerminated
     {
         PolicyNumber = terminationResult.TerminalVersion.Policy.Number,
         PolicyFrom = terminationResult.TerminalVersion.CoverPeriod.ValidFrom,
         PolicyTo = terminationResult.TerminalVersion.CoverPeriod.ValidTo,
         ProductCode = terminationResult.TerminalVersion.Policy.ProductCode,
         TotalPremium = terminationResult.TerminalVersion.TotalPremiumAmount,
         AmountToReturn = terminationResult.AmountToReturn,
         PolicyHolder = new Api.Commands.Dtos.PersonDto
         {
             FirstName = terminationResult.TerminalVersion.PolicyHolder.FirstName,
             LastName = terminationResult.TerminalVersion.PolicyHolder.LastName,
             TaxId = terminationResult.TerminalVersion.PolicyHolder.Pesel
         }
     });
 }