예제 #1
0
        public async Task <ActionResult> PutHomeAdminLazy(Guid componentId, [FromBody] LazyComponent exchangeComponent)
        {
            if (componentId != exchangeComponent.ComponentId)
            {
                throw new ArgumentException($"componentId != component.Id");
            }

            var configComponent = await _mongoComponentStrategy.GetAsync(_componentHome);

            var linkVisitor = _visitorFactory.GetBuilder <LinkComponentRelationVisitorBuilder>().Build();

            exchangeComponent.Accept(linkVisitor);

            var flatVisitor = _visitorFactory.GetBuilder <FlatComponentVisitorBuilder>().Build();

            configComponent.Accept(flatVisitor);
            var targetComponent = flatVisitor.FlatElements[componentId];

            var exchangeVisitor = _visitorFactory.GetBuilder <ExchangeComponentVisitorBuilder>().SetExchangeComponent(targetComponent, exchangeComponent).Build();

            configComponent.Accept(exchangeVisitor);

            await _mongoComponentStrategy.SetAsync(_componentHome, configComponent);

            return(Ok());
        }
예제 #2
0
        public async Task <ActionResult <ConfigPageComponent> > FakeLazyComponent()
        {
            var builder  = Builders <ConfigCondition> .Filter;
            var filter   = builder.Empty;
            var defineds = await _configConditsStrategy.GetAsync(_conditionDefined);

            var conditions = defineds.ToDictionary(d => d.Key, d => d.Defined);

            var page = new LazyComponent().Fake(conditions);

            return(Ok(page));
        }
예제 #3
0
        public static Component Fake(this Component component, Dictionary <string, DefinedCondition> conditions, int subNumber)
        {
            if (RandomBoolean)
            {
                component = new MemberComponent().Fake(conditions, subNumber);
            }
            else
            {
                component = new LazyComponent().Fake(conditions);
            }

            return(component);
        }
예제 #4
0
        public static LazyComponent Fake(this LazyComponent component, Dictionary <string, DefinedCondition> conditions)
        {
            var fake = component.Clone();

            fake.ComponentId = SequentialGuid.NewGuid();

            fake.Path = RandomName;

            if (RandomBoolean)
            {
                fake.Condition = new ReferenceCondition {
                    Ref = conditions.RandomPeek().Key
                };
            }
            else
            {
                fake.Condition = new DefinedCondition().Fake();
            }

            return(fake);
        }
예제 #5
0
        public async Task <ActionResult> PutHomeAdminSubComponentsLazy(Guid componentId, [FromBody] LazyComponent component)
        {
            if (componentId == component.ComponentId)
            {
                throw new ArgumentException($"componentId == component.Id");
            }

            var configComponent = await _mongoComponentStrategy.GetAsync(_componentHome);

            var flatVisitor = _visitorFactory.GetBuilder <FlatComponentVisitorBuilder>().Build();

            configComponent.Accept(flatVisitor);
            var targetComponent = flatVisitor.FlatElements[componentId];

            if (!(targetComponent is CompositeComponent))
            {
                throw new InvalidOperationException("只有 Composite 支援增加 SubComponent。");
            }
            if (flatVisitor.FlatElements.ContainsKey(component.ComponentId))
            {
                throw new InvalidOperationException("ConfigComponent 已具備 component.ComponentId 請使用新的 component.ComponentId。");
            }

            var linkVisitor = _visitorFactory.GetBuilder <LinkComponentRelationVisitorBuilder>().Build();

            component.Accept(linkVisitor);

            (targetComponent as CompositeComponent).AddLowerLayer(component);

            await _mongoComponentStrategy.SetAsync(_componentHome, configComponent);

            return(Ok());
        }