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; }
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)); }