public ICommittedSnapshot Deserialize(SnapshotDocument doc) { var snapshotType = Type.GetType(doc.Metadata[MetadataKeys.SnapshotClrType].AsString); var data = (ISnapshot)BsonSerializer.Deserialize(doc.Data, snapshotType); var metadata = BsonSerializer.Deserialize <Dictionary <string, object> >(doc.Metadata.ToJson()); return(new MongoCommittedSnapshot(doc.AggregateId, doc.Version, data, new MetadataCollection(metadata))); }
private Snapshot Deserialize(SnapshotDocument document) { object metadata = null; if (!string.IsNullOrEmpty(document.MetadataType)) { metadata = document.Metadata.ToObject(this.TypeCache.Resolve(document.MetadataType), this.JsonSerializer); } return(new Snapshot(document.Body.ToObject(this.TypeCache.Resolve(document.BodyType), this.JsonSerializer), metadata, document.Version)); }
private static SnapshotDocument BuildSnapShotDoc(string streamId, SnapshotModel snapshot, long version ) { var document = new SnapshotDocument { StreamId = streamId, Version = version, TimeStamp = DateTimeOffset.Now.ToUnixTimeSeconds(), DataType = snapshot.Data.GetType().AssemblyQualifiedName, Data = snapshot.Data }; return(document); }
public async Task <IExecutionResult> TakeSnapshotAsync(string stream) { Optional <TAggregateRoot> root = await _rootRepository.GetAsync(stream); root.ThrowsIf(r => !r.HasValue, new AggregateNotFoundException(stream)); _changeTracker.TryGet(stream, out Aggregate aggregate); var serializedState = _eventSerializer.Serialize(root.Value.TakeSnapshot()); var newSnapshot = new SnapshotDocument(aggregate.Identifier, serializedState, aggregate.ExpectedVersion.Value.ToString(), null, typeof(TSnapshot).TypeQualifiedName()); await _cosmosDbClient.CreateItemAsync(newSnapshot, _cosmosDBConfigurations.SnapshotContainerName).ConfigureAwait(false); return(ExecutionResult.Success); }
public SnapshotDocument Serialize(IUncommittedSnapshot serializedSnapshot) { var id = serializedSnapshot.Metadata.GetValue(MetadataKeys.SnapshotId, value => Guid.Parse(value.ToString())); var data = BsonDocumentWrapper.Create(serializedSnapshot.Data); var metadata = BsonDocument.Create(serializedSnapshot.Metadata); var snapshot = new SnapshotDocument { Id = id, Timestamp = DateTime.UtcNow, AggregateId = serializedSnapshot.AggregateId, Version = serializedSnapshot.AggregateVersion, Data = data, Metadata = metadata, }; return(snapshot); }
private SnapshotDocument Serialize(object snapshot, object metadata, ulong version, string streamId) { var document = new SnapshotDocument { Partition = this.Partition, StreamId = streamId, Version = version, BodyType = snapshot.GetType().AssemblyQualifiedName, Body = JToken.FromObject(snapshot, this.JsonSerializer) }; if (metadata != null) { document.Metadata = JToken.FromObject(metadata, this.JsonSerializer); document.MetadataType = metadata.GetType().AssemblyQualifiedName; } return(document); }
public async Task ThenTheSnapshotForVersionIsPersisted(ulong version) { var streamId = ScenarioContext.Current.GetStreamId(); var snapshot = ScenarioContext.Current.GetSnapshot(); var snapshotUri = UriFactory.CreateDocumentUri(this.Context.Database, this.Context.Collection, SnapshotDocument.GenerateId(streamId, version)); var snapshotDocumentResponse = await this.Context.Client.ReadDocumentAsync <SnapshotDocument>(snapshotUri, new RequestOptions { PartitionKey = this.Context.PartitionKey }); Assert.IsNotNull(snapshotDocumentResponse.Document); var snapshotDocument = snapshotDocumentResponse.Document; var snapshotMetadata = ScenarioContext.Current.GetSnapshotMetadata(); Assert.AreEqual(this.Context.Partition, snapshotDocument.Partition); Assert.AreEqual(DocumentType.Snapshot, snapshotDocument.DocumentType); Assert.AreEqual(streamId, snapshotDocument.StreamId); Assert.AreEqual(version, snapshotDocument.Version); Assert.AreEqual(version + EveneumDocument.GetOrderingFraction(DocumentType.Snapshot), snapshotDocument.SortOrder); if (snapshotMetadata == null) { Assert.IsNull(snapshotDocument.MetadataType); Assert.IsFalse(snapshotDocument.Metadata.HasValues); } else { Assert.AreEqual(snapshotMetadata.GetType().AssemblyQualifiedName, snapshotDocument.MetadataType); Assert.AreEqual(JToken.FromObject(snapshotMetadata), snapshotDocument.Metadata); } Assert.AreEqual(snapshot.GetType().AssemblyQualifiedName, snapshotDocument.BodyType); Assert.AreEqual(JToken.FromObject(snapshot), snapshotDocument.Body); Assert.False(snapshotDocument.Deleted); Assert.IsNotNull(snapshotDocument.ETag); }