예제 #1
0
        public async Task <bool> Handle(UpdateOrganisationUkprnRequest request, CancellationToken cancellationToken)
        {
            if (!_validator.IsValidUKPRN(request.Ukprn))
            {
                var invalidUkprnError = $@"Invalid Organisation Ukprn '{request.Ukprn}'";
                _logger.LogInformation(invalidUkprnError);
                throw new BadRequestException(invalidUkprnError);
            }

            var duplicateUkprnDetails = _validator.DuplicateUkprnInAnotherOrganisation(request.Ukprn, request.OrganisationId);

            if (duplicateUkprnDetails.DuplicateFound)
            {
                var invalidUkprnError = $@"Ukprn '{request.Ukprn}' already used against organisation '{duplicateUkprnDetails.DuplicateOrganisationName}'";
                _logger.LogInformation(invalidUkprnError);
                throw new BadRequestException(invalidUkprnError);
            }

            _logger.LogInformation($@"Handling Update '{FieldChanged}' for Organisation ID [{request.OrganisationId}]");

            var auditRecord = _auditLogService.AuditUkprn(request.OrganisationId, request.UpdatedBy, request.Ukprn);


            if (!auditRecord.ChangesMade)
            {
                return(await Task.FromResult(false));
            }

            var success = await _updateOrganisationRepository.UpdateUkprn(request.OrganisationId, request.Ukprn, request.UpdatedBy);

            if (!success)
            {
                return(await Task.FromResult(false));
            }

            return(await _updateOrganisationRepository.WriteFieldChangesToAuditLog(auditRecord));
        }