public virtual SpecificationDbQuery <TEntity> SpecificationQuery(
            IncludeSpecification <TEntity> includeSpecification,
            FilterSpecification <TEntity> filterSpecification,
            OrderBySpecification <TEntity> orderBySpecification,
            int?skip          = null,
            int?take          = null,
            bool getFullGraph = false)
        {
            var specification = new SpecificationDbQuery <TEntity>(context).Include(includeSpecification).Where(filterSpecification).OrderBy(orderBySpecification);

            if (skip.HasValue)
            {
                specification = specification.Skip(skip.Value);
            }

            if (take.HasValue)
            {
                specification = specification.Take(take.Value);
            }

            if (getFullGraph)
            {
                specification = specification.FullGraph();
            }

            return(specification);
        }
Esempio n. 2
0
        public virtual PagedList <TDto> Search(
            IncludeSpecification <TDto> includeSpecification,
            FilterSpecification <TDto> filterSpecification,
            OrderBySpecification <TDto> orderBySpecification,
            int?pageNo        = null,
            int?pageSize      = null,
            bool getFullGraph = false)
        {
            var filterConverted = filterSpecification.Map <TEntity>(Mapper);

            if (!OrderByMapper.ValidOrderByFor <TDto, TEntity>(orderBySpecification.OrderByString))
            {
                throw new BadRequestException(Messages.OrderByInvalid);
            }

            //Ideally OrderByMapper could also convert Expressions but it only handles strings.
            var orderByConverted = string.IsNullOrEmpty(orderBySpecification.OrderByString) ? orderBySpecification.Map <TEntity>(Mapper) : orderBySpecification.Map <TEntity>(OrderByMapper);

            var includesConverted = includeSpecification.Map <TEntity>(Mapper);

            int?skip = null;

            if (pageNo.HasValue && pageSize.HasValue)
            {
                skip = (pageNo.Value - 1) * pageSize.Value;
            }

            var entityList = Repository.SpecificationQuery(includesConverted, filterConverted, orderByConverted, skip, pageSize, GetFullGraph || getFullGraph).ToCountList();

            var entities = entityList.ToList();

            var dtoList = new PagedList <TDto>(entities.Select(Mapper.Map <TEntity, TDto>).ToList(), entityList.TotalCount, pageNo ?? 1, pageSize ?? entityList.TotalCount);

            return(dtoList);
        }
        public V GetSearchInformation <T, U, V>() where T : IDatatableBaseConfiguration where U : IBaseEntity where V : ISpecification <U>
        {
            Type searchType = typeof(T).BaseType.GetGenericArguments()[0];

            var searchResult = createObjectWithDefaultConstructor(searchType);

            var orderBySpecification = new OrderBySpecification <string>(SortInformation.Item1, !SortInformation.Item2);

            if (searchResult != null && IsTypeImplementInterface(searchType, typeof(ISpecification <U>)))
            {
                if (AdditionalParameters != null && AdditionalParameters.Count > 0)
                {
                    searchResult = AdditionalParameters.ToObject(searchResult);
                }

                ((ISpecification <U>)searchResult).Skip = Start;
                ((ISpecification <U>)searchResult).Take = Length;

                ((ISpecification <U>)searchResult).OrderByStrings = new List <OrderBySpecification <string> >()
                {
                    orderBySpecification
                };
            }

            var instance = createObjectWithDefaultConstructor(typeof(T)) as IDatatableBaseConfiguration;

            var filterColum = instance.Columns.FirstOrDefault(x => string.Compare(orderBySpecification.OrderBy, x.Name, true) == 0 && !string.IsNullOrEmpty(x.SortDataSource));

            if (filterColum != null)
            {
                orderBySpecification.OrderBy = filterColum.SortDataSource;
            }

            return((V)searchResult);
        }
Esempio n. 4
0
        static async Task Main(string[] args)
        {
            var services = new ServiceCollection()
                           .AddElsa(configure => configure
                                    .AddConsoleActivities()
                                    .AddFileActivities())
                           .AddAutoMapperProfiles <Program>()
                           .BuildServiceProvider();

            // Run startup actions (not needed when registering Elsa with a Host).
            var startupRunner = services.GetRequiredService <IStartupRunner>();
            await startupRunner.StartupAsync();

            // Get a workflow runner.
            var workflowRunner = services.GetRequiredService <IBuildsAndStartsWorkflow>();

            // Run the workflow.
            await workflowRunner.BuildAndStartWorkflowAsync <ReadLineToFileWorkflow>();

            var store = services.GetRequiredService <IWorkflowInstanceStore>();

            var results = await store.FindManyAsync(
                new WorkflowDefinitionIdSpecification(nameof(ReadLineToFileWorkflow)),
                OrderBySpecification.OrderByDescending <WorkflowInstance>(x => x.CreatedAt),
                Paging.Page(1, 2));

            var count = await store.CountAsync(new WorkflowDefinitionIdSpecification(nameof(ReadLineToFileWorkflow)));

            Console.WriteLine(count);

            foreach (var result in results)
            {
                Console.WriteLine(result.CreatedAt);
            }
        }
        public async Task <IActionResult> Get(CancellationToken cancellationToken)
        {
            var instances = await this.instanceStore.FindManyAsync(
                new WorkflowInstanceAllSpecification(),
                OrderBySpecification.OrderByDescending <WorkflowInstance>(x => x.CreatedAt));


            return(new JsonResult(instances));
        }
Esempio n. 6
0
        public async Task <ActionResult <PagedList <WorkflowExecutionLogRecord> > > Handle(string id, int?page = default, int?pageSize = default, CancellationToken cancellationToken = default)
        {
            var specification = new WorkflowInstanceIdSpecification(id);
            var totalCount    = await _workflowExecutionLogStore.CountAsync(specification, cancellationToken);

            var paging = page != null?Paging.Page(page.Value, pageSize ?? 100) : default;

            var orderBy = OrderBySpecification.OrderBy <WorkflowExecutionLogRecord>(x => x.Timestamp);
            var records = await _workflowExecutionLogStore.FindManyAsync(specification, orderBy, paging, cancellationToken).ToList();

            return(new PagedList <WorkflowExecutionLogRecord>(records, page, pageSize, totalCount));
        }
        public async Task <IActionResult> Get(string correlationId, CancellationToken cancellationToken)
        {
            if (string.IsNullOrEmpty(correlationId))
            {
                this.Response.StatusCode = StatusCodes.Status400BadRequest;
                return(new EmptyResult());
            }

            var instances = await this.instanceStore.FindManyAsync(
                new WorkflowInstanceCorrelationIdSpecification(correlationId),
                OrderBySpecification.OrderByDescending <WorkflowInstance>(x => x.CreatedAt));


            return(new JsonResult(instances));
        }
        public virtual async Task <PagedList <TDto> > SearchAsync(
            IncludeSpecification <TDto> includeSpecification,
            FilterSpecification <TDto> filterSpecification,
            OrderBySpecification <TDto> orderBySpecification,
            int?pageNo        = null,
            int?pageSize      = null,
            bool getFullGraph = false,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            await AuthorizeResourceOperationAsync(ResourceCollectionsCore.CRUD.Operations.Read, ResourceCollectionsCore.CRUD.Operations.ReadOwner);

            var filterConverted = filterSpecification.Map <TEntity>(Mapper);

            if (!OrderByMapper.ValidOrderByFor <TDto, TEntity>(orderBySpecification.OrderByString))
            {
                throw new BadRequestError(Messages.OrderByInvalid);
            }

            //Ideally OrderByMapper could also convert Expressions but it only handles strings.
            var orderByConverted = string.IsNullOrEmpty(orderBySpecification.OrderByString) ? orderBySpecification.Map <TEntity>(Mapper) : orderBySpecification.Map <TEntity>(OrderByMapper);

            var includesConverted = includeSpecification.Map <TEntity>(Mapper);

            int?skip = null;

            if (pageNo.HasValue && pageSize.HasValue)
            {
                skip = (pageNo.Value - 1) * pageSize.Value;
            }

            var entityList = await Repository.SpecificationQuery(includesConverted, filterConverted, orderByConverted, skip, pageSize, GetFullGraph || getFullGraph).ToCountListAsync(cancellationToken).ConfigureAwait(false);

            var entities = entityList.ToList();

            foreach (var entity in entities)
            {
                await AuthorizeResourceOperationAsync(entity, ResourceCollectionsCore.CRUD.Operations.Read, ResourceCollectionsCore.CRUD.Operations.ReadOwner);
            }

            var dtoList = new PagedList <TDto>(entities.Select(Mapper.Map <TEntity, TDto>).ToList(), entityList.TotalCount, pageNo ?? 1, pageSize ?? entityList.TotalCount);

            return(dtoList);
        }
Esempio n. 9
0
        public async Task <ActionResult <ActivityStats> > Handle(string workflowInstanceId, string activityId, CancellationToken cancellationToken = default)
        {
            var specification = new WorkflowInstanceIdSpecification(workflowInstanceId).And(new ActivityIdSpecification(activityId));
            var orderBy       = OrderBySpecification.OrderBy <WorkflowExecutionLogRecord>(x => x.Timestamp);
            var records       = await _workflowExecutionLogStore.FindManyAsync(specification, orderBy, null, cancellationToken).ToList();

            var eventCounts    = records.GroupBy(x => x.EventName).ToList();
            var executions     = GetExecutions(records).ToList();
            var executionTimes = executions.Select(x => x.Duration).OrderBy(x => x).ToList();
            var faultRecord    = records.FirstOrDefault(x => x.EventName == "Faulted");
            var activityFault  = faultRecord != null ? new ActivityFault(faultRecord.Message !) : null;

            var model = new ActivityStats
            {
                EventCounts          = eventCounts.Select(x => new ActivityEventCount(x.Key !, x.Count())).ToList(),
                LastExecutedAt       = executions.Select(x => x.Timestamp).OrderByDescending(x => x).FirstOrDefault(),
                SlowestExecutionTime = executionTimes.LastOrDefault(),
                FastestExecutionTime = executionTimes.FirstOrDefault(),
                AverageExecutionTime = executionTimes.Any() ? Duration.FromTicks(executionTimes.Average(x => x.TotalTicks)) : default,
Esempio n. 10
0
        public IEnumerable <T> FindNoTracking <TKey>(
            Specification <T> specification = null,
            OrderBySpecification <T, TKey> orderBySpecification = null,
            int pageNumber = 1,
            int pageSize   = int.MaxValue)
        {
            var query = _dbSet as IQueryable <T>;

            if (specification != null)
            {
                query = query.Where(specification.ToExpression());
            }

            if (orderBySpecification != null)
            {
                query = query.OrderBy(orderBySpecification.ToExpression());
            }

            query = query.Skip((pageNumber - 1) * pageSize).Take(pageSize);

            return(query.AsNoTracking()
                   .AsEnumerable());
        }
 public QueryWithProjectionBuilder <T, TResult> AddOrderByDescending(OrderBySpecification <T> specification)
 {
     this.query.AddOrderByDescending(specification);
     return(this);
 }
Esempio n. 12
0
 public virtual void AddOrderByDescending(OrderBySpecification <T> specification)
 {
     this.OrderByDescending = specification.ToOrderByExpression();
 }
 public IQueryBuilder <T> AddOrderByDescending(OrderBySpecification <T> specification)
 {
     this.query.AddOrderByDescending(specification);
     return(this);
 }