Ejemplo n.º 1
0
        public async Task Invoke(CRUDContext <TService> ctx)
        {
            RunTimeMetadata  metadata  = ctx.Service.GetMetadata();
            ChangeSetRequest changeSet = ctx.Request;

            IChangeSetGraph graph = ctx.Properties.Get <IChangeSetGraph>(CRUDContext <TService> .CHANGE_GRAPH_KEY) ?? throw new InvalidOperationException("Could not get Graph changes from properties");

            if (!await ValidateRows(ctx, changeSet, metadata, graph.InsertList))
            {
                throw new ValidationException(ErrorStrings.ERR_SVC_CHANGES_ARENOT_VALID);
            }

            if (!await ValidateRows(ctx, changeSet, metadata, graph.UpdateList))
            {
                throw new ValidationException(ErrorStrings.ERR_SVC_CHANGES_ARENOT_VALID);
            }

            await _next(ctx);
        }
Ejemplo n.º 2
0
        public async Task Invoke(CRUDContext <TService> ctx)
        {
            IServiceOperationsHelper <TService> serviceHelper = ctx.ServiceContainer.GetServiceHelper();
            IDataHelper <TService> dataHelper = ctx.ServiceContainer.GetDataHelper();

            Metadata.RunTimeMetadata metadata       = ctx.Service.GetMetadata();
            ChangeSetRequest         changeSet      = ctx.Request;
            IChangeSetGraph          graph          = ctx.Properties.Get <IChangeSetGraph>(CRUDContext <TService> .CHANGE_GRAPH_KEY) ?? throw new InvalidOperationException("Could not get Graph changes from properties");
            CRUDServiceMethods       serviceMethods = ctx.Properties.Get <CRUDServiceMethods>(CRUDContext <TService> .CHANGE_METHODS_KEY) ?? throw new InvalidOperationException("Could not get CRUD Service methods from properties");

            RequestContext req = CRUDContext <TService> .CreateRequestContext(ctx.Service, changeSet);

            using (RequestCallContext callContext = new RequestCallContext(req))
            {
                await serviceMethods.ExecuteChangeSet();

                await serviceHelper.AfterExecuteChangeSet(changeSet);

                await serviceMethods.AfterChangeSetExecuted();

                foreach (RowInfo rowInfo in graph.AllList)
                {
                    if (rowInfo.changeType != ChangeType.Deleted)
                    {
                        serviceHelper.UpdateRowInfoAfterUpdates(rowInfo);
                    }
                }

                SubResultList subResults = new SubResultList();
                await serviceHelper.AfterChangeSetCommited(changeSet, subResults);

                await serviceMethods.AfterChangeSetCommited(subResults);

                SubsetsGenerator subsetsGenerator = new SubsetsGenerator(metadata, dataHelper);
                ctx.Response.subsets = subsetsGenerator.CreateSubsets(subResults);
            }


            await _next(ctx);
        }
Ejemplo n.º 3
0
        public static void ConfigureCRUD <TService>(PipelineBuilder <TService, CRUDContext <TService> > builder)
            where TService : BaseDomainService
        {
            CRUDMiddlewareOptions <TService> middlewareOptions = new CRUDMiddlewareOptions <TService>();

            builder.UseMiddleware <CRUDMiddleware.AuthorizeMiddleware <TService>, TService, CRUDContext <TService> >(middlewareOptions);
            builder.UseMiddleware <ApplyChangesMiddleware <TService>, TService, CRUDContext <TService> >(middlewareOptions);
            builder.UseMiddleware <ValidateChangesMiddleware <TService>, TService, CRUDContext <TService> >(middlewareOptions);
            builder.UseMiddleware <CommitChangesMiddleware <TService>, TService, CRUDContext <TService> >(middlewareOptions);

            builder.Run(ctx =>
            {
                IChangeSetGraph graph             = ctx.Properties.Get <IChangeSetGraph>(CRUDContext <TService> .CHANGE_GRAPH_KEY) ?? throw new InvalidOperationException("Could not get Graph changes from properties");
                CRUDServiceMethods serviceMethods = ctx.Properties.Get <CRUDServiceMethods>(CRUDContext <TService> .CHANGE_METHODS_KEY) ?? throw new InvalidOperationException("Could not get CRUD Service methods from properties");


                foreach (RowInfo rowInfo in graph.AllList)
                {
                    serviceMethods.TrackChanges(rowInfo);
                }

                return(Task.CompletedTask);
            });
        }
Ejemplo n.º 4
0
        private async Task Insert(CRUDContext <TService> ctx, RunTimeMetadata metadata, ChangeSetRequest changeSet, IChangeSetGraph graph, RowInfo rowInfo)
        {
            TService service = ctx.Service;
            IServiceOperationsHelper <TService> serviceHelper = ctx.ServiceContainer.GetServiceHelper();

            CheckRowInfo(rowInfo);

            using (RequestCallContext callContext = new RequestCallContext(CRUDContext <TService> .CreateRequestContext(service, changeSet, rowInfo)))
            {
                rowInfo.SetChangeState(new EntityChangeState {
                    ParentRows = graph.GetParents(rowInfo)
                });
                await serviceHelper.InsertEntity(metadata, rowInfo);
            }
        }