public async Task UpdateProjectionAsync(IUpdatedEvent <TEntity> @event) { // Get the current projection. var result = await Options.ExecuteWithTableAsync( typeof(TEntity).Name, TableOperation.Retrieve( @event.PlayerId, @event.Id.ToString())); if (result?.Result == null || !result.HttpStatusCode.IsSuccessCode()) { return; } string json = (result.Result as DynamicTableEntity)? .Properties .FirstOrDefault(p => p.Key == "Data") .Value? .StringValue; var entity = JsonConvert.DeserializeObject <TEntity>(json); var tableEntity = UpdatedEventHandlers[@event.GetType()].Invoke(@event, entity); result = await Options.ExecuteWithTableAsync(typeof(TEntity).Name, TableOperation.Replace(tableEntity)); if (!result.HttpStatusCode.IsSuccessCode()) { // TODO: log update failure } }
public async Task UpdateProjectionAsync(IUpdatedEvent <TEntity> @event) { if (IgnoreEntityType()) { return; } switch (@event) { case UpdateCourse u: var courseDocument = await Context.Courses.FirstOrDefaultAsync(c => c.Id == u.Id); if (courseDocument != null) { var course = JsonConvert.DeserializeObject <Course>(courseDocument.CourseData); course.Holes = u.Holes; course.ImageUri = u.ImageUri; course.Location = u.Location; course.Name = u.Name; courseDocument.Name = u.Name; courseDocument.CourseData = JsonConvert.SerializeObject(course); } break; case UpdateScorecard u: var scorecardDocument = await Context.Scorecards.FirstOrDefaultAsync(s => s.Id == u.Id); if (scorecardDocument != null) { var scorecard = JsonConvert.DeserializeObject <Scorecard>(scorecardDocument.ScorecardData); scorecard.Date = u.Date; scorecard.Scores = u.Scores; scorecard.Notes = u.Notes; scorecardDocument.Date = u.Date; scorecardDocument.ScorecardData = JsonConvert.SerializeObject(scorecard); } break; } await Context.SaveChangesAsync(); }