Exemple #1
0
        public async Task <IForum[]> ListForums([FromService] IDatabaseContext databaseContext)
        {
            var            context       = databaseContext.GetWrappedContext <IForum>();
            var            queryable     = context.Query().Include(t => t.Board);
            IValueProvider valueProvider = Context.DomainContext.GetRequiredService <IValueProvider>();
            string         id            = valueProvider.GetValue <string>("id");

            if (id != null)
            {
                var converter = TypeDescriptor.GetConverter(EntityDescriptor.GetMetadata <IBoard>().KeyType);
                var idObj     = converter.ConvertFrom(id);
                queryable = queryable.Where(t => t.Board.Index == idObj);
            }
            var e = new EntityQueryEventArgs <IForum>(queryable);

            await RaiseAsyncEvent(ForumQueryEvent, e);

            queryable = e.Queryable;
            var items = await queryable.ToArrayAsync();

            var obj = _ForumCastMethod.Invoke(null, new object[] { items });

            obj = _ForumToArrayMethod.Invoke(null, new object[] { obj });
            return((IForum[])obj);
        }
        private Task Domain_EntityQuery(IDomainExecutionContext context, EntityQueryEventArgs <T> e)
        {
            var valueProvider = context.DomainContext.GetRequiredService <IValueProvider>();
            var threadId      = valueProvider.GetValue <Guid?>("id");

            if (!threadId.HasValue)
            {
                return(Task.CompletedTask);
            }
            Guid key = threadId.Value;

            e.Queryable = e.Queryable.Wrap <IPost, T>().Where(t => t.Thread.Index == threadId.Value.Wrap()).Unwrap <IPost, T>();
            return(Task.CompletedTask);
        }
        private Task Domain_PostQuery(IDomainExecutionContext context, EntityQueryEventArgs <IPost> e)
        {
            var valueProvider        = context.DomainContext.GetRequiredService <IValueProvider>();
            var page                 = valueProvider.GetValue <int?>("page");
            EntityPagerOption option = context.DomainContext.Options.GetOption <EntityPagerOption>();

            if (option == null)
            {
                option = new EntityPagerOption();
                context.DomainContext.Options.SetOption(option);
                option.CurrentSize = 10;
            }
            option.CurrentPage = page ?? 1;
            return(Task.CompletedTask);
        }
Exemple #4
0
        public async Task <IViewModel <IThread> > ListThreads([FromService] IDatabaseContext databaseContext, [FromValue] string id)
        {
            var converter = TypeDescriptor.GetConverter(EntityDescriptor.GetMetadata <IThread>().KeyType);
            var idObj     = converter.ConvertFrom(id);
            var context   = databaseContext.GetWrappedContext <IThread>();
            var queryable = context.Query().Include(t => t.Member).Where(t => t.Forum.Index == idObj && !t.IsDeleted);
            var e         = new EntityQueryEventArgs <IThread>(queryable);

            await RaiseAsyncEvent(ThreadQueryEvent, e);

            queryable = e.Queryable;
            if (e.IsOrdered)
            {
                queryable = ((IOrderedQueryable <IThread>)queryable).ThenByDescending(t => t.CreateDate);
            }
            else
            {
                queryable = queryable.OrderByDescending(t => t.CreateDate);
            }
            IViewModel        model       = (IViewModel)Activator.CreateInstance(_ThreadViewModelType, _ThreadUnwrapMethod.Invoke(null, new object[] { queryable }));
            EntityPagerOption pagerOption = Context.DomainContext.Options.GetOption <EntityPagerOption>();

            if (pagerOption != null)
            {
                model.SetSize(pagerOption.CurrentSize);
            }
            await model.UpdateTotalPageAsync();

            if (pagerOption != null)
            {
                model.SetPage(pagerOption.CurrentPage);
            }
            await model.UpdateItemsAsync();

            return((IViewModel <IThread>)model);
        }