/// <inheritdoc/>
        public async Task <bool> Handle(DeleteCommand <TEntity> request, CancellationToken cancellationToken)
        {
            try
            {
                var dbSet             = this.context.Set <TEntity>();
                var requestExpression = request.ParentExpression ?? (x => true);
                var currentEntity     = dbSet
                                        .Where(ExpressionFunctions.AndAlso(requestExpression, x => x.Id == request.EntityId).Compile())
                                        .FirstOrDefault();

                if (currentEntity != null)
                {
                    dbSet.Remove(currentEntity);
                    await this.context.SaveChangesAsync(cancellationToken);

                    return(true);
                }

                return(false);
            }
            catch (Exception ex)
            {
                await this.logger.LogErrorAsync(ex, nameof(DeleteCommandHandler <TEntity>));

                return(false);
            }
        }
Beispiel #2
0
        protected virtual Expression <Func <TEntity, bool> > GetEntitySearchQueryExpressionByFilterQueryRequest <TEntity>(FilterQueryRequest filterQuery)
        {
            if (filterQuery.EmptyQuery)
            {
                return(null);
            }

            Type entityType      = typeof(TEntity);
            var  expressionsList = new List <Expression <Func <TEntity, bool> > >();

            if (filterQuery.FilterQueryStringItems != null && filterQuery.FilterQueryStringItems.Count > 0)
            {
                var expressionFactories = new ExpressionFactories();
                foreach (var queryStringItem in filterQuery.FilterQueryStringItems)
                {
                    Expression <Func <TEntity, bool> > currentExpression = expressionFactories[queryStringItem.EqualityType].BuildExpressionByQueryStringItem <TEntity>(queryStringItem);
                    if (currentExpression != null)
                    {
                        expressionsList.Add(currentExpression);
                    }
                }
            }

            var resultExpression = expressionsList.FirstOrDefault();

            for (int i = 1; i < expressionsList.Count; i++)
            {
                resultExpression = ExpressionFunctions.AndAlso <TEntity>(resultExpression, expressionsList[i]);
            }

            return(resultExpression);
        }
Beispiel #3
0
        private Expression <Func <TEntity, bool> > BuildRequestExpression(GetAllQuery <TEntity, TRequestModel> request)
        {
            var expressionList = new List <Expression <Func <TEntity, bool> > >();

            var queryExpressionBySearchQuery = !string.IsNullOrEmpty(request.SearchQuery) ? ExpressionBuilders.BuildQueryExpressionBySearchQuery <TEntity>(request.SearchQuery) : null;

            if (queryExpressionBySearchQuery != null)
            {
                expressionList.Add(queryExpressionBySearchQuery);
            }

            if (request.ParentExpression != null)
            {
                expressionList.Add(request.ParentExpression);
            }

            Expression <Func <TEntity, bool> > requestExpression = x => true;

            if (expressionList.Count > 0)
            {
                foreach (var expression in expressionList)
                {
                    requestExpression = ExpressionFunctions.AndAlso(requestExpression, expression);
                }
            }

            return(requestExpression);
        }
Beispiel #4
0
        protected virtual Expression <Func <TEntity, bool> > GetEntitySearchQueryExpression <TEntity>(string searchQuery, bool showDeleted = false)
            where TEntity : class, IEntityBase
        {
            var searchQueryArray = searchQuery.ToLower().Split(' ', ',', ';');

            Type entityType       = typeof(TEntity);
            var  entityProperties = entityType.GetProperties();
            var  expressionsList  = new List <Expression <Func <TEntity, bool> > >();

            foreach (var property in entityProperties)
            {
                if (property.GetCustomAttributes(typeof(SearchCriteriaAttribute), false).Length > 0)
                {
                    Expression <Func <TEntity, bool> > currentExpression = x =>
                                                                           x.GetType().GetProperty(property.Name).GetValue(x) != null &&
                                                                           (x.GetType().GetProperty(property.Name).GetValue(x).ToString().ToLower().Contains(searchQuery.ToLower()) ||
                                                                            searchQueryArray.Contains(x.GetType().GetProperty(property.Name).GetValue(x).ToString().ToLower()));

                    expressionsList.Add(currentExpression);
                }
            }

            var propertyExpression = expressionsList.FirstOrDefault();

            for (int i = 1; i < expressionsList.Count; i++)
            {
                propertyExpression = ExpressionFunctions.OrElse <TEntity>(propertyExpression, expressionsList[i]);
            }

            var resultExpression = ExpressionFunctions.AndAlso <TEntity>(x => x.Deleted == showDeleted, propertyExpression);

            return(resultExpression);
        }
Beispiel #5
0
        /// <inheritdoc/>
        public async Task <Guid?> Handle(EditCommand <TEntity, TRequestModel> request, CancellationToken cancellationToken)
        {
            try
            {
                var dbSet             = this.context.Set <TEntity>();
                var requestExpression = request.ParentExpression ?? (x => true);
                var currentEntity     = dbSet
                                        .Where(ExpressionFunctions.AndAlso(requestExpression, x => x.Id == request.EntityId).Compile())
                                        .FirstOrDefault();

                if (currentEntity != null)
                {
                    this.mapper.Map(request.Model, currentEntity);

                    currentEntity.Id = request.EntityId;
                    dbSet.Update(currentEntity);
                    await this.context.SaveChangesAsync(cancellationToken);

                    return(request.EntityId);
                }

                return(null);
            }
            catch (Exception ex)
            {
                await this.logger.LogErrorAsync(ex, nameof(EditCommandHandler <TEntity, TRequestModel>));

                return(null);
            }
        }
        /// <inheritdoc/>
        public async Task <TRequestModel> Handle(DetailsQuery <TEntity, TRequestModel> request, CancellationToken cancellationToken)
        {
            try
            {
                var requestExpression = request.ParentExpression ?? (x => true);
                var entity            = this.context
                                        .Set <TEntity>()
                                        .Where(ExpressionFunctions.AndAlso(requestExpression, x => x.Id == request.EntityId).Compile())
                                        .FirstOrDefault();

                var requestModel = this.mapper.Map <TRequestModel>(entity);

                return(requestModel);
            }
            catch (Exception ex)
            {
                await this.logger.LogErrorAsync(ex, nameof(DetailsQueryHandler <TEntity, TRequestModel>));

                return(null);
            }
        }