public EntityProjection(MongoDBRepository projectionRepository) { When <EntityCreated>(e => { if (e.EntityId == null || e.EntityName == null) { return; } projectionRepository.Connect(); var entityCollection = projectionRepository.GetCollection("Entity"); var document = new BsonDocument { { "Id", e.EntityId.ToString() }, { "Name", e.EntityName } }; entityCollection.InsertOne(document); }); When <BasicDetailsAdded>(e => { if (e.DateOfBirth == null || e.CountryOfResidence == null) { return; } projectionRepository.Connect(); var filter = Builders <BsonDocument> .Filter.Eq("Id", e.EntityId.ToString()); var entityCollection = projectionRepository.GetCollection("Entity"); var searchResult = entityCollection.Find(filter); if (searchResult.CountDocuments() == 0) { return; } var update = Builders <BsonDocument> .Update .Set("DateOfBirth", e.DateOfBirth) .Set("CountryOfResidence", e.CountryOfResidence); entityCollection.UpdateOne(filter, update); }); }
Position?GetPosition(Type projection) { projectionRepository.Connect(); var projectionStateCollection = projectionRepository.GetCollection("ProjectionState"); var filter = Builders <BsonDocument> .Filter.Eq("Id", projection.Name); var count = projectionStateCollection.Find(filter).CountDocuments(); if (count == 0) { return(new Position(0, 0)); } var stateData = projectionStateCollection.Find(filter).First(); ProjectionState state = new ProjectionState(); state.Id = stateData.GetValue("Id").ToString(); state.CommitPosition = stateData.GetValue("CommitPosition").ToInt64(); state.PreparePosition = stateData.GetValue("PreparePosition").ToInt64(); return(new Position(state.CommitPosition, state.PreparePosition)); }
public CaseProjection(MongoDBRepository projectionRepository) { When <CaseInitiated>(e => { if (e.CaseId == null) { return; } projectionRepository.Connect(); var caseCollection = projectionRepository.GetCollection("Case"); var document = new BsonDocument { { "Id", e.CaseId.ToString() }, { "EntityId", e.EntityId.ToString() }, { "Type", Enum.GetName(typeof(CaseType), e.CaseType) } }; caseCollection.InsertOne(document); }); }
public EntityController() { mongoRepository.Connect(); }
public CaseController() { mongoRepository.Connect(); }