Esempio n. 1
0
        public void SendAll(Event[] events)
        {
            var validEvents = events.Where(x => _validator.Validate(x).IsValid).ToArray();

            _eventHub.Send(validEvents);
        }
        public async Task <IHttpActionResult> Send(string refNumber, [FromBody] SendReferenceRequest request)
        {
            if (string.IsNullOrEmpty(refNumber))
            {
                return(NotFound());
            }

            if (request == null)
            {
                return(Error(HttpStatusCode.BadRequest, new[]
                {
                    new Error
                    {
                        Code = "1000",
                        InternalMessage = Resources.Strings.ErrorRequestRequired
                    }
                }));
            }

            var errors = Validate(request, SendReferenceRequestValidator);

            if (errors != null)
            {
                return(errors);
            }

            var cancellationToken = new CancellationToken();

            var reference = await _repository.Get(refNumber, cancellationToken);

            if (reference == null)
            {
                return(Error(HttpStatusCode.NotFound, new[]
                {
                    new Error
                    {
                        Code = "150",
                        InternalMessage = Resources.Strings.ReferenceServiceError150,
                    }
                }));
            }

            if (reference.Status != Constants.ReferenceStatusPdfOk)
            {
                return(Error((HttpStatusCode)422, new[]
                {
                    new Error
                    {
                        Code = "151",
                        InternalMessage = Resources.Strings.ReferenceServiceError151,
                    }
                }, "Unprocessable Entity"));
            }

            reference.Status         = Constants.ReferenceStatusSended;
            reference.DeliveryMethod = request.Delivery.Method;
            reference.DeliveryEmail  = request.Delivery.Email;

            if (request.Delivery.Method == Constants.DeliveryMethodEmail)
            {
                try
                {
                    await _eventHub.Send(reference, Request.GetCorrelationId().ToString("N"), cancellationToken);
                }
                catch (ReferenceServiceException ex)
                {
                    return(Error(HttpStatusCode.InternalServerError, ex.ToErrors()));
                }
            }

            reference.Status = Constants.ReferenceStatusDelivered;
            await _repository.Update(reference, cancellationToken);

            return(Ok());
        }