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()); }
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)); }
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); }
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); }
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()); }