Example #1
0
        public EndToEndTests()
        {
            //This path is used to save in memory storage
            var strTempDataFolderPath = AppDomain.CurrentDomain.BaseDirectory + @"App_Data\";

            //create temp directory if it doesn't exist
            new FileInfo(strTempDataFolderPath).Directory?.Create();

            var inMemoryEventStorePath    = $@"{strTempDataFolderPath}events.stream.dump";
            var inMemorySnapshotStorePath = $@"{strTempDataFolderPath}events.snapshot.dump";

            File.Delete(inMemoryEventStorePath);
            File.Delete(inMemorySnapshotStorePath);

            IEventStorageProvider <Guid> eventStorage =
                new InMemoryEventStorageProvider(inMemoryEventStorePath);

            ISnapshotStorageProvider <Guid> snapshotStorage =
                new InMemorySnapshotStorageProvider(SnapshotFrequency, inMemorySnapshotStorePath);

            _clock               = new MockClock();
            _eventPublisher      = new MockEventPublisher();
            _repository          = new Repository <Schedule, ScheduleSnapshot, Guid, Guid, Guid>(_clock, eventStorage, _eventPublisher, snapshotStorage);
            _eventOnlyRepository = new EventOnlyRepository <Schedule, Guid, Guid>(_clock, eventStorage, _eventPublisher);
        }
Example #2
0
        private static async Task RunAsync()
        {
            //This path is used to save in memory storage
            string strTempDataFolderPath = AppDomain.CurrentDomain.BaseDirectory + @"App_Data\";

            //create temp directory if it doesn't exist
            new FileInfo(strTempDataFolderPath).Directory?.Create();

            var inMemoryEventStorePath     = $@"{strTempDataFolderPath}events.stream.dump";
            var inMemorySnapshotStorePath  = $@"{strTempDataFolderPath}events.snapshot.dump";
            var inMemoryReadModelStorePath = $@"{strTempDataFolderPath}events.readmodel.dump";

            File.Delete(inMemoryEventStorePath);
            File.Delete(inMemorySnapshotStorePath);
            File.Delete(inMemoryReadModelStorePath);

            IClock clock = new MyClock();

            IEventStorageProvider <Guid, Schedule, Guid> eventStorage =
                new InMemoryEventStorageProvider <Guid, Schedule, Guid>(inMemoryEventStorePath);

            ISnapshotStorageProvider <ScheduleSnapshot, Guid, Guid> snapshotStorage =
                new InMemorySnapshotStorageProvider <ScheduleSnapshot, Guid, Guid>(2, inMemorySnapshotStorePath);

            IEventPublisher <Guid, Schedule, Guid> eventPublisher = new EventPublisher <Guid, Schedule, Guid>();

            IRepository <Schedule, Guid, Guid> repository =
                new Repository <Schedule, Guid, Guid, ScheduleSnapshot, Guid>(clock, eventStorage, eventPublisher, snapshotStorage);

            // repository = new EventOnlyRepository<Schedule, Guid, Guid>(clock, eventStorage, eventPublisher);

            var schedule = new Schedule("test schedule");
            await repository.SaveAsync(schedule);

            schedule = await repository.GetByIdAsync(schedule.Id);

            schedule.AddTodo("test todo 1");
            await repository.SaveAsync(schedule);

            schedule = await repository.GetByIdAsync(schedule.Id);

            schedule.AddTodo("test todo 2");
            await repository.SaveAsync(schedule);

            schedule = await repository.GetByIdAsync(schedule.Id);

            schedule.AddTodo("test todo 3");
            await repository.SaveAsync(schedule);

            schedule = await repository.GetByIdAsync(schedule.Id);

            var todo = schedule.Todos.First();

            schedule.UpdateTodo(todo.Id, todo.Text + " updated");
            await repository.SaveAsync(schedule);

            schedule = await repository.GetByIdAsync(schedule.Id);

            todo = schedule.Todos.Last();
            await schedule.CompleteTodoAsync(todo.Id);

            await repository.SaveAsync(schedule);

            Console.WriteLine();
            Console.WriteLine("Schedule loaded from Repository:");
            Console.WriteLine(JsonConvert.SerializeObject(schedule, Formatting.Indented));
        }