Exemplo n.º 1
0
        private IEventSourced Restore(Type sourceType, string sourceId)
        {
            IEventSourced eventSourced;

            try
            {
                eventSourced = _snapshotStore.GetLatest(sourceType, sourceId) as IEventSourced;
                if (!eventSourced.IsNull())
                {
                    if (LogManager.Default.IsDebugEnabled)
                    {
                        LogManager.Default.DebugFormat(
                            "Find the aggregate root '{0}' of id '{1}' from snapshot. current version:{2}.",
                            sourceType.FullName, sourceId, eventSourced.Version);
                    }
                }
            }
            catch (Exception ex)
            {
                LogManager.Default.Warn(ex,
                                        "Get the latest snapshot failed. aggregateRootId:{0},aggregateRootType:{1}.",
                                        sourceId, sourceType.FullName);
                eventSourced = null;
            }

            var events = _eventStore.FindAll(new SourceInfo(sourceId, sourceType), eventSourced.Version);

            if (!events.IsEmpty())
            {
                if (eventSourced.IsNull())
                {
                    eventSourced = Create(sourceType, sourceId);
                }

                eventSourced.LoadFrom(events);

                if (LogManager.Default.IsDebugEnabled)
                {
                    LogManager.Default.DebugFormat(
                        "Restore the aggregate root '{0}' of id '{1}' from event stream. version:{2} ~ {3}",
                        sourceType.FullName,
                        sourceId,
                        events.Min(p => p.Version),
                        events.Max(p => p.Version));
                }
            }

            return(eventSourced);
        }