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 }); }
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); }
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); }