Example #1
0
        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();
        }