// Generic query message handlers public async Task <QueryCountResult> Handle(GetCountQuery <T> request, CancellationToken cancellationToken) { // Drop an AuditLogEvent onto the mediator, to dispatch a request to update the system audit log. Again, we're not going to wait for the outcome of this event. Just fire and forget. string dataAccessTypeString = string.Format("Get{0}Count", typeof(T).Name); var dataAccessType = (DataAccessType)Enum.Parse(typeof(DataAccessType), dataAccessTypeString); AuditLogEvent auditLogNotification = new AuditLogEvent(_currentUser.UserName, Guid.Empty, dataAccessType); await _mediator.Publish(auditLogNotification); // Call the GetCount method to retrieve the client count. var result = await GetCount(); if (result.ResultType == ResultType.OkForQuery) { // Return the result list identifier return(new QueryCountResult(result.Count)); } else { if (result.ResultType == ResultType.AccessDenied) { // Drop an AuditLogEvent onto the mediator to indicate that this action was denied AuditLogEvent accessDeniedAuditEntry = new AuditLogEvent(_currentUser.UserName, Guid.Empty, dataAccessType, true); await _mediator.Publish(accessDeniedAuditEntry); } // Query returned a non-success result, so return the result, and the errors return(new QueryCountResult(result.ResultType)); } }
public virtual async Task <int> Handle(GetCountQuery <TDto> request, CancellationToken cancellationToken) { var query = ctx.Set <TDal>().AsNoTracking(); query = query.ApplyFilterData(request.Filters, CreateWherePredicate); int count = await query.CountAsync(cancellationToken); return(count); }
/// <summary> /// пример - получение кол-ва блогов учитывая фильтр /// </summary> public int GetBlogCount(BlogFilter filter) { var query = new GetCountQuery <Blog>(_db) { Spec = filter }; return(query.GetResult()); }
public async Task <bool> Validate(int value, CancellationToken cancellationToken) { var query = new GetCountQuery <TDto>() { Filters = new List <Filter> { new Filter(nameof(IHasIntegerId.Id), "=", value.ToString()) } }; int count = await mediator.Send(query, cancellationToken); return(count > 0); }
public async Task Validate(string value, CustomContext context, CancellationToken cancellationToken) { string columnName = GetColumnName(context); var query = new GetCountQuery <TDto>() { Filters = new List <Filter>() }; query.Filters.Add(new Filter(columnName, "=", value.Trim())); int count = await mediator.Send(query, cancellationToken); if (count > 0) { context.AddFailure($"{columnName} must be unique. Value {value} has been already used!"); } }
public async Task Validate(TDto value, CustomContext context, CancellationToken cancellationToken) { var query = new GetCountQuery <TDto>() { Filters = new List <Filter>() }; List <string> columnNames = new List <string>(); foreach (var selector in selectors) { string columnName = GetColumnName(selector); columnNames.Add(columnName); query.Filters.Add(new Filter(columnName, "=", selector.Compile().Invoke(value))); } int count = await mediator.Send(query, cancellationToken); if (count > 0) { context.AddFailure($"n-tuple ({string.Join(", ", columnNames)}) must be unique."); } }
public virtual async Task <Items <T> > GetAll([FromQuery] LoadParams loadParams, [FromServices] IMediator mediator, [FromServices] IMapper mapper) { var filters = FilterStringParser.Parse(loadParams.Filter); var result = new Items <T>(); var countRequest = new GetCountQuery <T> { Filters = filters }; result.Count = await mediator.Send(countRequest); if (result.Count > 0) { var dataRequest = new GetItemsQuery <T> { Paging = mapper.Map <LoadParams, PagingData>(loadParams), Sort = CreateSort(loadParams), Filters = filters }; result.Data = await mediator.Send(dataRequest); } return(result); }