Example #1
0
        public async Task Execute(PangulDbContext db, UpdateAnswerMeta command)
        {
            command.Validate();

            var meta = await db.AnswerMeta.FirstOrDefaultAsync(i =>
                                                               i.UserId == command.UserContext.User.UserId &&
                                                               i.AnswerId == command.Derived.AnswerId &&
                                                               i.RowVersion == command.Derived.RowVersion);

            // Maybe just inserted?
            if (meta == null)
            {
                meta = db.AnswerMeta.Local.AsQueryable().FirstOrDefault(i =>
                                                                        i.UserId == command.UserContext.User.UserId && i.AnswerId == command.Derived.AnswerId);
            }

            if (meta == null)
            {
                throw new PangulCommandFailedException(CommandFailureType.MissingData, $"No such AnswerMeta ({command.AnswerId})");
            }

            // Update properties
            meta.RowVersion = command.Derived.RowVersion;
            meta.Votes      = command.Votes;
        }
Example #2
0
        public async Task <AnswerMetaInternalModel> UpdateAnswerMetadata(PangulDbContext db, UserContext user, UpdateAnswerMeta model)
        {
            model.UserContext = user;

            var meta = await _internalMetaService.RequireAnswerMetaForUser(db, user, model.AnswerId);

            var delta = model.Votes - meta.Votes;
            await _updateAnswerMeta.Execute(db, model);

            if (delta != 0)
            {
                await _internalMetaService.UpdateAnswerGlobalMetadata(db, user, new UpdateAnswerGlobalMeta()
                {
                    UserContext = user,
                    AnswerId    = model.AnswerId,
                    Votes       = delta
                });
            }

            return(await GetAnswerMetadata(db, user, model.AnswerId));
        }