public virtual async Task <T> GetByIdAsync <T>(Guid id) where T : AggregateRoot { T item = default(T); var isSnapshottable = typeof(ISnapshottable).IsAssignableFrom(typeof(T)); Snapshot.Snapshot snapshot = null; if ((isSnapshottable) && (SnapshotStorageProvider != null)) { snapshot = await SnapshotStorageProvider.GetSnapshotAsync(typeof(T), id); } if (snapshot != null) { item = ReflectionHelper.CreateInstance <T>(); ((ISnapshottable)item).ApplySnapshot(snapshot); var events = await EventStorageProvider.GetEventsAsync(typeof(T), id, snapshot.Version + 1, int.MaxValue); item.LoadsFromHistory(events); } else { var events = (await EventStorageProvider.GetEventsAsync(typeof(T), id, 0, int.MaxValue)).ToList(); if (!events.Any()) { return(item); } item = ReflectionHelper.CreateInstance <T>(); item.LoadsFromHistory(events); } return(item); }
public Snapshot.Snapshot GetSnapshot(Guid aggregateId) { Snapshot.Snapshot snapshot = null; var connection = GetEventStoreConnection(); connection.ConnectAsync().Wait(); JsonSerializerSettings serializerSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; var streamEvents = connection.ReadStreamEventsBackwardAsync( $"{eventNamePrefix}-{aggregateId}", 0, 1, false).Result; if (streamEvents.Events.Any()) { var result = streamEvents.Events.FirstOrDefault(); snapshot = JsonConvert.DeserializeObject <Snapshot.Snapshot>( Encoding.UTF8.GetString(result.Event.Data), serializerSettings); } connection.Close(); return(snapshot); }
public async Task SaveAsync(Snapshot.Snapshot snapshot) { using (var conn = this._dbConnectionFactory.Get()) { if (await conn.ExecuteAsync($"insert into {nameof(Snapshot)}(id,type,version,data) values(@id,@type,@version,@data)", snapshot) != 1) { throw new Exception("快照添加失败"); } } }
public async Task SaveAsync(Snapshot.Snapshot snapshot) { using (var conn = this._factory.Get()) { if (await conn.ExecuteAsync($"insert into {nameof(Snapshot)}(id,type,version,data) values(@id,@type,@version,@data)", snapshot) != 1) { throw new SAEException($"{nameof(snapshot)} add fail"); } } }
public void SaveSnapshot(Snapshot.Snapshot snapshot) { if (_items.ContainsKey(snapshot.AggregateId)) { _items[snapshot.AggregateId] = snapshot; } else { _items.Add(snapshot.AggregateId, snapshot); } }
public void SaveSnapshot(Snapshot.Snapshot snapshot) { using (IRedisClient redis = clientsManager.GetClient()) { JsonSerializerSettings serializerSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; var strSnapshot = JsonConvert.SerializeObject(snapshot, serializerSettings); redis.SetValue(snapshot.AggregateId.ToString(), strSnapshot); } }
/// <summary> /// Applies the snapshot and updates state of the Aggregate /// </summary> /// <param name="snapshot"></param> public void SetSnapshot(Snapshot.Snapshot snapshot) { //Important: State changes are done here. //Make sure you set the CurrentVersion and LastCommittedVersions here too NoteSnapshot item = (NoteSnapshot)snapshot; this.Id = item.AggregateId; this.CurrentVersion = item.Version; this.LastCommittedVersion = item.Version; this.CreatedDate = item.CreatedDate; this.Title = item.Title; this.Description = item.Description; this.Category = item.Category; }
public Snapshot.Snapshot CopyDigitalToSnapshot(string name) { var snapshot = new Snapshot.Snapshot(ParentSchedule.SnapshotContent); snapshot.Name = name; var defaultLogo = Programs.FirstOrDefault()?.Logo; if (defaultLogo != null) { snapshot.Logo = defaultLogo.Clone <ImageSource, ImageSource>(); } ParentSchedule.SnapshotContent.Snapshots.Add(snapshot); CopyDigitalToSnapshot(snapshot); return(snapshot); }
public void SaveSnapshot(Snapshot.Snapshot snapshot) { var connection = GetEventStoreConnection(); connection.ConnectAsync().Wait(); JsonSerializerSettings serializerSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; var snapshotyEvent = new EventData(snapshot.Id, @snapshot.GetType().ToString(), false, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(snapshot, serializerSettings)), Encoding.UTF8.GetBytes(snapshot.GetType().ToString())); connection.AppendToStreamAsync($"{eventNamePrefix}-{snapshot.AggregateId}", ExpectedVersion.Any, snapshotyEvent).Wait(); connection.Close(); }
public Snapshot.Snapshot GetSnapshot(Guid aggregateId) { Snapshot.Snapshot snapshot = null; using (IRedisClient redis = clientsManager.GetClient()) { var strSnapshot = redis.GetValue(aggregateId.ToString()); if (strSnapshot != "") { JsonSerializerSettings serializerSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; snapshot = JsonConvert.DeserializeObject <Snapshot.Snapshot>( strSnapshot, serializerSettings); } } return(snapshot); }
public override void Deserialize(XmlNode rootNode) { base.Deserialize(rootNode); var node = rootNode.SelectSingleNode(@"ProgramSchedule"); if (node != null) { InitProgramSchedule(); ProgramSchedule.Deserialize(node); } node = rootNode.SelectSingleNode(@"WeeklySection"); if (node != null && SelectedSpotType == SpotType.Week) { InitProgramSchedule(); ProgramSchedule.DeserializeSection(node); } node = rootNode.SelectSingleNode(@"MonthlySection"); if (node != null && SelectedSpotType == SpotType.Month) { InitProgramSchedule(); ProgramSchedule.DeserializeSection(node); } node = rootNode.SelectSingleNode(@"DigitalProducts"); if (node != null) { foreach (XmlNode productNode in node.ChildNodes) { var product = new DigitalProduct(); product.Deserialize(productNode); DigitalProducts.Add(product); } } node = rootNode.SelectSingleNode(@"DigitalProductSummary"); if (node != null) { DigitalProductSummary.Deserialize(node); } node = rootNode.SelectSingleNode(@"Snapshots"); if (node != null) { foreach (XmlNode snapshotNode in node.ChildNodes) { var snapshot = new Snapshot.Snapshot(this); snapshot.Deserialize(snapshotNode); Snapshots.Add(snapshot); } } node = rootNode.SelectSingleNode(@"SnapshotSummary"); if (node != null) { SnapshotSummary.Deserialize(node); } node = rootNode.SelectSingleNode(@"Options"); if (node != null) { foreach (XmlNode optionSetNode in node.ChildNodes) { var optionSet = new OptionSet(this); optionSet.Deserialize(optionSetNode); Options.Add(optionSet); } } node = rootNode.SelectSingleNode(@"OptionsSummary"); if (node != null) { OptionsSummary.Deserialize(node); } }
public Task SaveAsync(Snapshot.Snapshot snapshot) { this._store.Add(snapshot); return(Task.CompletedTask); }
public void CopyDigitalToSnapshot(Snapshot.Snapshot targetSnapshot) { targetSnapshot.DigitalInfo = DigitalInfo.Clone <MediaDigitalInfo, MediaDigitalInfo>(); }
public Snapshot.Snapshot CopyScheduleToSnapshot(string name, DateTime spotDate, bool copySpots) { var snapshot = new Snapshot.Snapshot(ParentSchedule.SnapshotContent); snapshot.Name = name; var defaultLogo = Programs.FirstOrDefault()?.Logo; if (defaultLogo != null) { snapshot.Logo = defaultLogo.Clone <ImageSource, ImageSource>(); } foreach (var program in Programs) { var snaphotProgram = new Snapshot.SnapshotProgram(snapshot); snaphotProgram.Name = program.Name; snaphotProgram.Logo = program.Logo.Clone <ImageSource, ImageSource>(); snaphotProgram.Station = program.Station; snaphotProgram.Daypart = program.Daypart; snaphotProgram.Time = program.Time; snaphotProgram.Length = program.Length; snaphotProgram.Rate = (Decimal?)program.Rate; var weekDaysRange = program.WeekDays.ToList(); if (copySpots && weekDaysRange.Any()) { var weekDaysInOrder = new[] { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday, DayOfWeek.Saturday, DayOfWeek.Sunday, }.ToList(); var firstWeekDay = weekDaysInOrder.IndexOf(weekDaysRange.First()); var lastWeekDay = weekDaysInOrder.IndexOf(weekDaysRange.Count == 2 ? weekDaysRange.ElementAt(1) : weekDaysRange.First()); var templateSpotCount = program.Spots.FirstOrDefault(s => s.Date == spotDate)?.Count; if (templateSpotCount.HasValue) { while (templateSpotCount > 0) { if (!ParentScheduleSettings.MondayBased) { if (templateSpotCount > 0 && firstWeekDay <= weekDaysInOrder.IndexOf(DayOfWeek.Sunday) && lastWeekDay >= weekDaysInOrder.IndexOf(DayOfWeek.Sunday)) { if (!snaphotProgram.SundaySpot.HasValue) { snaphotProgram.SundaySpot = 1; } else { snaphotProgram.SundaySpot++; } templateSpotCount--; } } if (templateSpotCount > 0 && firstWeekDay <= weekDaysInOrder.IndexOf(DayOfWeek.Monday) && lastWeekDay >= weekDaysInOrder.IndexOf(DayOfWeek.Monday)) { if (!snaphotProgram.MondaySpot.HasValue) { snaphotProgram.MondaySpot = 1; } else { snaphotProgram.MondaySpot++; } templateSpotCount--; } if (templateSpotCount > 0 && firstWeekDay <= weekDaysInOrder.IndexOf(DayOfWeek.Tuesday) && lastWeekDay >= weekDaysInOrder.IndexOf(DayOfWeek.Tuesday)) { if (!snaphotProgram.TuesdaySpot.HasValue) { snaphotProgram.TuesdaySpot = 1; } else { snaphotProgram.TuesdaySpot++; } templateSpotCount--; } if (templateSpotCount > 0 && firstWeekDay <= weekDaysInOrder.IndexOf(DayOfWeek.Wednesday) && lastWeekDay >= weekDaysInOrder.IndexOf(DayOfWeek.Wednesday)) { if (!snaphotProgram.WednesdaySpot.HasValue) { snaphotProgram.WednesdaySpot = 1; } else { snaphotProgram.WednesdaySpot++; } templateSpotCount--; } if (templateSpotCount > 0 && firstWeekDay <= weekDaysInOrder.IndexOf(DayOfWeek.Thursday) && lastWeekDay >= weekDaysInOrder.IndexOf(DayOfWeek.Thursday)) { if (!snaphotProgram.ThursdaySpot.HasValue) { snaphotProgram.ThursdaySpot = 1; } else { snaphotProgram.ThursdaySpot++; } templateSpotCount--; } if (templateSpotCount > 0 && firstWeekDay <= weekDaysInOrder.IndexOf(DayOfWeek.Friday) && lastWeekDay >= weekDaysInOrder.IndexOf(DayOfWeek.Friday)) { if (!snaphotProgram.FridaySpot.HasValue) { snaphotProgram.FridaySpot = 1; } else { snaphotProgram.FridaySpot++; } templateSpotCount--; } if (templateSpotCount > 0 && firstWeekDay <= weekDaysInOrder.IndexOf(DayOfWeek.Saturday) && lastWeekDay >= weekDaysInOrder.IndexOf(DayOfWeek.Saturday)) { if (!snaphotProgram.SaturdaySpot.HasValue) { snaphotProgram.SaturdaySpot = 1; } else { snaphotProgram.SaturdaySpot++; } templateSpotCount--; } if (ParentScheduleSettings.MondayBased) { if (templateSpotCount > 0 && firstWeekDay <= weekDaysInOrder.IndexOf(DayOfWeek.Sunday) && lastWeekDay >= weekDaysInOrder.IndexOf(DayOfWeek.Sunday)) { if (!snaphotProgram.SundaySpot.HasValue) { snaphotProgram.SundaySpot = 1; } else { snaphotProgram.SundaySpot++; } templateSpotCount--; } } } } } snapshot.Programs.Add(snaphotProgram); } ParentSchedule.SnapshotContent.Snapshots.Add(snapshot); return(snapshot); }
/// <summary> /// Use this method when you are trying to load a base type, which in it self does not implement /// the <see cref="ISnapshottable{T}" /> interface, but you have a snapshot indicating /// that you need to instantiate child type instead. /// </summary> /// <typeparam name="T">The aggregate type</typeparam> /// <param name="snapshot">The snapshot</param> /// <returns>A subclass instance as <typeparam name="T"></typeparam></returns> public T CreateAggregate <T>(Snapshot.Snapshot snapshot) where T : class, IAggregateRoot { return((T)_resolver.Resolve(_snapshotToTypeMap[snapshot.GetType()])); }