public async Task <IActionResult> UpdateDebt(DebtUpdateDTO model) { try { var data = await _debtService.UpdateDebtAsync(model); return(Ok(new { debt = data })); } catch (DbUpdateConcurrencyException) { return(BadRequest(new { Message = "The record you attempted to edit was modified by another user after you got the original value" })); } catch (UnauthorizedAccessException) { return(Unauthorized()); } catch (NoPermissionException e) { return(BadRequest(new { e.Message })); } catch (Exception e) { return(BadRequest(new { e.Message })); } }
public static Debt Update(this Debt debt, DebtUpdateDTO model, Friend friend, Currency currency, out List <FieldChange> fieldChanges) { fieldChanges = new List <FieldChange>(); //debt.Name = debt.Name.HandleChange(model.Name, nameof(debt.Name), out var fieldChange); //if (fieldChange != null) // fieldChanges.Add(fieldChange); debt.Name = model.Name; debt.Description = debt.Description.HandleChange(model.Description, nameof(debt.Description), out var fieldChange); if (fieldChange != null) { fieldChanges.Add(fieldChange); } debt.Friend = debt.Friend.HandleChange(friend, nameof(debt.Friend), out fieldChange); if (fieldChange != null) { fieldChanges.Add(fieldChange); } debt.Synchronize = debt.Synchronize.HandleChange(model.Synchronize, nameof(debt.Synchronize), out fieldChange); if (fieldChange != null) { fieldChanges.Add(fieldChange); } //debt.Value = debt.Value.HandleChange(model.Value, nameof(debt.Value), out fieldChange); //if (fieldChange != null) // fieldChanges.Add(fieldChange); debt.Value = model.Value; debt.CurrentValue = model.CurrentValue; debt.Currency = currency; debt.IsOwnerDebter = debt.IsOwnerDebter.HandleChange(model.IsOwnerDebter, nameof(debt.IsOwnerDebter), out fieldChange); if (fieldChange != null) { fieldChanges.Add(fieldChange); } debt.DateOfOverdue = debt.DateOfOverdue.HandleChange(model.DateOfOverdue, nameof(debt.DateOfOverdue), out fieldChange); if (fieldChange != null) { fieldChanges.Add(fieldChange); } debt.IsClosed = debt.IsClosed.HandleChange(model.IsClosed, nameof(debt.IsClosed), out fieldChange); if (fieldChange != null) { fieldChanges.Add(fieldChange); } debt.IsMoney = debt.IsClosed.HandleChange(model.IsMoney, nameof(debt.IsMoney), out fieldChange); if (fieldChange != null) { fieldChanges.Add(fieldChange); } debt.RowVersion = model.RowVersion; //debt.RowVersion.HandleChange(model.RowVersion, out fieldChange); //if (fieldChange != null) // fieldChanges.Add(fieldChange); return(debt); }
public async Task <DebtReturnDTO> UpdateDebtAsync(DebtUpdateDTO model) { var idClaim = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value; if (!long.TryParse(idClaim, out var ownerId)) { throw new UnauthorizedAccessException(); } var oldDebt = await _debtRepository.GetByIdAsync(model.DebtId, debt => debt.Owner, debt => debt.Friend, debt => debt.Currency); if (oldDebt.Owner.Id != ownerId) { throw new NoPermissionException("User is not owner of this debt"); } var friend = await _friendRepository.GetByIdAsync(model.FriendId, friend1 => friend1.FriendUser); Currency currency = null; if (model.IsMoney) { if (model.Value == null) { throw new ArgumentException("Value can't be null"); } if (model.CurrencyId == null) { throw new ArgumentException("Currency id can't be null"); } currency = await _currenciesRepository.GetByIdAsync(model.CurrencyId.Value); } else if (string.IsNullOrWhiteSpace(model.Name)) { throw new ArgumentException("Thing name can't be empty"); } oldDebt.Update(model, friend, currency, out var listOfFieldChanges); if (listOfFieldChanges.Count != 0) { var change = new Change { ChangedBy = await _userRepository.GetByIdAsync(ownerId), FieldChanges = listOfFieldChanges, ChangedDebt = oldDebt }; await _changeRepository.InsertAsync(change); } oldDebt.ModifiedBy = ownerId; var updatedDebt = await _debtRepository.UpdateAsync(oldDebt); if (friend.FriendUser != null) { await _hubContext.Clients.User(friend.FriendUser.Id.ToString()).SendAsync("UpdateDebts"); } return(updatedDebt.DebtToReturnDebtDTO()); }