コード例 #1
0
        public static AppEvent BuildToasterEvent(IToasterEvent model)
        {
            var identifier      = model.Identifier == null ? string.Empty : $" \"{model.Identifier}\" ";
            var eventVerb       = model.Verb.ToString().ToLower();
            var eventTypeString = model.EntityType.FormatType();
            var title           = model.Verb.ToString();
            var message         = $"{eventTypeString}{identifier} has been {eventVerb} successfully";

            if (model.Count > 1)
            {
                message = $"{model.Count} {eventTypeString}s were {eventVerb} successfully";
            }

            if (model.ToasterType == ToasterType.Error)
            {
                title   = "Application Error";
                message = $"Failed to {eventVerb.Substring(0, eventVerb.Length - 1)} {eventTypeString}";
                message = model.Count > 1 ? message + "s" : message + $" {identifier}";
            }

            return(new AppEvent
            {
                Title = title,
                Message = message,
                Type = model.ToasterType.ToString(),
                CreatedAt = DateTime.UtcNow
            });
        }
コード例 #2
0
        public async Task <int> SaveAsync(IToasterEvent toasterEvent, int expectedResult = 1)
        {
            var result = await _context.SaveChangesAsync();

            if (result == expectedResult)
            {
                var success = EventBuilder.BuildToasterEvent(toasterEvent);
                await _eventSender.SendAsync(success.ToJson());
            }
            else
            {
                var failure = toasterEvent.TransformInFailure();
                await _eventSender.SendAsync(failure);
            }

            return(result);
        }
コード例 #3
0
        public async Task <ValidatorResult <TResponse> > ValidateAsync <TRequest, TResponse, TFluentValidator>(TRequest request,
                                                                                                               IToasterEvent toasterEvent, CancellationToken cancellationToken = default)
            where TRequest : new()
            where TResponse : BaseResponse, new()
            where TFluentValidator : AbstractValidator <TRequest>, new()
        {
            var response        = new TResponse();
            var fluentValidator = new TFluentValidator();
            var result          = new ValidatorResult <TResponse>();

            var validation = await fluentValidator.ValidateAsync(request, cancellationToken);

            if (!validation.IsValid)
            {
                response.Succeeded = false;

                foreach (var failure in validation.Errors)
                {
                    response.Errors.Add(failure.ErrorMessage);
                }

                await _eventSender.SendAsync(toasterEvent.TransformInFailure());

                result.Failed   = true;
                result.Response = new BadRequestObjectResult(response);
                return(result);
            }

            response.Succeeded = true;
            result.Response    = new OkObjectResult(response);
            return(result);
        }