private EntityId UpdateHeroEntity(JsonElement obj, ISet <EntityId> entityIds) { EntityId entityId = _extractId(obj); entityIds.Add(entityId); if (entityId.Name.Equals("Human", StringComparison.Ordinal)) { HumanEntity entity = _entityStore.GetOrCreate <HumanEntity>(entityId); entity.Name = DeserializeNonNullString(obj, "name"); var friends = new List <EntityId>(); foreach (JsonElement child in obj.GetProperty("friends").EnumerateArray()) { friends.Add(UpdateFriendEntity(child, entityIds)); } entity.Friends = friends; return(entityId); } if (entityId.Name.Equals("Droid", StringComparison.Ordinal)) { DroidEntity entity = _entityStore.GetOrCreate <DroidEntity>(entityId); entity.Name = DeserializeNonNullString(obj, "name"); var friends = new List <EntityId>(); foreach (JsonElement child in obj.GetProperty("friends").EnumerateArray()) { friends.Add(UpdateFriendEntity(child, entityIds)); } entity.Friends = friends; return(entityId); } throw new NotSupportedException(); }
private EntityId UpdateFriendEntity(JsonElement obj, ISet <EntityId> entityIds) { EntityId entityId = _extractId(obj); entityIds.Add(entityId); if (entityId.Name.Equals("Human", StringComparison.Ordinal)) { HumanEntity entity = _entityStore.GetOrCreate <HumanEntity>(entityId); entity.Name = DeserializeNonNullString(obj, "name"); return(entityId); } if (entityId.Name.Equals("Droid", StringComparison.Ordinal)) { DroidEntity entity = _entityStore.GetOrCreate <DroidEntity>(entityId); entity.Name = DeserializeNonNullString(obj, "name"); return(entityId); } throw new NotSupportedException(); }
public async Task Foo() { var entityStore = new EntityStore(); var operationStore = new OperationStore(entityStore.Watch()); var connection = new MockConnection(); var humanMapper = new HumanMapper(); var droidMapper = new DroidMapper(); var humanHeroMapper = new HumanHeroMapper( entityStore, humanMapper, droidMapper); var droidHeroMapper = new DroidHeroMapper( entityStore, humanMapper, droidMapper); var resultDataFactory = new GetHeroResultFactory( entityStore, humanHeroMapper, droidHeroMapper); var resultBuilder = new GetHeroResultBuilder( entityStore, ExtractEntityId, resultDataFactory, new SerializerResolver(new[] { new StringSerializer() })); var operationExecutor = new OperationExecutor <JsonDocument, GetHeroResult>( connection, () => resultBuilder, operationStore, ExecutionStrategy.NetworkOnly); GetHeroResult?result = null; var query = new GetHeroQuery(operationExecutor); query.Watch().Subscribe(c => { result = c.Data; }); await Task.Delay(1000); using (entityStore.BeginUpdate()) { DroidEntity entity = entityStore.GetOrCreate <DroidEntity>(new EntityId("Droid", "abc")); entity.Name = "C3-PO"; } await Task.Delay(1000); Assert.NotNull(result); EntityId ExtractEntityId(JsonElement obj) => new( obj.GetProperty("__typename").GetString() !, obj.GetProperty("id").GetString() !); }